从他人那了解到的一个新的 youtube 下载工具,可以下载 4K 以上的网站视频内容
1 、关于 youtube-dl
Github 项目地址 [ 链接 ]
youtube-dl 是一个命令行程序,适用于从 YouTube.com 等更多网站上下载视频。它需要 Python 环境,版本 2.6,2.7 或 3.2+,并且是多平台支持的。
youtube-dlc 是 社区测试合并版,因 youtube-dl 自 DCMA 事件后合并速度大幅减少而诞生 [ 链接 ]
yt-dlp 是 社区新合并版,因 youtube-dlc 维护者停止维护而诞生。 [ 链接 ]
推荐使用 yt-dlp 版本,原因是 社区活跃 可以修补大量陈旧问题
2 、安装 youtube-dl
作者提供了二进制文件,所以直接可以下载并运行
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl
然后我们可以测试 youtube-dl 是否安装成功
[root@server youtube-dl]# youtube-dl -v [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2019.04.30 [debug] Python version 2.7.5 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core [debug] exe versions: none [debug] Proxy map: {} Usage: youtube-dl [OPTIONS] URL [URL...] youtube-dl: error: You must provide at least one URL. Type youtube-dl --help to see a list of all options.
当然你也可以直接通过 Python 的 pip 来安装,这样可以指定程序执行时的 python 环境。
yum install python36 python36-pip pip3.6 install --upgrade youtube-dl [root@server youtube-dl]# youtube-dl -v [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2019.04.30 [debug] Python version 3.6.6 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core [debug] exe versions: none [debug] Proxy map: {} Usage: youtube-dl [OPTIONS] URL [URL...] youtube-dl: error: You must provide at least one URL. Type youtube-dl --help to see a list of all options.
如果你需要让 youtube-dl 自动合成下载好的视频,或者想得到更高品质的视频,都需要安装 ffmpeg 环境
(默认情况下,如果没有 ffmpeg 则只会下载同时有视频流和音频流的文件,存在低画质的问题)
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm yum install ffmpeg ffmpeg-devel -y ffmpeg -version
Windows 的 ffmpeg 可以到 Github 下载 [ 链接 ]
Static 静态编译 / Shared 动态链接 / GPL 完全开源 / LGPL 组件开源 / Vulkan 外扩展
当你安装好 ffmpeg 后,重新查看 youtube-dl 的信息
[root@server ~]# youtube-dl -v [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2019.04.30 [debug] Python version 3.6.6 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core [debug] exe versions: ffmpeg 2.8.15, ffprobe 2.8.15 [debug] Proxy map: {} Usage: youtube-dl [OPTIONS] URL [URL...] youtube-dl: error: You must provide at least one URL. Type youtube-dl --help to see a list of all options.
你可以查看 youtube-dl 支持的网站列表
youtube-dl --list-extractors
3 、使用 youtube-dl
通常直接使用命令后面跟随 url 地址的方式即可
youtube-dl [url]
但是你会发现,你在这个状态下下载的视频并不是最清晰的,这时候你可以通过 -F
参数或者是 --list-formats
参数查看服务端支持的所有流
(默认情况下,youtube-dl 会尝试下载最佳可用质量,即如果你想要最好的质量,你不需要传递任何特殊选项,youtube-dl 默认会为你选择一个最好的。)
[root@server youtube-dl]# youtube-dl -F https://www.youtube.com/watch?v=PWeH_CcTq_8 [ youtube ] PWeH_CcTq_8: Downloading webpage [ youtube ] PWeH_CcTq_8: Downloading video info webpage [ info ] Available formats for PWeH_CcTq_8: format code extension resolution note 249 webm audio only DASH audio 61k , opus @ 50k, 4.63MiB 250 webm audio only DASH audio 77k , opus @ 70k, 6.13MiB 140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 12.45MiB 251 webm audio only DASH audio 145k , opus @160k, 12.17MiB 171 webm audio only DASH audio 174k , vorbis@128k, 12.76MiB 160 mp4 256x110 144p 88k , avc1.4d400b, 24fps, video only, 7.53MiB 278 webm 256x110 144p 119k , webm container, vp9, 24fps, video only, 6.98MiB 133 mp4 426x182 240p 191k , avc1.4d400d, 24fps, video only, 16.14MiB 242 webm 426x182 240p 253k , vp9, 24fps, video only, 15.22MiB 243 webm 640x274 360p 489k , vp9, 24fps, video only, 28.08MiB 134 mp4 640x274 360p 494k , avc1.4d4015, 24fps, video only, 41.07MiB 244 webm 854x366 480p 708k , vp9, 24fps, video only, 50.57MiB 135 mp4 854x366 480p 914k , avc1.4d401e, 24fps, video only, 76.10MiB 247 webm 1280x548 720p 1250k , vp9, 24fps, video only, 100.90MiB 136 mp4 1280x548 720p 1845k , avc1.4d401f, 24fps, video only, 148.01MiB 248 webm 1920x822 1080p 2466k , vp9, 24fps, video only, 178.39MiB 137 mp4 1920x822 1080p 3379k , avc1.640028, 24fps, video only, 268.37MiB 18 mp4 640x274 medium , avc1.42001E, mp4a.40.2@ 96k, 66.18MiB 43 webm 640x360 medium , vp8.0, vorbis@128k, 83.68MiB 22 mp4 1280x548 hd720 , avc1.64001F, mp4a.40.2@192k (best)
你可以通过手工指定 --format
的方式下载对应流,一个完整的视频一般需要 [ 视频流+视频流+音频流+音频流+字幕流+字幕流 ]
(如果中间是逗号则不合并仅分开下载)
youtube-dl -f '137+171' https://www.youtube.com/watch?v=PWeH_CcTq_8
在这里提醒一下
1 、如果你没有安装 ffmpeg,则你无参数时下载的是第 22 号格式代码的文件,此文件包含了音频和视频,但并不是分辨率最大的选择。
2 、如果你已经安装了 ffmpeg,则你下载的是第 137 号与第 171 号格式代码的文件,然后由 ffmpeg 合并成最终视频并自动删除合并前文件。
3 、如果你没有安装 ffmpeg,并且采用手工指定的方式下载,你只会下载到两个文件,不会合并成最终文件。
一般没有参数时等同于下面这样手动指定的方式,
youtube-dl -f 'bestvideo+bestaudio' [url]
以及如果你想手工的限制下载时的最大分辨率,你可以在后面额外添加 [] 并指定信息。
(本例限制视频流最大高度不得超过 1080P,如果服务器没分视频流和音频流则下载最大高度不超过 720P 的文件)
youtube-dl -f 'bestvideo[height<=1080]+bestaudio/best[height<=720]' [url]
这里的文字参数一共有六种,分别如下
best:选择具有视频和音频的单个文件所代表的最佳质量格式。 worst:选择具有视频和音频的单个文件所代表的最差质量格式。 bestvideo:选择最佳质量的仅视频格式(例如 DASH 视频)。可能无法使用。 worstvideo:选择质量最差的纯视频格式。可能无法使用。 bestaudio:选择质量最佳的音频格式。可能无法使用。 worstaudio:选择质量最差的音频格式。可能无法使用。
如果希望合成为 MP4 文件,因为 Ubuntu 的 ffmpeg 无法将 webm 音频 直接与 mp4 合并,所以需要使用 m4a 音频格式
关于格式,webm 和 mp4 都作为容器,实际视频编码为 vp8 或者 avc1
youtube-dl -f 'bestvideo+(bestaudio[ext=m4a]/bestaudio)' --merge-output-format mp4 [url]
如果你希望指定文件名,可以使用 --output 指定
youtube-dl --output [url]
如果你希望下载视频封面和视频简介,会在同级文件夹下创建两个新文件储存信息
youtube-dl --write-thumbnail --write-description
如果你的下载客户端在国内,你可能需要手动指定代理,通常有两种方式指定
youtube-dl --http-proxy HOST:PORT [url] youtube-dl --socks-proxy HOST:PORT [url]
如果你下载的网站需要登陆才可以访问的资源,你可以添加账号密码参数
也可以通过创建 .netrc 文件来储存账号密码(不推荐)参见 [ 链接 ]
youtube-dl -u "yourname" -p "yourpass" [url]
4 、使用 youtube-dl 获取字幕
查看视频的字幕类型清单
youtubd-dl --list-subs [url]
下载视频并额外下载英文的 vtt 格式的字幕文件
youtubd-dl --write-sub --sub-lang en [url]
下载视频并额外下载中文的 vtt 格式的字幕文件,并直接合并到视频文件中(需要 ffmpeg 支持)
youtubd-dl --write-sub --sub-lang zh --embed-sub [url]
不下载视频,只下载英文的 vtt 格式的字幕文件
youtube-dl --write-sub --skip-download [url]
下载视频并额外下载所有语言的 vtt 格式的字幕文件
youtube-dl --write-sub --all-subs [url]
如果你想将 VTT 字幕转换为 SRT 纯文字字幕,你可以设置字幕保存的格式
youtube-dl --write-sub --sub-format "ass/srt/best" --convert-subs "srt"' [url]
又或者想下载流媒体,但是 m3u8 格式需要合并
ffmpeg -i [url] -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4
又或者需要对视频进行转码(CRF 越大文件越小)
ffmpeg -i [file] -c:v libx264 -crf 16 -c:a copy output.mp4
5 、使用 Cookie 解开订阅限制
有一些视频存在版权或订阅限制,又或者网站通过 Cookie 追踪用户并限制访问方式
此时我们需要添加 Cookie 信息,并在下载时指定 Cookie 信息。
注意本方式提取 Cookie 的浏览器不可注销用户(限定登陆状态)
Chrome 打开目标网站,访问页面后,按 F12 启用开发者工具 DevTools,选择 网络,按 F5 刷新网页,找到等同于地址栏请求 URL 的第一个报文 类型 document 状态 200 后,点击标头,在请求标头内容中提取 cookie: ABC******DEF 相关字符串。
提取到该字符串后,我们可以在命令中直接增加该字段,此时将携带身份访问目标服务器。
youtube-dl --add-header "Cookie: ABC******DEF" [url]
或者我们可以保存为一个文件,并通过读取该文件的方式长期使用。
youtube-dl --add-header "Cookie: $(cat youtube-header.txt)" [url] root@server:~#cat youtube-header.txt PREF=tz=Asia.Shanghai;__Secure-3PAPISID=QWERTYUIOP
如果认为该方式提取的 Cookie 信息实在过多,而且使用的时候可能会有其他的麻烦(比如跨域访问)
我们可以通过指定 Netscape 格式的 Cookie 进行挂载
youtube-dl --cookies cookies.txt [url]
所以我们需要提取我们用得到的 Cookie 来使用,此时我们需要 了解 Netscape Cookie 格式
注意 Netscape 文件首行必须存在标识 # Netscape HTTP Cookie Fileile
同时使用 Tab 做分隔符(不能用空格)
# Netscape HTTP Cookie Fileile # Useage Example # 1) wget -x --load-cookies cookies.txt [url] # 2) curl --cookie cookies.txt [url] # 3) aria2c --load-cookies cookies.txt [url] # 4) youtube-dl --cookies cookies.txt [url] # ------------ # Domain HTTP Path Secure Timestamp Name Value .youtube.com TRUE / TRUE 0 PREF tz=Asia.Shanghai .youtube.com TRUE / TRUE 0 __Secure-3PAPISID QWERTYUIOP
本格式为通用 Cookie 储存格式,对应浏览器 F12 中的 储存 Cookie 部分
懒人 Chrome 的 Cookie 脚本 [ 链接 ] (不建议)
我们可以直接使用 js 脚本读取浏览器中的 cookie 并保存到本地(仅限本域,小心泄露)
(function() { let S = '# Netscape HTTP Cookie File\n'; for (raw_cookie of document.cookie.split(';')) { let cookie = raw_cookie.trim(); let separator = cookie.indexOf('='); let name = cookie.substring(0, separator); let value = cookie.substring(separator + 1); let domain = window.location.hostname; // hopefully this will convert domains like `www.test.com` and `test.com` into `.test.com` domain = domain.replace('www.', '.'); if (domain[0] !== '.') { domain = '.' + domain; } // netscape cookie file format: // # domain HTTP PATH SECURE timestamp name value // .test.com TRUE / FALSE 123456789 token 1234abcdef S += `${domain}\tTRUE\t/\tTRUE\t0\t${name}\t${value}\n` } console.log(S) })();
注意 Cookie 含有一个选项为 HTTPOnly,该选项启用时会限制非 http 请求读取该 cookie(如 JS 脚本 读 Cookie)
所以如果通过浏览器,我们可以看到更多的 http only 启用的 Cookie 但无法被脚本读取。
注意 Cookie 含有一个选项为 Secure,该选项启用时会限制非 安全/加密 请求读取该 cookie(如 http 读 Cookie)
还可以使用命令读取浏览器所有 Cookie(完全模拟用户)
yt-dlp --cookies youtube-cookie.txt --cookies-from-browser chrome
但因为所有 Cookie 都会被导出,极高风险,慎重考虑
6 、使用 yt-dlp 支持更多选项
6.1 、 youtube-dl 与 yt-dlp 的显著区别
社区版和官方版本还是有很多区别的。
youtube-dl 采用 best 而非 (bestvideo+bestaudio)/best
yt-dlp 采用 (bestvideo*+bestaudio)/best(如果最高分辨率的文件同时含有音频,则直接使用该文件)
youtube-dl 允许 多视频或多音频 的合并
yt-dlp 禁止 多视频或多音频 的合并,需要手动开启以支持多轨合并
youtube-dl 不支持 喜好 --format-sort 参数
yt-dlp 支持 喜好 --format-sort 参数以调节匹配优先级
youtube-dl 默认输出模板 %(title)s-[%(id)s].%(ext)s
yt-dlp 默认输出模板 含空格 为 %(title)s [%(id)s].%(ext)s
当需要展示视频所支持的格式时,两者也有不同。(best 标记变成 ~ 符号放在 文件大小 前面)
root@server:~# yt-dlp -F https://www.youtube.com/watch?v=PWeH_CcTq_8 [ youtube] PWeH_CcTq_8: Downloading webpage [ youtube] PWeH_CcTq_8: Downloading android player API JSON [ info] Available formats for PWeH_CcTq_8: ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO ───────────────────────────────────────────────────────────────── sb2 mhtml 48x27 │ mhtml │ images storyboard sb1 mhtml 105x45 │ mhtml │ images storyboard sb0 mhtml 210x90 │ mhtml │ images storyboard 139 m4a │ 4.78MiB 48k https │ audio only mp4a.40.5 48k 22050Hz low, m4a_dash 249 webm │ 4.63MiB 47k https │ audio only opus 47k 48000Hz low, webm_dash 250 webm │ 6.13MiB 62k https │ audio only opus 62k 48000Hz low, webm_dash 140 m4a │ 12.69MiB 129k https │ audio only mp4a.40.2 129k 44100Hz medium, m4a_dash 251 webm │ 12.17MiB 124k https │ audio only opus 124k 48000Hz medium, webm_dash 394 mp4 256x110 24 │ 5.22MiB 53k https │ av01.0.00M.08 53k video only 144p, mp4_dash 160 mp4 256x110 24 │ 9.07MiB 92k https │ avc1.4d400b 92k video only 144p, mp4_dash 278 webm 256x110 24 │ 6.98MiB 71k https │ vp9 71k video only 144p, webm_dash 17 3gp 176x144 12 │ 7.65MiB 78k https │ mp4v.20.3 78k mp4a.40.2 0k 22050Hz 144p 395 mp4 426x182 24 │ 10.95MiB 111k https │ av01.0.00M.08 111k video only 240p, mp4_dash 133 mp4 426x182 24 │ 22.78MiB 232k https │ avc1.4d400d 232k video only 240p, mp4_dash 242 webm 426x182 24 │ 15.22MiB 155k https │ vp9 155k video only 240p, webm_dash 396 mp4 640x274 24 │ 23.21MiB 236k https │ av01.0.01M.08 236k video only 360p, mp4_dash 134 mp4 640x274 24 │ 43.24MiB 441k https │ avc1.4d4015 441k video only 360p, mp4_dash 18 mp4 640x274 24 │ 66.18MiB 675k https │ avc1.42001E 675k mp4a.40.2 0k 44100Hz 360p 243 webm 640x274 24 │ 28.08MiB 286k https │ vp9 286k video only 360p, webm_dash 397 mp4 854x366 24 │ 41.70MiB 425k https │ av01.0.04M.08 425k video only 480p, mp4_dash 135 mp4 854x366 24 │ 62.26MiB 635k https │ avc1.4d401e 635k video only 480p, mp4_dash 244 webm 854x366 24 │ 50.57MiB 516k https │ vp9 516k video only 480p, webm_dash 398 mp4 1280x548 24 │ 84.04MiB 857k https │ av01.0.05M.08 857k video only 720p, mp4_dash 136 mp4 1280x548 24 │ 98.44MiB 1004k https │ avc1.4d401f 1004k video only 720p, mp4_dash 22 mp4 1280x548 24 │ ~113.75MiB 1133k https │ avc1.64001F 1133k mp4a.40.2 0k 44100Hz 720p 247 webm 1280x548 24 │ 100.90MiB 1029k https │ vp9 1029k video only 720p, webm_dash 399 mp4 1920x822 24 │ 147.40MiB 1504k https │ av01.0.08M.08 1504k video only 1080p, mp4_dash 137 mp4 1920x822 24 │ 296.28MiB 3023k https │ avc1.640028 3023k video only 1080p, mp4_dash 248 webm 1920x822 24 │ 178.39MiB 1820k https │ vp9 1820k video only 1080p, webm_dash
个人常用的文件下载及字幕联合处理方式(1080P MP4 内嵌 SRT 字幕 / 4K WEBM 外挂 VTT 字幕)
yt-dlp --merge-output-format mp4 --format-sort "res:1080,vcodec:av1" --format '(bestvideo*+bestaudio)/best' --write-thumbnail --write-description --write-subs --sub-langs "zh-CN,zh-TW,en,ja" --sub-format "ass/srt/vtt/best" --convert-subs "srt" --embed-sub [url]
yt-dlp --merge-output-format webm --format-sort "res:2160,vcodec:av1" --format '(bestvideo*+bestaudio)/best' --write-thumbnail --write-description --write-subs --sub-langs "zh-CN,zh-TW,en,ja" --sub-format "ass/srt/vtt/best" [url]
6.2 、多线程下载
或许我们可能需要多线程下载,但通常受限于网速,单线程已经拉满了。
默认的线程数是 1 ,未开启多线程下载同时也是减少 被降速 的可能性
yt-dlp --concurrent-fragments 8 [url]
同时额外增加一个选项为 失败后重试下载,默认重试次数 10
yt-dlp --retries 10 [url]
6.3 、低速重新下载
在批量下载视频时经常会遇到一个情况:速度本来 10MB/s 回头一看 10KB/s
这是因为 CDN 或 站点策略 限制了用户反复爬取,而网页的解决方式是 刷新页面
对于 yt-dlp 而言,社区增加了一个解决方案,使用一个参数作为最低速度限制,低于则重新下载 [ 链接 ]
yt-dlp --throttled-rate 100K [url]
6.4 、优先级排序方式
ytdlp 支持 --format-sort 管理优先级顺序,也可以通过 --format 参数使用用户指定参数
两者参数优先级不同,--format 的优先级高于 --format-sort 的优先级
yt-dlp --format 'bestvideo[vcodec^=avc1]+bestaudio' --format-sort "vcodec:av01"
此时虽然优先级排序会将 av01 类型作为优先选择项,但因为 --format 指定了 vcodec^=avc1 而将 下载选择 限定在 avc1 格式
更多优先级顺序可以参考 [ 链接 ]
6.5 、限定访问所使用的 IP 协议
IPV6 是很优秀,但经常能遇到 IPV6 无法打开或下载的情况。
yt-dlp --force-ipv4 [url]
7 、 FFmpeg 使用
有些情况下,还是需要直面 FFmpeg 的命令
7.1 、 FFmpeg 常用命令
ffmpeg -c:v hevc -r 30 -i "input.mp4" -r 25 -c:v libx265 -b:v 2000k -s 1280x720 -c:a aac -vf "fps=30,ass=someone.ass" -ss 00:00:20 -to 00:03:40 "output.mp4"
7.2 、 FFmpeg 硬件加速
默认 FFmpeg 是依靠 CPU 软编解码,如果我们有 Nvidia 等硬件加速设备,完全可以使用显卡处理
关于 Nvidia 硬件加速 FFmpeg 的说明 [ 链接 ]
首先需要确认当前硬件设备的支持条件,从官网下载最新版本的 FFmpeg 和 Cuda(AMD 不需要)
Nvidia 显卡的编码与解码支持列表 [ 链接 ]
FFmpeg 硬件加速的编码与解码支持列表 [ 链接 ]
Windows 下 PowerShell 查询 FFmpeg 硬件加速支持的命令
查询当前硬件设备下 FFmpeg 与 硬件加速 支持情况 PS > ffmpeg -hwaccels Hardware acceleration methods: qsv cuda dxva2 opencl d3d11va vulkan qsv:intel 显卡的快速视频同步技术(quick sync video) amf:amd 显卡的 amf 硬件编码器(amd hardware encoder) cuda: nvidia 显卡的硬件视频编码器与解码器(替代名称) nvenc:nvidia 显卡的硬件视频编码器(不同代名) nvdec:nvidia 显卡的硬件视频解码器(不同代名) cuvid:nvidia 显卡的硬件视频解码器(不同代名) vulkan:跨平台 流加速 与 编解码 支持(但是大概率不会自带所属的编解码器) opencl:标准 OpenCL 所支持的 CPU+GPU 滤波器合集(可对应下属五个类型) *dxva2:仅 NV12 表面,所有平台(Direct -X Video Acceleration API) *d3d11va:仅 Intel 的 NV12 纹理 *VAAPI:所有表面类型。 *ARM Mali:所有表面类型,通过 DRM 对象共享。 *libmfx:仅 NV12 表面,通过 VAAPI 或 DXVA2 。
查询当前硬件设备下 FFmpeg 解码支持情况 PS > ffmpeg -decoders | sls nvidia V..... av1_cuvid Nvidia CUVID AV1 decoder (codec av1) V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264) V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc) V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg) V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video) V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video) V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4) V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1) V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8) V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)
查询当前硬件设备下 FFmpeg 编码支持情况 PS > ffmpeg -encoders | sls nvidia V....D av1_nvenc NVIDIA NVENC av1 encoder (codec av1) V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264) V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
根据上方我们可以知道,本机支持 CUDA 并能调用 cuvid 与 nvenc 两者。
此时我们可以添加硬件编解码的参数给 FFmpeg 了,注意前后顺序,先解码,再编码
ffmpeg -hwaccel cuda -c:v hevc_cuvid -i video.mp4 -c:v h264_nvenc output.mp4
顺序是 指定硬件编码方式 cuda,指定解码方式,指定输入文件,指定编码方式,指定输出文件
8 、相关链接
youtube-dl 使用小记 [ 链接 ]
更好理解 youtube-dl 该如何使用 [ 链接 ]
FFmpeg 硬件加速介绍 [ 链接 ]
FFmpeg 使用显卡加速转码 [ 链接 ]