关于-ffmpeg

ffmpeg.org

工作模式

视频剪切与合并

剪切

主要用到两个参数: -ss (seek start, 指定片段起始位置), -t (duration, 指定处理时间).

1
ffmpeg -i test.avi -c:v libx264 -ss 00:00:03 -t 00:00:05 output.mp4

这里用 hh:mm:ss 的格式指定时间.

注意 -ss 参数需放在 -i 之后.

也可以用 -to (to) 替换 -t 指定片段终止位置.

合并

先将要合并的视频文件列举在一个文本中:

1
2
3
file 'clip1.mp4'
file 'clip2.mp4'
file 'clip3.mp4'

之后:

1
ffmpeg -f concat -i list.txt -c copy output.mp4
  • -f concat 指定输出文件的格式为 concat, 即一个拼接类型
  • -c copy 指定编解码器为 copy, 直接复制输入而不进行重新编码

过滤器 filter

filter 可用于对图像进行变换, 如修改:

  • 尺寸
  • 颜色
  • 旋转
  • 增加滤镜

可以指定一系列的 filter.

指定 filter

-vf (video filter) 指定视频过滤器.

-af (audio filter) 指定音频过滤器.

修改尺寸

用 “scale” 这个 filter:

1
ffmpeg -i test.avi -c:v libx264 -vf "scale=1024:576" output.mp4

(1024 为宽, 576 为高, 值若为 -1 则有 ffmpeg 自行更具另一参数推断)

旋转视频

用 “transpose”:

1
ffmpeg -i test.avi -c:v libx264 -vf "transpose=2" output.mp4

常用选项:

  • 0: 不进行旋转 (默认值)
  • 1: 顺时针旋转90度
  • 2: 逆时针旋转90度
  • 3: 旋转180度
  • clock:顺时针旋转90度和垂直翻转
  • cclock:逆时针旋转90度和垂直翻转
  • clock_flip:顺时针旋转90度和水平翻转
  • cclock_flip: 逆时针旋转90度和水平翻转

组合 filter

1
ffmpeg -i test.avi -c:v libx264 -vf "scale=256:256,transpose=2" output.mp4

裁剪

用 “crop=w:h:x:y”, w 为宽度, h 为高度, x 为左上角为原点的横坐标, y 为纵坐标.

1
ffmpeg -i test.avi -c:v libx264 -vf "crop=400:400:100:100" output.mp4

也可以为表达式:

1
ffmpeg -i test.avi -c:v libx264 -vf "crop=iw/3:ih/3" output.mp4
  • iw: (input width)
  • ih: (input height)

调节音量大小

1
ffmpeg -i test.mp4 -af "volume=1.5" output.mp4

指定视频质量

-crf (constant rate factor) 参数:

1
ffmpeg -i test.avi -c:v libx264 -crf 22 output.mp4

取值范围为 0-51, 值越大表示图像质量越差. 0 表示无损压缩, 输出的文件较大. 常用到 19-28

指定编码速度 (关系到生成的文件大小)

-preset 指定编码器预设速度, 速度越快, 所生成的文件越大:

1
ffmpeg -i input.mp4 -c:v libx264 -preset fast output.mp4

常见 option 有:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium
  • slow
  • slower
  • veryslow

指定解码器

1
-c[:stream_specifier]

[stream_specifier] 可以为:

  • v: video
  • a: audio
  • s: subtitle
  • d: data
  • t: attachment
  • m: metadata
  • c: complex

如:

1
ffmpeg -i test.avi -c:v libx264 output.mp4

libx264 为指定的解码器.

指定报错等级

1
-loglevel [flags+]loglevel

flags 有:

  • repeat, 同一级别的日志消息可以重复显示
  • level, 输出中显示日志等级

loglevel 可以为数字或 string:

  • quiet, -8
  • panic, 0
  • fatal, 8
  • error, 16
  • warning, 24
  • info, 32
  • verbose, 40
  • debug, 48
  • trace, 56

如:

1
ffmpeg -i test.avi -loglevel error -c:v libx264 output.mp4 -y

传入多个文件后引用

当给 -i 参数传入多个 options 时, 可以通过索引 (0-based) 来访问这些文件.

将一个视频文件转为 gif

如将 test.mp4 转为 test.gif

1
ffmpeg -i test.mp4 test.gif

设置 output file 的 frame rate

如设置为 24 fps:

1
ffmpeg -i input.avi -r 24 output.mp4

删除视频轨

-vn:

1
ffmpeg -i test.mp4 -vn output.mp4

删除音频轨

-an:

1
ffmpeg -i test.mp4 -an output.mp4

删除字幕

-sn

1
ffmpeg -i test.mp4 -sn output.mp4

删除数据流

-dn

1
ffmpeg -i test.mp4 -dn output.mp4

输出视频缩略图

1
ffmpeg -i test.mp4 -vf "fps=1/10,scale=-2:720" thunbnail-%03d.jpg

添加水印图片

1
ffmpeg -i test.mp4 -i cat.jpg -filter_complex "overlay=100:100" output.mp4

过滤器 “overlay” 将水印图片 cat.jpg 叠加到原始视频之上. (100:100 指定水印的位置)

GIF 动图的转换

最好先剪切片段, 降低视频的帧率, 缩放视频大小之后再处理:

1
ffmpeg -i test.avi -ss 0 -t 3 -filter_complex [0:v]fps=15,scale=-1:256,split[a][b];[a]palettegen[p];[b][p]paletteuse output.gif

-1:256 表示保持原始视频的宽高比, 并根据指定高度 256 来自动计算相应宽度.

屏幕录像

1
ffmpeg -hide_banner -loglevel error -stats -f gdigrab -framerate 60 -offset_x 0 -offset_y 0 -video_size 1920x1080 -draw_mouse 1 -i desktop -c:v libx264 -r 60 -preset ultrafast -pix_fmt yuv420p -y screen_record.mp4

(这段命令似乎不行)

常见参数

-i

-i 指定 input file url.

-y

表示覆盖输出文件.

-f

指定输出文件类型:

  • -f mp4: 指定输出文件格式为MP4
  • -f mov: 指定输出文件格式为MOV
  • -f avi: 指定输出文件格式为AVI
  • -f mkv: 指定输出文件格式为MKV
  • -f flv: 指定输出文件格式为FLV
  • -f mpeg: 指定输出文件格式为MPEG
  • -f wav: 指定输出文件格式为WAV
  • -f mp3: 指定输出文件格式为MP3

关于-ffmpeg
http://example.com/2024/02/28/关于-ffmpeg/
作者
Jie
发布于
2024年2月28日
许可协议