video-editor
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVideo Editor - FFmpeg & Encoding Expert
视频编辑专家 - FFmpeg与编码指南
Expert guidance for video editing, encoding, and processing with ffmpeg. This skill covers container formats, codecs, encoding best practices, and quality optimization for video production workflows.
FFmpeg视频编辑、编码与处理专业指南。本指南涵盖容器格式、编解码器、编码最佳实践,以及视频制作工作流中的质量优化方案。
When to Use This Skill
适用场景
Use this skill when:
- Encoding or transcoding video files
- Converting between container formats (MKV, MP4, etc.)
- Optimizing encoding settings for quality or file size
- Troubleshooting video quality issues
- Working with color spaces and color matrices
- Hardsubbing or softsubbing videos
- Preparing videos for specific platforms or devices
- Understanding why a video looks wrong after processing
当你需要以下操作时,可使用本指南:
- 视频文件编码或转码
- 在不同容器格式(MKV、MP4等)之间转换
- 优化编码设置以平衡质量与文件大小
- 排查视频质量问题
- 处理色彩空间与色彩矩阵
- 硬字幕嵌入或软字幕处理
- 为特定平台或设备准备视频
- 分析视频处理后画质异常的原因
Core Concepts
核心概念
Container vs. Codec
容器格式 vs 编解码器
This distinction is critical. File extensions like or are container formats that package already-compressed streams. The actual compression happens through codecs like H.264, H.265, VP9, or AV1.
.mkv.mp4| Concept | What It Is | Examples |
|---|---|---|
| Container | Wrapper that holds video/audio/subtitle streams | MKV, MP4, AVI, MOV, WebM |
| Codec | Algorithm that compresses/decompresses video | H.264, H.265/HEVC, VP9, AV1 |
| Encoder | Software that implements a codec | x264, x265, libvpx, NVENC |
这一区分至关重要。或这类文件扩展名是容器格式,用于封装已压缩的音视频流。实际的压缩由H.264、H.265、VP9或AV1等**编解码器(codec)**完成。
.mkv.mp4| 概念 | 定义 | 示例 |
|---|---|---|
| 容器格式 | 封装视频/音频/字幕流的容器 | MKV, MP4, AVI, MOV, WebM |
| 编解码器 | 用于压缩/解压缩视频的算法 | H.264, H.265/HEVC, VP9, AV1 |
| 编码器 | 实现编解码器的软件 | x264, x265, libvpx, NVENC |
Remuxing vs. Reencoding
封包格式转换(Remuxing) vs 重新编码(Reencoding)
| Operation | What It Does | Quality Impact | Speed |
|---|---|---|---|
| Remuxing | Moves streams between containers without re-compression | None (lossless) | Very fast |
| Reencoding | Decodes and re-encodes video with new settings | Always loses quality | Slow |
Rule of thumb: If you only need to change the container format, remux. Only reencode when absolutely necessary.
| 操作 | 定义 | 画质影响 | 速度 |
|---|---|---|---|
| 封包格式转换 | 在不重新压缩的前提下,将音视频流转移到其他容器中 | 无(无损) | 极快 |
| 重新编码 | 解码视频并使用新设置重新编码 | 必然损失画质 | 缓慢 |
经验法则:若仅需更改容器格式,使用封包格式转换。仅在绝对必要时才进行重新编码。
Quality Principles
质量原则
What "Quality" Actually Means
「画质」的真正含义
Video quality measures how closely the output resembles the source. Every processing step moves the video further from the original. There is no way to add quality - only preserve or lose it.
视频画质衡量的是输出与源文件的相似程度。每一步处理都会让视频偏离源文件。不存在提升画质的方法,只能尽可能保留或避免损失画质。
Common Misconceptions
常见误区
| Myth | Reality |
|---|---|
| Higher resolution = better quality | Resolution is just dimensions; a 720p video can look better than a 4K one |
| Higher bitrate = better quality | Encoder efficiency matters more; same quality at different sizes is possible |
| H.265 is always 50% smaller | Depends on encoder settings; poorly-configured H.265 can be worse than H.264 |
| Hardware encoding is fine for quality | Hardware encoders (NVENC, QuickSync) sacrifice quality for speed |
| AI upscaling improves quality | Upscaling adds artificial detail that wasn't in the source |
| 误区 | 真相 |
|---|---|
| 分辨率越高=画质越好 | 分辨率仅指尺寸;720p视频的画质可能优于4K视频 |
| 码率越高=画质越好 | 编码器效率更重要;相同画质下可实现不同文件大小 |
| H.265总能比H.264小50% | 取决于编码器设置;配置不当的H.265画质可能不如H.264 |
| 硬件编码画质足够好 | 硬件编码器(NVENC、QuickSync)为了速度牺牲画质 |
| AI upscale能提升画质 | 超分辨率会添加源文件中不存在的人工细节 |
The Encoding Quality Hierarchy
编码画质优先级
From most to least important:
- Encoder settings (CRF, preset, tuning)
- Encoder choice (x264/x265 vs. hardware encoders)
- Codec (H.265 vs. H.264 vs. VP9)
从最重要到最不重要:
- 编码器设置(CRF、preset、tuning)
- 编码器选择(x264/x265 vs 硬件编码器)
- 编解码器(H.265 vs H.264 vs VP9)
Quick Reference: FFmpeg Commands
快速参考:FFmpeg命令
Remux (Change Container, No Quality Loss)
封包格式转换(更改容器,无画质损失)
bash
undefinedbash
undefinedMKV to MP4 (preserves all streams)
MKV转MP4(保留所有流)
ffmpeg -i input.mkv -c copy output.mp4
ffmpeg -i input.mkv -c copy output.mp4
MP4 to MKV
MP4转MKV
ffmpeg -i input.mp4 -c copy output.mkv
undefinedffmpeg -i input.mp4 -c copy output.mkv
undefinedBasic Encoding
基础编码
bash
undefinedbash
undefinedEncode with x264, copy audio
使用x264编码,复制音频
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 20 output.mkv
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 20 output.mkv
Encode with x265
使用x265编码
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 22 output.mkv
undefinedffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 22 output.mkv
undefinedQuality-Focused Encoding
画质优先的编码
bash
undefinedbash
undefinedHigh-quality x264 for animation
动画内容专用高质量x264编码
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 18
-x264-params bframes=8 output.mkv
-x264-params bframes=8 output.mkv
ffmpeg -i input.mkv -c:a copy -c:v libx264 -preset slower -crf 18
-x264-params bframes=8 output.mkv
-x264-params bframes=8 output.mkv
High-quality x265
高质量x265编码
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 20
-x265-params bframes=8 output.mkv
-x265-params bframes=8 output.mkv
undefinedffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 20
-x265-params bframes=8 output.mkv
-x265-params bframes=8 output.mkv
undefinedEncoding Settings Deep Dive
编码设置深度解析
CRF (Constant Rate Factor)
CRF(恒定速率因子)
CRF controls quality vs. file size tradeoff. Lower = higher quality, larger file.
| CRF Range | Quality Level | Typical Use |
|---|---|---|
| 0 | Lossless | Archival, intermediate |
| 15-18 | Visually lossless | High-quality archival |
| 19-23 | High quality | General use, streaming |
| 24-28 | Medium quality | Web, mobile |
| 29+ | Low quality | Previews, thumbnails |
Note: CRF values aren't directly comparable between encoders. x265 CRF 22 ≈ x264 CRF 20.
CRF控制画质与文件大小的平衡。值越小=画质越高,文件越大。
| CRF范围 | 画质等级 | 典型用途 |
|---|---|---|
| 0 | 无损 | 归档、中间文件 |
| 15-18 | 视觉无损 | 高质量归档 |
| 19-23 | 高质量 | 通用用途、流媒体 |
| 24-28 | 中等质量 | 网页、移动设备 |
| 29+ | 低质量 | 预览、缩略图 |
注意:不同编码器的CRF值无法直接对比。x265的CRF22 ≈ x264的CRF20。
Preset
Preset(预设)
Presets control encoding speed vs. compression efficiency.
| Preset | Speed | File Size | Use When |
|---|---|---|---|
| ultrafast | Fastest | Largest | Live streaming |
| fast | Fast | Large | Quick transcodes |
| medium | Moderate | Moderate | Default |
| slow | Slow | Smaller | Quality-focused |
| slower | Very slow | Even smaller | Recommended for quality |
| veryslow | Extremely slow | Smallest | Maximum compression |
Recommendation: Use for quality-focused encoding. The difference between and is minimal for significant time cost.
slowerslowerveryslow预设控制编码速度与压缩效率的平衡。
| 预设 | 速度 | 文件大小 | 适用场景 |
|---|---|---|---|
| ultrafast | 最快 | 最大 | 直播流 |
| fast | 快 | 大 | 快速转码 |
| medium | 中等 | 中等 | 默认设置 |
| slow | 慢 | 较小 | 画质优先场景 |
| slower | 很慢 | 更小 | 推荐用于画质优先编码 |
| veryslow | 极慢 | 最小 | 最大压缩率 |
推荐:画质优先编码使用预设。与的压缩率差异极小,但耗时大幅增加。
slowerslowerveryslowTune Options
Tune(调优选项)
| Tune | Best For |
|---|---|
| film | Live-action with film grain |
| animation | Cartoons, anime, flat areas |
| grain | Preserve film grain |
| stillimage | Slideshow, static content |
| fastdecode | Playback on weak devices |
bash
undefined| 调优 | 最佳适用场景 |
|---|---|
| film | 带胶片颗粒的真人视频 |
| animation | 卡通、动画、平涂内容 |
| grain | 保留胶片颗粒 |
| stillimage | 幻灯片、静态内容 |
| fastdecode | 弱设备播放 |
bash
undefinedAnimation tuning
动画内容调优
ffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20 -tune animation output.mkv
undefinedffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20 -tune animation output.mkv
undefinedContainer-Specific Considerations
容器格式特定注意事项
MKV (Matroska)
MKV(Matroska)
Pros:
- Supports virtually any codec
- Multiple audio/subtitle tracks
- Chapter markers
- Variable frame rate support
Cons:
- Less compatible with some devices/software
- Some streaming services don't accept it
优点:
- 支持几乎所有编解码器
- 多音轨/字幕轨
- 章节标记
- 可变帧率支持
缺点:
- 部分设备/软件兼容性较差
- 部分流媒体服务不支持
MP4
MP4
Pros:
- Universal compatibility
- Web-friendly
- Hardware decoder support everywhere
Cons:
- Limited subtitle format support
- Stricter codec requirements
- Constant frame rate expected
优点:
- 通用兼容性
- 网页友好
- 全平台硬件解码支持
缺点:
- 字幕格式支持有限
- 编解码器要求更严格
- 通常要求恒定帧率
Converting MKV to MP4 for Editing Software
MKV转MP4适配编辑软件
Some editing software requires constant frame rate MP4. Use this two-pass approach:
bash
undefined部分编辑软件要求恒定帧率的MP4。使用以下两步法:
bash
undefinedStep 1: Initial remux with timescale adjustment
步骤1:调整时间轴的初始封包转换
ffmpeg -i input.mkv -c copy -video_track_timescale 24000 intermediate.mp4
ffmpeg -i input.mkv -c copy -video_track_timescale 24000 intermediate.mp4
Step 2: Fix timestamps
步骤2:修复时间戳
ffmpeg -i intermediate.mp4 -c copy
-bsf:v "setts=dts=1001round(DTS/1001):pts=1001round(PTS/1001)" output.mp4
-bsf:v "setts=dts=1001round(DTS/1001):pts=1001round(PTS/1001)" output.mp4
undefinedffmpeg -i intermediate.mp4 -c copy
-bsf:v "setts=dts=1001round(DTS/1001):pts=1001round(PTS/1001)" output.mp4
-bsf:v "setts=dts=1001round(DTS/1001):pts=1001round(PTS/1001)" output.mp4
undefinedColor Space & Color Management
色彩空间与色彩管理
Understanding Color Metadata
理解色彩元数据
Videos store colors in YCbCr format with metadata specifying:
- Color matrix: How to convert YCbCr to RGB (BT.709, BT.601)
- Color range: Limited (16-235) vs. Full (0-255)
- Chroma location: Where color samples are positioned
视频以YCbCr格式存储,元数据包含:
- 色彩矩阵:YCbCr转RGB的规则(BT.709、BT.601)
- 色彩范围:有限范围(16-235) vs 全范围(0-255)
- 色度位置:色彩样本的定位
Common Issues
常见问题
| Symptom | Likely Cause |
|---|---|
| Washed out colors | Wrong color range (Limited treated as Full) |
| Crushed blacks/blown whites | Wrong color range (Full treated as Limited) |
| Greenish/pinkish tint | Wrong color matrix |
| Colors look "off" after encode | Mismatched color metadata |
| 症状 | 可能原因 |
|---|---|
| 色彩泛白 | 色彩范围不匹配(有限范围被识别为全范围) |
| 黑色过暗/白色过曝 | 色彩范围不匹配(全范围被识别为有限范围) |
| 偏绿/偏粉 | 色彩矩阵错误 |
| 编码后色彩异常 | 色彩元数据不匹配 |
Preserving Color Information
保留色彩信息
bash
undefinedbash
undefinedExplicitly preserve color metadata
显式保留色彩元数据
ffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20
-colorspace bt709 -color_primaries bt709 -color_trc bt709 output.mkv
-colorspace bt709 -color_primaries bt709 -color_trc bt709 output.mkv
undefinedffmpeg -i input.mkv -c:v libx264 -preset slower -crf 20
-colorspace bt709 -color_primaries bt709 -color_trc bt709 output.mkv
-colorspace bt709 -color_primaries bt709 -color_trc bt709 output.mkv
undefinedHardsubbing (Burning In Subtitles)
硬字幕嵌入
Using FFmpeg
使用FFmpeg
bash
undefinedbash
undefinedHardsub from external subtitle file
从外部字幕文件嵌入硬字幕
ffmpeg -i input.mkv -vf "subtitles=subs.ass" -c:v libx264 -preset slower -crf 20 output.mkv
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
undefinedffmpeg -i input.mkv -vf "subtitles=input.mkv:si=0" -c:v libx264 -preset slower -crf 20 output.mkv
undefinedUsing mpv (Better for Complex Subtitles)
使用mpv(复杂字幕更优)
mpv handles complex ASS subtitles (styling, positioning) more accurately:
bash
mpv --no-config input.mkv -o output.mkv \
--audio=no \
--ovc=libx264 \
--ovcopts=preset=slower,crf=20,bframes=8mpv对复杂ASS字幕(样式、定位)的处理更准确:
bash
mpv --no-config input.mkv -o output.mkv \
--audio=no \
--ovc=libx264 \
--ovcopts=preset=slower,crf=20,bframes=8What to Avoid
避坑指南
Tools
工具类
| Tool | Problem |
|---|---|
| Handbrake | Unpredictable settings, hides important options |
| Online converters | Quality loss, privacy concerns |
| "AI upscalers" | Add fake detail, move further from source |
| Windows built-in tools | Poor quality, limited options |
| 工具 | 问题 |
|---|---|
| Handbrake | 设置不可控,隐藏关键选项 |
| 在线转换器 | 画质损失,隐私风险 |
| "AI超分辨率工具" | 添加虚假细节,偏离源文件 |
| Windows内置工具 | 画质差,选项有限 |
Practices
操作类
| Practice | Why It's Bad |
|---|---|
| Unnecessary sharpening | Adds artifacts, moves from source |
| Upscaling to higher resolution | Doesn't add real detail |
| Multiple reencodes | Quality loss compounds |
| Using NVENC for quality | Hardware encoders prioritize speed over quality |
| Frame rate interpolation | Adds fake frames with artifacts |
| 操作 | 危害 |
|---|---|
| 不必要的锐化 | 添加伪影,偏离源文件 |
| 超分辨率到更高分辨率 | 无法添加真实细节 |
| 多次重新编码 | 画质损失累积 |
| 使用NVENC追求画质 | 硬件编码器优先速度而非画质 |
| 帧率插值 | 添加带伪影的虚假帧 |
Recommended Tools
推荐工具
Essential
必备工具
| Tool | Purpose |
|---|---|
| ffmpeg | Swiss army knife for video processing |
| MediaInfo | Inspect video properties and metadata |
| mpv | Superior media player, encoding support |
| MKVToolNix | GUI for MKV muxing operations |
| 工具 | 用途 |
|---|---|
| ffmpeg | 视频处理瑞士军刀 |
| MediaInfo | 查看视频属性与元数据 |
| mpv | 高级媒体播放器,支持编码 |
| MKVToolNix | MKV封包操作GUI工具 |
Specialized
专业工具
Troubleshooting
故障排查
Video Won't Play
视频无法播放
- Check codec support on target device
- Try remuxing to different container
- Verify file isn't corrupted:
ffmpeg -v error -i file.mkv -f null -
- 检查目标设备的编解码器支持
- 尝试转码到其他容器格式
- 验证文件是否损坏:
ffmpeg -v error -i file.mkv -f null -
Colors Look Wrong After Encoding
编码后色彩异常
- Compare color metadata: vs.
mediainfo input.mkvmediainfo output.mkv - Check color range (Limited vs. Full)
- Check color matrix (BT.709 vs. BT.601)
- Explicitly set color parameters in ffmpeg command
- 对比色彩元数据:vs
mediainfo input.mkvmediainfo output.mkv - 检查色彩范围(有限vs全范围)
- 检查色彩矩阵(BT.709 vs BT.601)
- 在FFmpeg命令中显式设置色彩参数
File Size Too Large
文件过大
- Increase CRF (e.g., 20 → 23)
- Use slower preset for better compression
- Consider x265 for better efficiency
- Check if you're unnecessarily encoding (remux instead)
- 提高CRF值(如20→23)
- 使用更慢的预设以提升压缩率
- 考虑使用x265以获得更高效率
- 检查是否存在不必要的编码(改用封包转换)
Encoding Takes Forever
编码耗时过长
- Use faster preset (but accept larger file)
- Check if hardware encoding is acceptable for your use case
- Ensure source isn't being decoded unnecessarily
- 使用更快的预设(接受更大文件)
- 确认硬件编码是否符合你的需求
- 确保源文件未被不必要地解码
Audio/Video Out of Sync
音视频不同步
- Check source file for sync issues first
- Use for audio sync correction
-async 1 - Try remuxing instead of reencoding
- 先检查源文件是否存在同步问题
- 使用修正音频同步
-async 1 - 尝试封包转换而非重新编码
Examples
示例
Archive a Blu-ray Rip
蓝光备份归档
bash
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 18 \
-x265-params bframes=8 output.mkvbash
ffmpeg -i input.mkv -c:a copy -c:v libx265 -preset slower -crf 18 \
-x265-params bframes=8 output.mkvPrepare for YouTube Upload
为YouTube上传准备视频
bash
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.mp4bash
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.mp4Quick Preview/Proxy
快速预览/代理文件
bash
ffmpeg -i input.mkv -c:a aac -b:a 128k -c:v libx264 -preset fast -crf 28 \
-vf scale=640:-2 output.mp4bash
ffmpeg -i input.mkv -c:a aac -b:a 128k -c:v libx264 -preset fast -crf 28 \
-vf scale=640:-2 output.mp4Extract Audio Only
仅提取音频
bash
undefinedbash
undefinedCopy audio stream (no re-encoding)
复制音频流(无重新编码)
ffmpeg -i input.mkv -vn -c:a copy output.mka
ffmpeg -i input.mkv -vn -c:a copy output.mka
Convert to MP3
转换为MP3
ffmpeg -i input.mkv -vn -c:a libmp3lame -b:a 320k output.mp3
undefinedffmpeg -i input.mkv -vn -c:a libmp3lame -b:a 320k output.mp3
undefinedTrim Without Re-encoding
无损修剪
bash
undefinedbash
undefinedTrim from 1:00 to 2:30
从1:00修剪到2:30
ffmpeg -i input.mkv -ss 00:01:00 -to 00:02:30 -c copy output.mkv
undefinedffmpeg -i input.mkv -ss 00:01:00 -to 00:02:30 -c copy output.mkv
undefined