Skip to content

H.264 / AVC

H.264(也称为 AVC — Advanced Video Coding)是全球使用最广泛的视频编码器。它提供出色的压缩率,同时拥有广泛的硬件和软件支持。

使用 libx264 编码

bash
# 基本编码
ffmpeg -i input.avi -c:v libx264 -preset fast -crf 23 \
  -c:a aac -b:a 128k output.mp4

# 高质量
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 18 \
  -c:a aac -b:a 256k output_high_quality.mp4

# 小文件
ffmpeg -i input.avi -c:v libx264 -preset ultrafast -crf 28 \
  -c:a aac -b:a 96k output_small.mp4

Preset 选项

从最快到最慢(压缩率最高):

Preset编码速度压缩率
ultrafast5 倍
superfast4 倍
veryfast3 倍
faster2 倍
fast+20%
medium基准
slow-20%
slower-40%
veryslow-70%最佳

Profile 与 Level

bash
# Baseline(最大兼容性 — 老设备)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 \
  -profile:v baseline -level 3.0 \
  output_baseline.mp4

# High profile(现代设备,最佳质量)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 \
  -profile:v high -level 4.1 \
  output_high.mp4

# Main profile
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 \
  -profile:v main \
  output_main.mp4

Tune 选项

bash
# 调优电影(减少颗粒感)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 20 \
  -tune film output.mp4

# 调优动画(平面颜色效果更好)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 22 \
  -tune animation output.mp4

# 调优颗粒(保留胶片颗粒)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 18 \
  -tune grain output.mp4

# 调优低延迟(直播)
ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast -crf 23 \
  -tune zerolatency output.mp4

# 调优 PSNR(测量)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 \
  -tune psnr output.mp4

硬件编码

bash
# NVIDIA NVENC
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p7 -cq 23 \
  -c:a aac output_nvenc.mp4

# macOS VideoToolbox
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 8M \
  -c:a aac output_videotoolbox.mp4

# Intel VAAPI
ffmpeg -i input.mp4 -vaapi_device /dev/dri/renderD128 \
  -vf "hwupload,scale_vaapi=w=1920:h=1080" \
  -c:v h264_vaapi output_vaapi.mp4

固定码率(CBR)

bash
ffmpeg -i input.mp4 -c:v libx264 -preset fast -b:v 4M \
  -maxrate 4M -bufsize 8M \
  -c:a aac -b:a 128k output_cbr.mp4

目标文件大小

bash
# 编码到目标文件大小(例如:5 分钟 100MB)
# 码率 = (目标MB * 8192) / 时长秒数
ffmpeg -i input.mp4 -c:v libx264 -preset fast \
  -b:v 682k -maxrate 682k -bufsize 1M \
  -c:a aac -b:a 128k \
  -fs 100M output.mp4

Released under the MIT License.