以下是FFmpeg常用参数命令的汇总及解析,结合核心功能与高频场景整理:

一、输入/输出控制参数

  1. i [input_file]
    • 作用:指定输入文件(Input缩写)。
    • 示例ffmpeg -i input.mp4
    • 注意:必须置于输入文件前,支持多输入源 。
  2. f [format]
    • 作用:强制指定输入/输出容器格式(如mp4avi)。
    • 示例ffmpeg -i input.avi -f mp4 output.mp4
  3. y
    • 作用:覆盖已存在的输出文件(无需确认)。
    • 示例ffmpeg -i input.mp4 -y output.mp4
  4. hide_banner
    • 作用:隐藏FFmpeg启动时的版本及配置信息。
    • 示例ffmpeg -hide_banner -i input.mp4

二、编解码器参数

  1. c:v [codec] / vcodec [codec]
    • 作用:指定视频编解码器(Codec:Video缩写)。
    • 示例c:v libx264(H.264编码)、c:v copy(直接复制流)。
  2. c:a [codec] / acodec [codec]
    • 作用:指定音频编解码器(Codec:Audio缩写)。
    • 示例c:a aac(AAC编码)、c:a copy
  3. c:s [codec] / scodec [codec]
    • 作用:指定字幕编解码器(如mov_text)。
    • 示例c:s mov_text

三、视频处理参数

  1. vf [filter]
    • 作用:应用视频滤镜(Video Filter)。
    • 示例:
      • vf scale=1280:720(调整分辨率)
      • vf "transpose=1"(旋转90度)
      • vf "subtitles=file.srt"(添加字幕) 。
  2. b:v [bitrate]
    • 作用:设置视频码率(Bitrate:Video)。
    • 示例b:v 2M(2Mbps码率) 。
  3. r [fps]
    • 作用:强制设定输出帧率(Frame Rate)。
    • 示例r 30(30帧/秒) 。
  4. ss [time]
    • 作用:设置起始时间点(Seek缩写)。
    • 示例ss 00:00:10(从第10秒开始处理) 。
  5. t [duration]
    • 作用:设置处理时长(Time缩写)。
    • 示例t 30(处理30秒内容)。

四、音频处理参数

  1. ar [rate]
    • 作用:设定音频采样率(Audio Rate)。
    • 示例ar 44100(44.1kHz)。
  2. ac [channels]
    • 作用:设定音频声道数(Audio Channels)。
    • 示例ac 2(立体声)。
  3. af [filter]
    • 作用:应用音频滤镜(Audio Filter)。
    • 示例af "volume=1.5"(音量增强1.5倍)。

五、高级参数

  1. map [stream]
    • 作用:指定流映射(解决多轨道冲突)。
    • 示例map 0:v:0(选择首个输入文件的第一个视频流)。
  2. preset [speed]
    • 作用:平衡编码速度与压缩率。
    • 示例preset fast(快速编码,压缩率较低)。
  3. crf [value]
    • 作用:恒定质量因子(0-51,值越小画质越好)。
    • 示例crf 23(常用平衡值) 。
  4. hwaccel [type]
    • 作用:启用硬件加速(如cudaqsv)。
    • 示例hwaccel cuda -c:v h264_nvenc(NVIDIA GPU加速)。

六、实战场景命令示例

  1. 转码

    1
    ffmpeg -i input.mp4 -c:v libx265 -c:a aac output.mp4
    • 解析:H.265编码视频,AAC编码音频。
  2. 剪切无损片段

    1
    ffmpeg -ss 00:00:10 -i input.mp4 -t 30 -c copy output.mp4
    • 解析:c copy直接复制流,速度极快。
  3. 提取音频

    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:20320 秒)。

  • to:剪辑截止时间(如 00:10:00600 秒)。

  • 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 逐帧解码到起始时间,精度更高但速度较慢。
  • 适用场景:精确到帧的剪辑(需搭配重新编码) 。

三、注意事项

  1. 参数顺序
    • to 必须放在 i 参数之后,否则会和 t 一样被解析为持续时间 。
    • 错误示例ffmpeg -ss 10 -to 20 -i input.mp4(效果等同于 t 20)。
  2. 时间格式
    • 支持两种格式:HH:MM:SS.ms(如 01:23:45.678)或纯秒数(如 500
  3. 时间越界处理
    • to 超出输入视频时长,输出会自然结束在视频末尾。
    • to 早于 ss,FFmpeg会报错 to value smaller than -ss
  4. 精准性问题
    • 关键帧依赖:使用 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
2
3
4
5
6
7
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : isom
minor_version : 512
Duration: 00:05:30.15, start: 0.000000, bitrate: 2500 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2000 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)

关键字段

  1. 容器格式

    • Input #0, mov,mp4,m4a,3gp,3g2,mj2:表示容器格式为 MP4mov 是 MP4 的基类容器)。
  2. 视频流信息

    • Video: h264 (High):视频编码格式为 H.264,编码参数为 High 档次。
    • avc1:H.264 在 MP4 容器中的四字符码标识。
    • 1920x1080:视频分辨率。
    • 30 fps:帧率。
  3. 音频流信息

    • Audio: aac (LC):音频编码格式为 AAC,参数为 Low Complexity 模式。

    • 44100 Hz, stereo:采样率 44.1kHz,立体声 。

优化输出的附加参数

  1. 隐藏冗余信息

    1
    ffmpeg -hide_banner -i input.mp4
    • hide_banner:隐藏 FFmpeg 版本和编译配置信息,使输出更简洁。
  2. 仅输出元数据

    1
    ffmpeg -i input.mp4 -f ffmetadata -
    • f ffmetadata:强制输出元数据(需重定向到文件或结合其他工具解析) 。
  3. 结合过滤器查询

    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
2
Stream #0:0: Video: h264 (High), yuv420p, 1920x1080
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo

注意事项

  1. 容器格式 ≠ 编码格式

    • MP4/MKV 是容器,实际编码需查看内部的 VideoAudio 流信息。
  2. 多流文件的映射

    • 若文件含多个音视频流,可使用 map 参数指定目标流编号(如 Stream #0:0 表示首个视频流)。
  3. 冷门格式支持

    • 若 FFmpeg 未编译对应解码器,可能无法识别编码格式(需重新编译或使用官方静态版本) 。