FFmpeg常用命令参数解析
以下是FFmpeg常用参数命令的汇总及解析,结合核心功能与高频场景整理:
一、输入/输出控制参数
i [input_file]
- 作用:指定输入文件(Input缩写)。
- 示例:
ffmpeg -i input.mp4
- 注意:必须置于输入文件前,支持多输入源 。
f [format]
- 作用:强制指定输入/输出容器格式(如
mp4
、avi
)。 - 示例:
ffmpeg -i input.avi -f mp4 output.mp4
。
- 作用:强制指定输入/输出容器格式(如
y
- 作用:覆盖已存在的输出文件(无需确认)。
- 示例:
ffmpeg -i input.mp4 -y output.mp4
。
hide_banner
- 作用:隐藏FFmpeg启动时的版本及配置信息。
- 示例:
ffmpeg -hide_banner -i input.mp4
。
二、编解码器参数
c:v [codec]
/vcodec [codec]
- 作用:指定视频编解码器(Codec:Video缩写)。
- 示例:
c:v libx264
(H.264编码)、c:v copy
(直接复制流)。
c:a [codec]
/acodec [codec]
- 作用:指定音频编解码器(Codec:Audio缩写)。
- 示例:
c:a aac
(AAC编码)、c:a copy
。
c:s [codec]
/scodec [codec]
- 作用:指定字幕编解码器(如
mov_text
)。 - 示例:
c:s mov_text
。
- 作用:指定字幕编解码器(如
三、视频处理参数
vf [filter]
- 作用:应用视频滤镜(Video Filter)。
- 示例:
vf scale=1280:720
(调整分辨率)vf "transpose=1"
(旋转90度)vf "subtitles=file.srt"
(添加字幕) 。
b:v [bitrate]
- 作用:设置视频码率(Bitrate:Video)。
- 示例:
b:v 2M
(2Mbps码率) 。
r [fps]
- 作用:强制设定输出帧率(Frame Rate)。
- 示例:
r 30
(30帧/秒) 。
ss [time]
- 作用:设置起始时间点(Seek缩写)。
- 示例:
ss 00:00:10
(从第10秒开始处理) 。
t [duration]
- 作用:设置处理时长(Time缩写)。
- 示例:
t 30
(处理30秒内容)。
四、音频处理参数
ar [rate]
- 作用:设定音频采样率(Audio Rate)。
- 示例:
ar 44100
(44.1kHz)。
ac [channels]
- 作用:设定音频声道数(Audio Channels)。
- 示例:
ac 2
(立体声)。
af [filter]
- 作用:应用音频滤镜(Audio Filter)。
- 示例:
af "volume=1.5"
(音量增强1.5倍)。
五、高级参数
map [stream]
- 作用:指定流映射(解决多轨道冲突)。
- 示例:
map 0:v:0
(选择首个输入文件的第一个视频流)。
preset [speed]
- 作用:平衡编码速度与压缩率。
- 示例:
preset fast
(快速编码,压缩率较低)。
crf [value]
- 作用:恒定质量因子(0-51,值越小画质越好)。
- 示例:
crf 23
(常用平衡值) 。
hwaccel [type]
- 作用:启用硬件加速(如
cuda
、qsv
)。 - 示例:
hwaccel cuda -c:v h264_nvenc
(NVIDIA GPU加速)。
- 作用:启用硬件加速(如
六、实战场景命令示例
-
转码:
1
ffmpeg -i input.mp4 -c:v libx265 -c:a aac output.mp4
- 解析:H.265编码视频,AAC编码音频。
-
剪切无损片段:
1
ffmpeg -ss 00:00:10 -i input.mp4 -t 30 -c copy output.mp4
- 解析:
c copy
直接复制流,速度极快。
- 解析:
-
提取音频:
1
ffmpeg -i input.mp4 -vn -c:a copy output.aac
- 解析:
vn
禁用视频流,c:a copy
保留原始音频 。
- 解析:
FFmpeg支持通过 -ss
和 -to
参数组合实现精准时间范围的视频剪辑。这对参数用于指定剪辑的起始时间点和截止时间点,适用于需要精确控制片段的场景。以下是具体用法与注意事项:
一、基础语法与示例
命令格式:
1 | ffmpeg -ss [start_time] -i input.mp4 -to [end_time] -c copy output.mp4 |
-
ss
:剪辑起始时间(如00:05:20
或320
秒)。 -
to
:剪辑截止时间(如00:10:00
或600
秒)。 -
c copy
:无损复制流,避免重新编码,速度快且保真度高 。示例:
1 | ffmpeg -ss 00:05:20 -i input.mp4 -to 00:15:20 -c copy output.mp4 |
- 解析:从输入视频的
5分20秒
开始,截取到15分20秒
,输出时长为10分钟的视频。
二、参数放置的影响
1. ss
放在 i
前
- 行为:FFmpeg 快速定位到起始时间(基于关键帧跳跃),但可能不够精确。
- 适用场景:优先速度的场景,如处理长视频 。
2. ss
放在 i
后
- 行为:FFmpeg 逐帧解码到起始时间,精度更高但速度较慢。
- 适用场景:精确到帧的剪辑(需搭配重新编码) 。
三、注意事项
- 参数顺序:
to
必须放在i
参数之后,否则会和t
一样被解析为持续时间 。- 错误示例:
ffmpeg -ss 10 -to 20 -i input.mp4
(效果等同于t 20
)。
- 时间格式:
- 支持两种格式:
HH:MM:SS.ms
(如01:23:45.678
)或纯秒数(如500
) 。
- 支持两种格式:
- 时间越界处理:
- 若
to
超出输入视频时长,输出会自然结束在视频末尾。 - 若
to
早于ss
,FFmpeg会报错to value smaller than -ss
。
- 若
- 精准性问题:
- 关键帧依赖:使用
c copy
时,若起始时间不在关键帧上,可能导致剪辑片段开头出现黑屏或卡顿(可通过force_key_frames
强制插入关键帧优化)。 - 精度提升:需要精确到帧时,需移除
c copy
并重新编码(如c:v libx264
),但会耗时更长。
- 关键帧依赖:使用
四、扩展场景
1. 音频/字幕剪辑
语法与视频剪辑一致,例如提取音频片段:
1 | ffmpeg -ss 00:02:30 -i audio.mp3 -to 00:03:30 -c:a copy clip.mp3 |
2. 多参数复合操作
剪辑后转码为其他格式(示例保留音频并转H.265):
1 | ffmpeg -ss 00:10:00 -i input.mp4 -to 00:20:00 -c:v libx265 -c:a aac output.mp4 |
五、常见误区
- 时间计算错误:
to
是基于输入视频的时间轴,而非ss
后的相对时间。例如ss 10 -to 20
表示剪辑10~20秒
(总长10秒),而非从10秒开始截取20秒
。 - 忽略容器格式:部分格式(如MP4)要求关键帧对齐,若剪辑后出现无法播放,可尝试输出为MKV容器(兼容性更强) 。
如需测试时间点的精确性,可通过播放器(如PotPlayer)逐帧定位后,再使用上述命令。
使用 FFmpeg 查询视频文件中音视频原始格式的具体命令与参数解析:
核心命令
1 | ffmpeg -i input.mp4 |
作用:查看输入文件的详细媒体信息,包括容器格式、音视频编解码器、码率、分辨率等。 参数解析:
i input.mp4
:指定输入文件(input.mp4
替换为实际文件名)。- 默认行为:运行后会输出媒体流的详细信息,但会因未指定输出文件而报错,此时可忽略错误提示,直接查看控制台输出的前半部分信息。
输出信息关键字段解析
运行命令后,控制台会显示类似以下内容(节选关键部分):
1 | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4': |
关键字段:
-
容器格式
Input #0, mov,mp4,m4a,3gp,3g2,mj2
:表示容器格式为MP4
(mov
是 MP4 的基类容器)。
-
视频流信息
Video: h264 (High)
:视频编码格式为H.264
,编码参数为High
档次。avc1
:H.264 在 MP4 容器中的四字符码标识。1920x1080
:视频分辨率。30 fps
:帧率。
-
音频流信息
-
Audio: aac (LC)
:音频编码格式为AAC
,参数为Low Complexity
模式。 -
44100 Hz, stereo
:采样率 44.1kHz,立体声 。
-
优化输出的附加参数
-
隐藏冗余信息
1
ffmpeg -hide_banner -i input.mp4
hide_banner
:隐藏 FFmpeg 版本和编译配置信息,使输出更简洁。
-
仅输出元数据
1
ffmpeg -i input.mp4 -f ffmetadata -
f ffmetadata
:强制输出元数据(需重定向到文件或结合其他工具解析) 。
-
结合过滤器查询
1
ffmpeg -i input.mp4 -filter_complex "null" -map 0:v -f null -
- 强制处理视频流但丢弃输出,可查看完整的视频流参数 。
自动化提取编解码器名称
通过 grep
或类似工具快速提取编码格式(适用于Linux/macOS):
1 | ffmpeg -i input.mp4 2>&1 | grep -E "Video:|Audio:" |
输出示例:
1 | Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 |
注意事项
-
容器格式 ≠ 编码格式
- MP4/MKV 是容器,实际编码需查看内部的
Video
和Audio
流信息。
- MP4/MKV 是容器,实际编码需查看内部的
-
多流文件的映射
- 若文件含多个音视频流,可使用
map
参数指定目标流编号(如Stream #0:0
表示首个视频流)。
- 若文件含多个音视频流,可使用
-
冷门格式支持
- 若 FFmpeg 未编译对应解码器,可能无法识别编码格式(需重新编译或使用官方静态版本) 。
Comment
WalineGiscus