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=6、scale=320、max_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