FFmpeg视频压缩测试
yt-dlp 与 FFmpeg 使用笔记
一、yt-dlp 在 Windows 11 上的使用
运行方式
yt-dlp.exe 是命令行工具,双击无法运行,需通过命令行调用。
方式一:在 exe 所在文件夹打开命令行
- 打开存放 yt-dlp.exe 的文件夹
- 地址栏输入
cmd回车 - 执行
yt-dlp.exe "视频URL"
方式二:加入环境变量(一劳永逸)
- Win 搜索“环境变量”,打开“编辑系统环境变量”
- 环境变量 → 系统变量 → Path → 编辑 → 新建
- 填入 yt-dlp.exe 所在文件夹路径,保存
- 新开命令行,直接执行
yt-dlp "视频URL"
代理设置
下载 YouTube 需要代理。--proxy 参数填入代理软件的本地监听地址。
# HTTP 代理
yt-dlp --proxy "http://127.0.0.1:7890" "视频URL"
# SOCKS5 代理
yt-dlp --proxy "socks5://127.0.0.1:10808" "视频URL"
#`-o`文件名,`%(ext)s`自动替换成正确的扩展名
yt-dlp --proxy "http://192.168.1.9:7895" -N 4 -o "你想要的名称.%(ext)s" "视频链接"端口号需替换为代理软件中实际的本地端口。
多线程下载
yt-dlp --proxy "http://127.0.0.1:端口号" -N 4 "视频URL"走代理时若速度无提升或报错,去掉 -N 4 重试。
配置文件
在 yt-dlp.exe 同目录新建 yt-dlp.conf:
--proxy http://127.0.0.1:7890
-N 4之后直接运行 yt-dlp "视频URL" 即可自动应用。
输出格式说明
- 未安装 FFmpeg:只能下载预合并的低画质版本,通常为 360p MP4
- 已安装 FFmpeg:自动合并音视频,输出 MP4 或 WebM
WebM 格式(VP9/AV1 + Opus)兼容性差,Windows 自带播放器可能无声,推荐用 VLC 播放。
二、FFmpeg 转换 WebM 到 MP4
基础命令
ffmpeg -i input.webm output.mp4CPU 软编码
ffmpeg -i input.webm -c:v libx264 -preset veryfast -crf 32 output.mp4实测参考:31 分 56 秒视频,输出约 236 MB,码率约 895 kbps,耗时 4 分 24 秒。
ffmpeg -i input.webm -c:v libx264 -preset ultrafast -crf 32 output.mp4实测参考:同视频输出约 465 MB,码率约 1991 kbps,耗时 2 分 02 秒。
ultrafast 速度比 veryfast 快约一倍,但压缩效率明显下降,文件大小接近翻倍。追求小文件应使用 veryfast 或更慢的预设。
GPU 硬编码
ffmpeg -i input.webm -c:v h264_nvenc -preset p2 -cq 32 output.mp4实测参考:同视频输出约 451 MB,码率约 1972 kbps,耗时 1 分 38 秒。
硬编码画质增强
ffmpeg -i input.webm -c:v h264_nvenc -preset p2 -cq 32 -spatial-aq 1 output.mp4-spatial-aq 1 会提升画质,但文件明显变大(实测约 612 MB,码率 2616 kbps)。它是画质增强开关,不是压缩开关。
H.265 编码(体积与画质平衡最佳)
ffmpeg -i input.webm -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 96k output.mp4实测参考:同视频输出约 249 MB,码率约 1091 kbps,耗时 1 小时 19 分。
H.265 的 -crf 28 视觉质量约相当于 H.264 的 -crf 23,在相近体积下画质明显优于 H.264。缺点是编码时间极长。若嫌慢,把 -preset 改为 medium,时间可缩短约一半,文件略大。
想继续压缩,可将 -crf 提到 30-32,文件会进一步减小,画面细节有软化。
消除 Opus 警告
ffmpeg -i input.webm -c:v h264_nvenc -preset p2 -cq 32 -c:a aac -b:a 128k output.mp4Error parsing Opus packet header 仅为警告,不影响转换结果,音频可正常转为 AAC。加 -c:a aac 可让警告消失。
三、实测数据汇总
| 编码方式 | 参数 | 文件大小 | 码率 | 耗时 |
|---|---|---|---|---|
| CPU 软编码 | libx264 -preset veryfast -crf 32 | 约 236 MB | 895 kbps | 4 分 24 秒 |
| CPU 软编码 | libx264 -preset ultrafast -crf 32 | 约 465 MB | 1991 kbps | 2 分 02 秒 |
| GPU 硬编码 | h264_nvenc -cq 28 | 约 677 MB | 2962 kbps | 1 分 39 秒 |
| GPU 硬编码 | h264_nvenc -cq 32 | 约 451 MB | 1972 kbps | 1 分 38 秒 |
| GPU 硬编码 | -cq 32 -spatial-aq 1 | 约 612 MB | 2616 kbps | 1 分 42 秒 |
| H.265 软编码 | libx265 -preset slow -crf 28 | 约 249 MB | 1091 kbps | 1 小时 19 分 |
选择建议
- 追求文件最小:H.265
libx265 -preset slow -crf 28 - 追求速度、硬盘充足:GPU 硬编码
h264_nvenc -preset p2 -cq 32 - CPU 预设从 veryfast 改为 ultrafast 会显著增大文件,不推荐为省时间牺牲体积
- GPU 编码文件偏大是正常现象,硬件编码压缩效率低于软编码
- 想要 GPU 接近 CPU 的画质,
-cq需比-crf调低,可从-cq 28起试 -spatial-aq 1提升画质但增大文件,需配合更高的-cq控制体积
编码参数说明
-crf(CPU):恒定速率因子,压缩效率高,文件小-cq(GPU):恒定量化器,压缩效率低,同画质需更高码率-preset:编码速度预设。libx264 常用 ultrafast/fast/veryfast/medium;libx265 常用 medium/slow;NVENC 用 p1-p7,p2 速度较快-spatial-aq 1:空间自适应量化,智能分配码率,提升画质
四、查看与压缩现有 MP4
查看音频码率
ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4输出单位为 bit/s,除以 1000 即 kbps。若输出 N/A,说明音频流未写入码率字段,可用文件总码率减去视频码率估算。
查看完整流信息
ffprobe -v error -show_entries stream=index,codec_type,codec_name,bit_rate -of default=noprint_wrappers=1 input.mp4仅压缩音频
ffmpeg -i input.mp4 -c:v copy -c:a aac -b:a 96k output.mp4-c:v copy 直接复制视频流不重新编码,速度极快且不影响画质。音频从 128 kbps 降到 96 kbps,30 分钟视频约省 8 MB,占总文件约 3.4%,效果有限。
关于二次压缩
不要在已压缩过的 MP4 上二次压缩视频。已有损文件再压一次会叠加画质损失,且体积下降有限。应从原始 WebM 重新转,用最终参数一次到位。
关于格式与体积
文件大小由内部视频编码决定,不由容器后缀决定。WebM 通常搭配 VP9/AV1,压缩效率高于 MP4 常见的 H.264。MP4 搭配 H.265 也能达到接近 WebM 的体积。真正省空间的是编码,不是后缀。
五、其他下载方案
桌面 GUI 软件
- Stacher:yt-dlp 的图形外壳,免费,支持 Windows/macOS/Linux
- VidBee:开源,界面现代,支持 RSS 自动订阅
- 4K Video Downloader Plus:付费,界面简洁,支持 8K
在线工具
- Cobalt.tools:界面干净,但对 YouTube 支持不稳定
- 其他在线网站广告多、画质受限,不作为首选
关于 F12 抓取
YouTube 音视频分离、链接为临时授权、内容为碎片化切片,F12 抓取基本不可用。直接复制地址栏 URL 交给 yt-dlp 是最高效的方式。
六、体积参考与转码水印
30 分钟视频体积参考
总平均码率约 1183 kbps 时,30 分钟文件约 260 MB,属于中等偏低压缩水平,体积控制良好。
| 画质水平 | 1080p 典型码率 | 30 分钟体积 |
|---|---|---|
| 高画质 | 4000-8000 kbps | 900 MB - 1.8 GB |
| 中等画质 | 1500-3000 kbps | 340 MB - 680 MB |
| 中等偏低 | 约 1183 kbps | 约 260 MB |
| 低画质 | 500-1000 kbps | 110 MB - 220 MB |
转码与水印
- 容器级元数据(C2PA 溯源凭证、格式标签、流标签):重新编码后基本清除
- 像素级或码流级隐形水印:可能扛过转码,具体取决于水印嵌入方式和鲁棒性设计
ffprobe只能检测元数据层面变化,无法判断像素级水印是否被清除- 需要确认特定文件水印是否残留时,需使用专业数字水印检测工具