关于 video-editor
video-editor 是一项面向视频剪辑与处理的 FFmpeg 指导技能,适用于需要转码、封装转换或排查画质问题的人。内容涵盖编码参数、色彩信息、字幕处理和常见故障排查。
主要功能
- 01区分容器、编解码器与编码器
- 02指导无损封装转换与重新编码
- 03调整 CRF、预设和编码选项
- 04处理色彩元数据与字幕
- 05排查播放、画质和同步问题
- 06提供 FFmpeg 命令示例
适用场景
- 01转换视频容器或编码格式
- 02在画质与文件大小间取舍
- 03修正转码后的色彩或音画不同步
- 04为平台或设备准备视频
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ckorhonen/ claude-skills --skill video-editor安装后在 Claude Code 中输入/video-editor确认已加载。
详细介绍
视频编辑器 - FFmpeg 与编码专家
提供使用 ffmpeg 进行视频编辑、编码和处理的专家指导。本技能涵盖容器格式、编解码器、编码最佳实践,以及视频制作工作流中的质量优化。
何时使用此技能
在以下情况下使用此技能:
- 对视频文件进行编码或转码
- 在容器格式之间转换(MKV、MP4 等)
- 优化编码设置以提升质量或减小文件大小
- 排查视频质量问题
- 处理色彩空间和色彩矩阵
- 为视频硬字幕或软字幕
- 为特定平台或设备准备视频
- 了解视频处理后显示异常的原因
核心概念
容器与编解码器
这一区别至关重要。 .mkv 或 .mp4 等文件扩展名代表容器格式,用于封装已经压缩的视频、音频或字幕流。实际压缩由 H.264、H.265、VP9 或 AV1 等编解码器完成。
| 概念 | 含义 | 示例 |
|---|---|---|
| 容器 | 封装视频、音频和字幕流的包装格式 | MKV、MP4、AVI、MOV、WebM |
| 编解码器 | 对视频进行压缩和解压缩的算法 | H.264、H.265/HEVC、VP9、AV1 |
| 编码器 | 实现编解码器的软件 | x264、x265、libvpx、NVENC |
重新封装与重新编码
| 操作 | 作用 | 对质量的影响 | 速度 |
|---|---|---|---|
| 重新封装 | 在容器之间移动媒体流,不进行重新压缩 | 无(无损) | 非常快 |
| 重新编码 | 使用新设置解码并重新编码视频 | 一定会损失质量 | 慢 |
经验法则: 如果只需要更改容器格式,请重新封装。只有在绝对必要时才重新编码。
质量原则
“质量”的实际含义
视频质量衡量的是输出与源视频的相似程度。每一步处理都会让视频进一步偏离原始内容。无法提升质量,只能保留或损失质量。
常见误解
| 误解 | 事实 |
|---|---|
| 分辨率越高,质量越好 | 分辨率只是尺寸;720p 视频可能比 4K 视频看起来更好 |
| 比特率越高,质量越好 | 编码器效率更重要;不同文件大小也可能达到相同质量 |
| H.265 总能缩小 50% | 这取决于编码器设置;配置不佳的 H.265 可能比 H.264 效果更差 |
| 硬件编码足以保证质量 | 硬件编码器(NVENC、QuickSync)会牺牲质量来换取速度 |
| AI 升频能提升质量 | 升频会添加源视频中不存在的人工细节 |
编码质量优先级
从最重要到最不重要:
- 编码器设置(CRF、预设、调优)
- 编码器选择(x264/x265 与硬件编码器)
- 编解码器(H.265 与 H.264、VP9)
快速参考:FFmpeg 命令
重新封装(更改容器,不损失质量)
# MKV to MP4 (preserves all streams)
ffmpeg -i input.mkv -c copy output.mp4
# MP4 to MKV
ffmpeg -i input.mp4 -c copy output.mkv
基本编码
# Encode with x264, copy audio
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 20 output.mkv
# Encode with x265
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 22 output.mkv
以质量为重点的编码
# High-quality x264 for animation
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 18 \
-x264-params bframes=8 output.mkv
# High-quality x265
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 20 \
-x265-params bframes=8 output.mkv
深入了解编码设置
CRF(恒定码率因子)
CRF 用于控制质量与文件大小之间的权衡。数值越低,质量越高,文件越大。
| CRF 范围 | 质量级别 | 典型用途 |
|---|---|---|
| 0 | 无损 | 归档、中间文件 |
| 15-18 | 视觉无损 | 高质量归档 |
| 19-23 | 高质量 | 常规用途、流媒体 |
| 24-28 | 中等质量 | 网页、移动设备 |
| 29+ | 低质量 | 预览、缩略图 |
注意: 不同编码器的 CRF 值不能直接比较。x265 CRF 22 ≈ x264 CRF 20。
预设
预设控制编码速度与压缩效率之间的权衡。
| 预设 | 速度 | 文件大小 | 适用场景 |
|---|---|---|---|
| ultrafast | 最快 | 最大 | 直播 |
| fast | 快 | 大 | 快速转码 |
| medium | 中等 | 中等 | 默认 |
| slow | 慢 | 较小 | 注重画质 |
| slower | 很慢 | 更小 | 画质优先时推荐 |
| veryslow | 极慢 | 最小 | 最大压缩率 |
建议: 注重画质时使用 slower。slower 与 veryslow 之间的画质差异很小,但耗时却显著增加。
调优选项
| 调优项 | 最适合 |
|---|---|
| film | 带有胶片颗粒的真人影像 |
| animation | 卡通、动漫、色块区域 |
| grain | 保留胶片颗粒 |
| stillimage | 幻灯片、静态内容 |
| fastdecode | 在性能较弱的设备上播放 |
# Animation tuning
ffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20 -tune animation output.mkv
容器特定注意事项
MKV (Matroska)
优点:
- 支持几乎所有编解码器
- 支持多个音轨和字幕轨
- 支持章节标记
- 支持可变帧率
缺点:
- 与部分设备/软件的兼容性较差
- 部分流媒体服务不接受此格式
MP4
优点:
- 通用兼容性
- 适合 Web
- 所有设备均支持硬件解码
缺点:
- 字幕格式支持有限
- 编解码器要求更严格
- 通常要求恒定帧率
为编辑软件将 MKV 转换为 MP4
某些编辑软件要求 MP4 使用恒定帧率。请使用以下两遍处理方法:
# Step 1: Initial remux with timescale adjustment
ffmpeg -i input.mkv -c copy -video_track_timescale 24000 intermediate.mp4
# Step 2: Fix timestamps
ffmpeg -i intermediate.mp4 -c copy \
-bsf:v "setts=dts=1001*round(DTS/1001):pts=1001*round(PTS/1001)" output.mp4
色彩空间与色彩管理
了解色彩元数据
视频以 YCbCr 格式存储颜色,并通过元数据指定:
- 色彩矩阵:如何将 YCbCr 转换为 RGB(BT.709、BT.601)
- 色彩范围:有限范围(16-235)与全范围(0-255)
- 色度位置:色彩采样的位置
常见问题
| 症状 | 可能原因 |
|---|---|
| 颜色发灰 | 色彩范围错误(将有限范围当作全范围处理) |
| 黑位压暗/白位过曝 | 色彩范围错误(将全范围当作有限范围处理) |
| 偏绿/偏粉 | 色彩矩阵错误 |
| 编码后颜色看起来“不对” | 色彩元数据不匹配 |
保留色彩信息
# Explicitly preserve color metadata
ffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20 \
-colorspace bt709 -color_primaries bt709 -color_trc bt709 output.mkv
硬字幕(将字幕烧录到画面中)
使用 FFmpeg
# Hardsub from external subtitle file
ffmpeg -i input.mkv -vf "subtitles=subs.ass" -c:v libx264 -preset slower -crf 20 output.mkv
# Hardsub from embedded subtitle track
ffmpeg -i input.mkv -vf "subtitles=input.mkv:si=0" -c:v libx264 -preset slower -crf 20 output.mkv
使用 mpv(更适合复杂字幕)
mpv 能更准确地处理复杂的 ASS 字幕(样式、位置):
mpv --no-config input.mkv -o output.mkv \
--audio=no \
--ovc=libx264 \
--ovcopts=preset=slower,crf=20,bframes=8
应避免的事项
工具
| 工具 | 问题 |
|---|---|
| Handbrake | 设置不可预测,隐藏重要选项 |
| 在线转换器 | 画质损失,存在隐私风险 |
| “AI 超分工具” | 添加虚假细节,导致画面偏离源文件 |
| Windows 内置工具 | 画质差,选项有限 |
做法
| 做法 | 不妥之处 |
|---|---|
| 不必要的锐化 | 引入伪影,使画面偏离源文件 |
| 升采样至更高分辨率 | 不会增加真实细节 |
| 多次重新编码 | 画质损失会累积 |
| 为追求画质而使用 NVENC | 硬件编码器优先考虑速度而非画质 |
| 帧率插值 | 添加带有伪影的虚假帧 |
推荐工具
必备工具
| 工具 | 用途 |
|---|---|
| ffmpeg | 视频处理的瑞士军刀 |
| MediaInfo | 检查视频属性和元数据 |
| mpv | 出色的媒体播放器,支持编码 |
| MKVToolNix | 用于 MKV 混流操作的 GUI |
专用工具
| 工具 | 用途 |
|---|---|
| Aegisub | 字幕编辑 |
| HandBrake | 简单转码(谨慎使用) |
| yt-dlp | 下载在线视频 |
故障排除
视频无法播放
- 检查目标设备是否支持该编解码器
- 尝试重新封装为其他容器格式
- 确认文件未损坏:
ffmpeg -v error -i file.mkv -f null -
编码后颜色看起来不正确
- 比较颜色元数据:
mediainfo input.mkv与mediainfo output.mkv - 检查色彩范围(有限 vs. 完整)
- 检查色彩矩阵(BT.709 vs. BT.601)
- 在 ffmpeg 命令中明确设置颜色参数
文件体积过大
- 提高 CRF(例如,20 → 23)
- 使用较慢的预设以获得更好的压缩效果
- 考虑使用 x265 以提高效率
- 检查是否进行了不必要的编码(改用重新封装)
编码耗时过长
- 使用更快的预设(但要接受更大的文件)
- 检查硬件编码是否适用于你的使用场景
- 确保源文件没有被不必要地解码
音频/视频不同步
- 首先检查源文件是否存在同步问题
- 使用
-async 1校正音频同步 - 尝试重新封装,而不是重新编码
示例
归档蓝光光盘抓取文件
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 18 \
-x265-params bframes=8 output.mkv
准备上传到 YouTube
ffmpeg -i input.mkv -c:a aac -b:a 384k -c:v libx264 -preset slower -crf 18 \
-profile:v high -level 4.2 -pix_fmt yuv420p output.mp4
快速预览/代理文件
ffmpeg -i input.mkv -c:a aac -b:a 128k -c:v libx264 -preset fast -crf 28 \
-vf scale=640:-2 output.mp4
仅提取音频
# Copy audio stream (no re-encoding)
ffmpeg -i input.mkv -vn -c:a copy output.mka
# Convert to MP3
ffmpeg -i input.mkv -vn -c:a libmp3lame -b:a 320k output.mp3
不重新编码的情况下剪辑
# Trim from 1:00 to 2:30
ffmpeg -i input.mkv -ss 00:01:00 -to 00:02:30 -c copy output.mkv
资源
评论
支持 Markdown