Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

FFmpeg 常用命令

格式转换

# 视频转码(H.264,CPU)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

# 视频转码(H.265/HEVC,CPU)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4

# 视频转码(H.265/HEVC,NVIDIA GPU)
ffmpeg -i input.mp4 -c:v hevc_nvenc -b:v 512k output.mp4

# 音频格式转换
ffmpeg -i input.wav -c:a aac -b:a 128k output.m4a

# 音频转为 Opus
ffmpeg -i audio.webm -c:a libopus -b:a 128k output.opus

# 无损提取(-c copy 不重新编码)
ffmpeg -i input.mkv -c copy output.mp4

码率控制

# 修改音频比特率(视频流直接复制)
ffmpeg -i input.mp4 -c:v copy -c:a aac -b:a 128k output.mp4

# 指定视频码率
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M output.mp4

# CRF 模式(恒定质量,18=近无损,23=默认,28=可接受)
ffmpeg -i input.mp4 -c:v libx264 -crf 18 output.mp4

尺寸与裁剪

# 缩放到指定分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

# 按比例缩放(宽度 1080,高度自动)
ffmpeg -i input.mp4 -vf scale=1080:-1 output.mp4

# 裁剪矩形区域(宽:高:X偏移:Y偏移)
ffmpeg -i input.mp4 -vf crop=1920:1080:0:0 output.mp4

# 旋转 90 度
ffmpeg -i input.mp4 -vf transpose=1 output.mp4

# 翻转水平
ffmpeg -i input.mp4 -vf hflip output.mp4

截取与拼接

# 从开头截取 30 秒
ffmpeg -i input.mp4 -t 30 -c copy output.mp4

# 从 01:30 开始截取 10 秒
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 -c copy output.mp4

# 从 01:30 截取到 02:00
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:00 -c copy output.mp4

# 精确截取(重新编码,避免关键帧问题)
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 output.mp4

# 拼接多个视频(先创建文件列表)
# filelist.txt 内容:
# file 'video1.mp4'
# file 'video2.mp4'
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

音频处理

# 从视频中提取音频
ffmpeg -i video.mp4 -vn -c:a copy audio.m4a

# 替换视频的音频轨(保留视频流)
ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 output.mp4

# 合并无声视频和音轨(长度取最长)
ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy output.mp4

# 调节音量(2 倍)
ffmpeg -i input.mp4 -af "volume=2" output.mp4

# 去除音频(静音输出)
ffmpeg -i input.mp4 -an output.mp4

字幕

# 硬编码字幕到视频
ffmpeg -i input.mp4 -vf subtitles=subtitle.ass output.mp4

# 封装字幕到容器(软字幕,可开关)
ffmpeg -i input.mkv -i subtitle.ass -c copy -map 0 -map 1 -disposition:s:0 default output.mkv

# 提取内封字幕
ffmpeg -i input.mkv -map 0:s:0 subtitle.ass

帧与截图

# 截取一帧(1 秒处)
ffmpeg -i input.mp4 -ss 00:00:01 -vframes 1 output.png

# 每隔 10 秒截一帧
ffmpeg -i input.mp4 -vf fps=1/10 frames_%04d.png

# 视频转 GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1" output.gif

# 高质量 GIF(调色板优化)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

# PPT 用 GIF(小体积)
# 降分辨率、降帧率、截取片段、限制颜色数、加抖动掩盖色阶断层
ffmpeg -i input.mp4 -ss 00:01:30 -t 3 \
  -vf "fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=64[p];[s1][p]paletteuse=dither=bayer:bayer_scale=3" \
  output.gif

PPT 配方中各参数作用:fps=8 足够流畅且不臃肿;scale=480 在幻灯片中清晰度足够;max_colors=64 限制调色板以减小体积;dither=bayer 在颜色断层处引入规律噪点,看起来反而自然。如需更小体积可进一步降到 fps=6scale=320max_colors=32

帧率与速度

# 修改帧率
ffmpeg -i input.mp4 -r 30 output.mp4

# 倍速播放(2 倍速)
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2" output.mp4

# 慢放(0.5 倍速)
ffmpeg -i input.mp4 -vf "setpts=2*PTS" -af "atempo=0.5" output.mp4

信息查看

# 查看媒体文件信息
ffmpeg -i input.mp4

# 只显示关键信息(不输出配置列表)
ffprobe -v quiet -show_format -show_streams -print_format json input.mp4

# 查看视频流详情
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,codec_name,duration -of csv=p=0 input.mp4