谁应该看这篇文章?
适合:
- 速查的高级用户:直接翻目录或 Ctrl+F,找你要的那节,参数表格和命令示例都在
- 想系统了解的小白:从头读,每个参数都有解释,假定你不熟悉命令行
不适合:
想抬杠的:关于哪种编码器在哪种内容下 VMAF 更高,这个问题没有金标准。根据信息论的基本原理,不可能存在一种编码既无损画质又极低码率——一切都是 trade-off,只能对特定视频源做 VMAF 实测才能得出有效结论。如果你热衷这类深度分析,出门左转这篇文章更适合你:视频压缩深度测试(知乎)
只盯着存储成本的人:除了存储成本,还有——编码时间成本(压个视频让电脑满载几百个小时值不值)、解码平台限制成本(目标设备不支持AV1还得转回来再看)、编解码电费成本(显卡满载的功耗感人)、调参时间成本(每种不同的视频源都得反复测 VMAF 和调参)。存储是成本,这些也是成本,甚至还有你看这篇文章本身的时间成本,都应该考虑在内。
为什么用 FFmpeg CLI,而不是 GUI 工具?
市面上有很多 GUI 封装工具——小丸、格式工厂、ShanaEncoder、HandBrake、FFmpegFreeUI 等等,它们的本质大多是给 FFmpeg 套了个图形界面,把你在界面里选的参数翻译成 FFmpeg 命令在后台运行。尽管并非所有 GUI 工具都基于 FFmpeg(例如 HandBrake 部分功能直接调用显卡厂商 SDK),但功能上大差不差。
GUI 工具的问题:
- 参数覆盖不全:GUI 不可能把 FFmpeg 所有参数都列出来,总有你需要但界面没有的选项
- 停更风险与沉没成本:很多小工具停更了你就傻了,学会的操作逻辑也迁移不走;FFmpeg 本身几乎不可能停更,它已经是音视频处理领域的基础设施级的存在了,掌握了就是你的
- 自由度受限:脚本化、批量处理、条件判断,CLI 天然支持,GUI 永远差一口气
并不是说 GUI 工具不好,它们的确很方便(我自己也经常用 LosslessCut);但掌握 FFmpeg CLI 之后,GUI 工具对你来说就指是"便利品",而不是"必需品",你永远有托底的杀手锏。
安装 FFmpeg
请直接参考官方指南 Download FFmpeg
如果用包管理器装,环境变量应该会自动配好,直接运行 ffmpeg 就可以;如果直接下载静态构建手动安装,记得手动添加环境变量或把命令中的 ffmpeg 改成相应路径。
验证安装: 打开终端或命令提示符,输入 ffmpeg -version,能看到版本信息就成功了。
一、基础概念
在输参数之前,有几个概念必须搞清楚。
1.1 容器格式 vs 编码格式
我们平时说的"MP4 文件",严格来说由两层组成:
- 容器格式(封装格式):文件的"外壳",即文件扩展名所代表的格式。常见的有
.mp4、.mkv、.mov。容器负责把视频流、音频流、字幕流"装在一起" - 编码格式:视频流本身的压缩标准。同样是
.mp4容器,里面的视频流可能是 H.264,也可能是 H.265,或者 AV1
"这是个 MP4"只说明了容器,没说明编码。用 ffprobe(FFmpeg 三件套之一,和 ffplay 一样应该会一起装好)可以直接查看文件的元信息。
1.2 编码格式与编码器
编码格式只是标准,编码器才是执行者(按照标准把视频数据实际编码出来)。
常用对照表:
| 编码格式 | CPU 软件编码器 | NVIDIA GPU | Intel GPU | AMD GPU |
|---|---|---|---|---|
| H.264 | libx264 | h264_nvenc | h264_qsv | h264_amf |
| H.265 (HEVC) | libx265 | hevc_nvenc | hevc_qsv | hevc_amf |
| AV1 | libsvtav1 | av1_nvenc(40系+) | av1_qsv(Arc/14代核显+) | av1_amf(RX7000+) |
带 lib 前缀的是纯软件编码器(用 CPU 计算),其余为硬件编码器(调用显卡内专用编解码单元)。
关于显卡编码速度的常见误解:显卡的"3D 游戏性能"与视频编码速度几乎无关。NVIDIA 的 NVENC 编码单元是独立的专用硬件——4060 和 4090 在单个编码任务上速度基本一致,因为两者都只有一两个 NVENC 单元,是 NVENC 单元数量和代际决定速度,而不是 CUDA 核心数量。
1.3 码率(比特率)
码率 = 视频每秒传输的数据量,单位是 kbps(千比特/秒)或 Mbps(兆比特/秒)。
- 1080p 普通内容(教程、生活录像):1-3 Mbps 通常够用
- 1080p 高动态游戏录屏:3-6 Mbps
- 4K 内容:8-20 Mbps
1.4 像素格式
yuv420p:8bit,兼容性最广,几乎所有设备都支持yuv420p10le:10bit,色彩过渡更细腻,低码率下反而质量可能更好(不平滑的色彩过渡本身就是高频噪声会浪费码率),用 HEVC/AV1 且设备兼容时推荐
二、命令行基础语法
2.1 命令的基本结构
ffmpeg:调用 FFmpeg 程序-i:input 的缩写,指定输入文件,后面跟文件路径- 各种参数:每个选项都是
-参数名 参数值的格式 - 最后一个路径(没有
-开头的参数在前)通常是输出文件
2.2 反斜杠换行(bash / PowerShell)
行末的 \ 表示"这行还没写完,下一行是接续"。这只是为了让很长的命令看起来更清晰,效果完全等同于写成一行。
Windows CMD 中不能用 ` 换行,要用 ^;Powershell 要用 ``,且前面要由空格;本文示例统一用 bash 格式,Windows 用户请自行替换,或者不换行直接写成一行。
2.3 环境变量
export VIDEO="..." 是 bash 中设置变量的写法。之后用 $VIDEO,shell 会自动把它替换成那段 URL,避免重复输入。这个变量只在当前终端窗口的会话中有效,关闭窗口就消失了。
2.4 指定使用哪块 GPU
CUDA_VISIBLE_DEVICES=1 是一个临时环境变量,写在命令前,只对这条命令生效。它告诉 CUDA 只把编号为 1 的 GPU(编号从 0 开始)暴露给这个进程,FFmpeg 就只能用那块显卡。多卡机器分配任务时使用。
三、最基础的输入输出
3.1 查看文件信息
FFProbe 会打印输入文件的元信息(分辨率、帧率、编码格式、时长、码率等),然后退出。这是快速查看文件信息的常用方式。
3.2 直接转封装(不重新编码)
-c:codec,指定编码器copy:对该流直接复制(不重编码)- 速度极快,因为只是换了个容器"壳",但仅适用于目标容器兼容源编码的情形,否则会报错。
3.3 覆盖已有文件
-y:如果输出文件已存在,直接覆盖,不交互询问。不加这个参数时,FFmpeg 会停下来问你要不要覆盖
3.4 指定编码器
-c:codec,指定编码器:v:video,对视频:a:audio,对音频copy:对该流直接复制(不重编码)
3.5 指定码率
-b:bitrate,指定码率2M: 2Mbps,M大写
四、时间裁剪与剪切
这是高频操作,和编码参数无关,单独讲清楚。
4.1 时间参数说明
| 参数 | 含义 |
|---|---|
-ss 30 | 从第 30 秒开始处理(也支持 00:00:30 格式) |
-to 120 | 输出截止到第 120 秒(相对于输入文件起点) |
-t 90 | 输出持续 90 秒 |
-to 和 -t 的区别:-ss 30 -to 120 等于 -ss 30 -t 90,结果一样(从 30s 到 120s,共 90s),但逻辑语义不同,按需选用。
4.2 关键帧剪切(快,不精确)
-ss 放在 -i 前面:FFmpeg 先快速 seek 到靠近 30s 的关键帧,然后再开始解码。由于关键帧不一定恰好在 30s,实际起点可能略早几秒。
-c copy 直接复制流,不重新编码,速度接近瞬间完成,适合快速提取片段。
4.3 重编码剪切(精确,较慢)
-ss 放在 -i 后面:FFmpeg 从头解码,精确丢弃前 30s,起点精确到帧。代价是需要重新编码,速度相应变慢。
适合场景:本身就要重压缩的任务(剪切和二压合并成一步,不需要先切再压)。
建议:如果本来就要二压,直接用
-ss(放-i后)同时做剪切和压缩,一步到位。如果只是想快速切片段留着,用-c copy,秒出结果,精度够用就行。
五、视频参数
5.1 分辨率缩放
-vf:video filter,视频滤镜,后面跟引号包裹的滤镜表达式scale=-2:1080:缩放滤镜- 第一个值
-2:宽度自动计算,保持原始宽高比,且结果能被 2 整除(编码器要求) - 第二个值
1080:目标高度 1080 像素 - 写
scale=1920:1080则强制指定宽和高(不保证宽高比) - 写
scale=1280:-2则固定宽,高度自动算
- 第一个值
5.2 帧率
-r:设置输出帧率(Frames Per Second)。不加-r则保持输入帧率
5.3 像素格式
-pix_fmt:pixel formatyuv420p:8bit,兼容性最好,保守推荐yuv420p10le:10bit,HEVC/AV1 推荐
六、音频参数
6.1 直接复制音频(最推荐)
源文件音频质量没问题的情况下,优先复制,无质量损失,而且快。
6.2 重新编码音频
-b:a 128k:音频目标比特率 128 kbps
常用音频编码器:
| 编码器 | 特点 |
|---|---|
aac | 最通用,MP4 容器标配,128k-320k |
libopus | 同质量体积最小,推荐用于 MKV |
flac | 无损 |
libmp3lame | MP3,兼容性好,用 -q:a 0(最佳质量) |
copy | 直接复制,优先选这个 |
6.3 选择特定音轨
-map:手动指定要输出哪条流0:第 1 个输入文件(从 0 计数)v:0:该文件的第 1 条视频流a:1:该文件的第 2 条音频流(比如日语音轨)
- 不加
-map时,FFmpeg 自动选每种类型中"最佳"的一条
七、码率控制模式
这是视频编码最核心的部分,直接决定画质和文件大小。
7.1 CRF 模式(CPU 编码器专用)
-crf:Constant Rate Factor,恒定质量因子- 数值越小画质越好文件越大,越大越糊越小
- 推荐范围:
| 编码器 | 推荐 CRF 范围 | 通用中点 |
|---|---|---|
libx264 | 18-28 | 23-24 |
libx265 | 20-28 | 24-26 |
libsvtav1 | 28-38 | 32-34 |
重要:CRF 是 CPU 软件编码器专用,GPU 硬件编码器不支持
-crf。
7.2 CQ 模式(NVENC 的恒定质量)
-rc:v vbr:rate control,码率控制模式,vbr是可变码率-cq:v 28:NVENC 的恒定质量值(类似 CRF,但数值对应关系不同)-b:v 0:目标码率设为 0,配合 CQ 使用,表示不额外限制码率
CQ 与 CRF 的对应关系(近似):
⚠️ 最常见的误区:根据 CPU 编码
-crf 24的经验,在用 GPU 编码时也选-cq 24。这相当于 CPU 的-crf 18(画质极好但文件极大),被误以为"GPU 编码出来的文件比 CPU 还大"——其实只是 CQ 值选错了。
7.3 Global Quality(Intel QSV)
- Intel QSV 的恒定质量参数,取值逻辑与 CPU CRF 更接近(24 对 24)
7.4 QP 模式(AMD AMF)
-qp_i:I 帧(关键帧)的量化参数-qp_p:P 帧的量化参数,通常与-qp_i设相同值
7.5 VBR 码率模式(有明确码率上限时)
-b:v 2M:视频目标码率 2 Mbps-maxrate 3M:最大码率上限,峰值不超过 3 Mbps-bufsize 5M:缓冲区大小,控制码率波动幅度(建议设为 maxrate 的 1.5-2 倍)- 注意:
M必须大写,小写m在某些情况下不生效
八、NVENC 高级参数详解
以下参数针对 NVIDIA 显卡编码(hevc_nvenc / av1_nvenc)。
8.1 编码预设与调优
-preset:编码速度预设,p1(最快)到p7(最慢/最优质)。越慢压缩效率越高,同等画质文件更小。日常推荐p4(平衡)到p7(质量优先)-tune:v hq:调优目标为高质量(High Quality);ull是超低延迟(直播场景);lossless是无损
8.2 多遍编码
-multipass 2:两遍编码,第一遍分析,第二遍编码,压缩效率更高。编码时间增加约 30-50%,但文件更小或画质更好
8.3 前瞻帧数
-rc-lookahead:向前预看多少帧来辅助码率分配决策。范围 0-32,值越大压缩越好,速度越慢,推荐设32
8.4 自适应量化(AQ)
-spatial-aq 1:空间自适应量化,开启(1)后,根据画面区域复杂度分配码率——纹理丰富的地方多给,大面积纯色的地方少给-temporal-aq 1:时间自适应量化,根据帧间运动量分配码率——运动剧烈的帧多给-aq-strength:AQ 强度,范围 1-15,推荐 8-12;值过高会导致码率分配失衡
8.5 GOP 结构
-g 300:GOP 长度(关键帧间隔),每隔 300 帧放一个关键帧。GOP 越短,跳转越精确但压缩效率略降;推荐设为帧率 × 10(30fps 就设 300,60fps 就设 600)-bf 4:B 帧数量,范围 0-4。B 帧通过参考前后帧提升压缩效率,设 4 是上限-b_ref_mode 2:B 帧参考模式,2是金字塔模式,压缩效率最高,推荐
8.6 分块多单元编码
-split_encode_mode 2:尝试调用多个 NVENC 编码单元(如 4090 有两个单元)。但实际调用几个取决于 FFmpeg 调度,不保证双倍速度
8.7 HEVC 10bit Profile
-profile:v main10:使用 HEVC Main10 Profile,支持 10bit 输出,必须配合-pix_fmt yuv420p10le使用
九、硬件加速平台
NVIDIA NVENC
代际说明:16/20/30 系是第七代 NVENC;40 系是第八代,新增 AV1 硬编;50 系是第九代,速度略有提升。AV1 硬编是 40 系的重要分水岭。
Intel Quick Sync (QSV)
AV1 硬编需要 Intel Arc 独显或 Ultra 100 系列(14 代之后)核显。
AMD AMF
AV1 硬编需要 RX 7000 系列独显或 Ryzen 7000 系列的 700M 核显(如 7840H 的 780M)。
Apple VideoToolbox(macOS)
M 系列芯片支持 H.264 和 HEVC 硬编。AV1 编码支持情况视 FFmpeg 版本而定,请查阅对应版本文档。
十、hev1 与 hvc1:播放兼容性的那个坑
HEVC 视频在 MP4/MOV 容器中有两种打包标签,影响播放兼容性:
hvc1:参数集(SPS/PPS)内联在容器 Sample Entry 中,视频开头一次性写入hev1:参数集可散布在码流中,每隔一段重复
FFmpeg 默认生成 hev1。 如需改为兼容性更好的 hvc1:
-tag:v hvc1:强制将视频流的 codec tag 设为hvc1
各平台兼容情况:
| 平台 / 场景 | hvc1 | hev1 |
|---|---|---|
| Windows Media Foundation | ✅ | ✅ |
| iOS / Safari(部分版本) | ✅ | ⚠️ 可能失败 |
| 大多数 Android | ✅ | ✅ |
| Web 播放器 | ✅ 推荐 | ⚠️ 兼容性略差 |
| VLC / PotPlayer | ✅ | ✅ |
来自实际踩坑的建议:视频要在 iOS/Safari 播放,或者上传到 Web 播放器,加 -tag:v hvc1。用 hevc_nvenc 等硬件编码器有时会自动用 hvc1,用 libx265 软编默认是 hev1,最稳是显式指定。
十一、URL 作为输入,以及为什么不建议 URL 输出
11.1 URL 输入
为什么 URL 必须加引号? URL 中常含 ?、&、= 等字符,在 shell 里有特殊含义(& 表示后台运行命令)。不加引号,shell 会在 FFmpeg 看到这个 URL 之前就把它"拆解",导致参数传错或命令直接出错。
规则:URL 永远加双引号。
使用环境变量存储 URL(避免反复复制粘贴超长签名链接):
注意 "$VIDEO" 也要有引号,防止变量本身展开后的内容被 shell 解析。
11.2 为什么不建议 URL 输出
FFmpeg 写入 MP4 文件时,必须在编码完成后回到文件开头写入 moov box(元数据,包含帧索引等信息),这个操作需要输出目标支持随机写入(seek)。
WebDAV 等网络存储协议通常不支持 seek 写入,会导致写入失败,或者输出的文件能写进去但无法正常播放。
结论:
- 输入:URL 可以用,注意加引号
- 输出:强烈建议输出到本地文件,完成后再上传。如果一定要直出,可以改用 MKV 格式(MKV 对 seek 要求更低),但兼容性不如 MP4
十二、视频变速
12.1 视频加速 / 减速
setpts:修改视频帧的显示时间戳(Presentation TimeStamp)setpts=0.5*PTS:时间戳乘以 0.5 → 视频 2 倍速setpts=2.0*PTS:时间戳乘以 2 → 视频 0.5 倍速(慢动作)- 规律:
setpts = (1 ÷ 目标倍速) × PTS
12.2 音频加速 / 减速
atempo=2.0:音频 2 倍速atempo=0.5:音频 0.5 倍速- ⚠️
atempo取值范围是 0.5-2.0,超出范围需要串联多个:
12.3 音视频同步变速
同时调整音视频速度,保持同步。注意变速后视频流发生了改变,不能用 -c:v copy。
十三、视频拼接与合并
13.1 文件列表拼接法(推荐)
新建文本文件 list.txt:
-f concat:使用 concat 解复用器,按列表顺序读取文件-safe 0:允许列表中使用相对路径(默认出于安全只允许绝对路径)-c copy:直接复制流,不重编码,速度极快
前提:所有片段的编码格式、分辨率、帧率必须完全一致,否则拼接结果会花屏或音视频不同步。格式不一致时,去掉 -c copy 改为指定编码器重新编码,代价是时间更长。
13.2 filter_complex concat 滤镜(格式不一致或需要重编码时)
-filter_complex:复杂滤镜图,支持多输入处理[0:v][0:a]:第 1 个输入文件的视频流和音频流(方括号是标签,用于在滤镜图中引用)[1:v][1:a]:第 2 个输入文件……以此类推concat=n=3:v=1:a=1:拼接n=3段,输出v=1条视频流和a=1条音频流[outv][outa]:给滤镜输出命名,供后续-map引用-map "[outv]"和-map "[outa]":选这两条流作为最终输出
13.3 时长不同时的对齐处理
场景:音频比视频短,补静音至视频时长
apad:对音频末尾填充静音-shortest:以最短流为准截断输出,防止无限延伸
场景:填充到指定时长
whole_dur=300:音频填充/截断到恰好 300 秒
场景:视频比音频短,补黑帧
tpad=stop=-1:stop_mode=black:在视频末尾补充黑帧(-1表示无限补,配合-shortest或音频时长决定何时停止)stop_mode=clone:改为复制最后一帧(冻结画面)
十四、VMAF 质量评估
VMAF(Video Multimethod Assessment Fusion)是 Netflix 开发的视频质量客观评估标准,模拟人眼感知,分数 0-100,95 分以上通常认为肉眼几乎无法区分与原片的差别。已内置在 FFmpeg 中,无需额外安装。
14.1 基本用法
[0:v]:被测视频(压缩后)[1:v]:参考视频(原始),顺序不能搞反model=version=vmaf_v0.6.1:使用内置的 1080p 模型log_path='vmaf_log.txt':结果写入日志文件n_threads=20:用 20 线程并行计算(设成你的 CPU 核心数即可)-f null -:不生成任何输出文件,只运行滤镜计算
14.2 4K 内容使用 4K 模型
14.3 帧对齐问题
如果测出异常低的分数(比如平时都是 95 分,突然跳到 70 分),多半是帧没有对齐。在两个 -i 前各加 -r 帧率 强制同步:
另外,两个视频必须帧数和时长相同,建议测试前用 -to 裁剪到相同长度。
十五、完整命令参考
15.1 1080p HEVC 二压(NVENC,质量优先,兼容性标签)
15.2 1080p AV1 二压(NVENC 40 系,质量优先)
15.3 HEVC 码率上限模式(适合有明确码率要求的场景)
15.4 URL 输入,剪前 2 分钟,降至 720p
15.5 精确剪切并二压(起点帧精确,-ss 在 -i 后)
15.6 关键帧快速剪切(秒出,不重编码)
15.7 双 GPU 同时跑两个任务
15.8 VMAF 对比参考(草稿示例中的参数)
十六、常见问题与坑点
❌ 报错:Impossible to convert between the formats
完整错误:Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scale_0'
原因:-pix_fmt p010le 与 scale 等滤镜不兼容
解决:把 -pix_fmt p010le 改为 -pix_fmt yuv420p10le
❌ 输出到 WebDAV 失败 / 输出文件损坏无法播放
原因:MP4 写入完成后需要 seek 回文件头写 moov box,WebDAV 不支持 seek 写入
解决:
- 输出到本地,完成后手动上传(最稳)
- 改用 MKV 格式输出(对 seek 要求更低)
- 使用 rclone mount 并确认挂载方式支持 seek
❌ HEVC 在 Safari / iOS 不播放
把 -tag:v hev1 改为 -tag:v hvc1(或显式加上 -tag:v hvc1)
❌ 拼接后音视频不同步
- 检查各片段帧率是否一致,不一致先用
-r统一 -c copy拼接要求时间戳连续,如果各片段来源复杂,改为重新编码- 最稳方案:拼接时不用
-c copy,同时编码,代价是时间更长
❌ CQ 模式下文件比预期大很多
- 检查 CQ 值是否选错(参考上方 CRF/CQ 对应表)
- 加
-maxrate和-bufsize限制峰值码率 - 检查
-b:v 0是否有加(不加的话 NVENC 可能以默认码率为目标)
十七、参数速查表
| 参数 | 含义 | 常用值/说明 |
|---|---|---|
-i 文件 | 输入文件 | 本地路径或 URL(URL 加引号) |
-c:v | 视频编码器 | hevc_nvenc av1_nvenc libx265 copy |
-c:a | 音频编码器 | aac copy libopus |
-vf "..." | 视频滤镜 | scale=-2:1080 setpts=0.5*PTS |
-af "..." | 音频滤镜 | atempo=2.0 apad |
-pix_fmt | 像素格式 | yuv420p10le(10bit推荐)yuv420p(8bit兼容) |
-ss 时间 | 起始时间 | 放 -i 前:快速seek;放 -i 后:精确seek |
-to 时间 | 截止时间(绝对) | 120 00:02:00 |
-t 时长 | 持续时长(相对) | 90 |
-r 帧率 | 输出帧率 | 24 30 60 |
-y | 覆盖已有输出 | 不加则交互询问 |
-map | 选择特定流 | 0:v:0 0:a:1 |
-preset | 编码速度预设 | NVENC: p1-p7;CPU: fast/medium/slow |
-tune:v | 调优目标 | hq(高质量)ull(低延迟) |
-rc:v vbr | 码率控制:可变码率 | 配合 -cq:v 或 -b:v 使用 |
-cq:v | NVENC 恒定质量 | HEVC: 24-32;AV1: 30-40 |
-crf | CPU 恒定质量 | x264/x265: 18-28;svtav1: 28-38 |
-global_quality | QSV 恒定质量 | 20-28,接近 CRF 逻辑 |
-qp_i -qp_p | AMF 量化参数 | 24-32,两者设相同值 |
-b:v | 目标码率 | 2M 500k(M 要大写) |
-maxrate | 最大码率 | 3M |
-bufsize | 缓冲区大小 | 5M(建议为 maxrate 的 1.5-2 倍) |
-profile:v main10 | HEVC 10bit Profile | 配合 -pix_fmt yuv420p10le |
-tag:v hvc1 | 强制 HEVC 兼容标签 | Web/iOS 分发推荐 |
-g | GOP 长度 | 300(帧率×10) |
-bf | B 帧数量 | 4(上限) |
-b_ref_mode 2 | B 帧金字塔参考 | 推荐 |
-multipass 2 | 两遍编码 | 提升压缩效率 |
-rc-lookahead 32 | 前瞻帧数 | 32(最大值) |
-spatial-aq 1 | 空间自适应量化 | 1 开启 |
-temporal-aq 1 | 时间自适应量化 | 1 开启 |
-aq-strength | AQ 强度 | 8-12 |
-split_encode_mode 2 | 多 NVENC 单元分块 | 不保证效果 |
-f null - | 不输出文件 | 仅用于 VMAF 等测试计算 |
CUDA_VISIBLE_DEVICES=N | 指定第 N+1 块 GPU | 写在命令前,临时生效 |
持续更新。后续可补充:字幕烧录、色彩空间转换(HDR→SDR)、批处理脚本、更多滤镜参数等。