ffmpeg命令用法总结

1,299 阅读4分钟

前言

ffmpeg是开源的媒体处理框架,使用其自带的ffmpeg工具可以很便捷的对媒体文件进行处理。ffmpeg参数很多,通过组合参数可以实现很多功能。下面我将分享一些常用的参数,总结一些经常用到的使用场景。

常用参数

-i:输入文件
-y:覆盖输出文件
-f:指定输出文件格式
-c:指定编解码器
-c copy 表示音视频保持原有编码
-b:指定比特率
-s:指定分辨率
-r:指定帧率
-t:指定转码时长
-ss:指定转码开始时间
-acodec:指定音频编码器
-vcodec:指定视频编码器
-ac:指定音频通道数
-ar:指定音频采样率
-ab:指定音频比特率
-vn 禁用视频
-an 禁用音频
-map:指定转码流
-metadata:指定输出文件元数据
-threads:指定线程数
-preset:指定编码速度
-crf:指定视频质量
-pix_fmt:指定像素格式
-filter_complex:指定复杂滤镜
-vf:指定简单滤镜
-stream_loop: 指定循环次数

使用场景

1.转协议

使用ffmpeg,可以很轻松的将一种协议的视频流转换成另一种协议。下面举几个例子:

  • 将存储在电脑上的视频文件推送为rtmp流
ffmpeg -re -stream_loop -1 -i input.mp4 -c:v libx264 -f flv rtmp://server:1935/live/test
  • 将存储在电脑上的视频文件拉取为rtsp流
ffmpeg -re -stream_loop -1 -i input.mp4 -c:v libx264 -f rtsp rtsp://server:8554/live
  • 将rtsp流转推为rtmp流
ffmpeg -i rtsp://server:8554/live -c copy -f flv rtmp://server:1935/live/test

2.转封装

在工作中,有时可能会遇到需要对视频文件的封装格式进行转换的情况。比如需要将MP4格式的文件转换成MKV,或者将MP4转化成flv。这个时候使用ffmpeg也可以很便捷的实现。例子如下:

  • MP4转MKV
ffmpeg -i input.mp4 -c copy output.mkv
  • MP4转flv
ffmpeg -i input.mp4 -c copy -f flv output.flv

3.转编码

使用ffmpeg,可以通过指定编解码器,将一种编码转换成另一种编码。

需要注意的是,如果想要进行某个编码格式的转换,需要在编译ffmpeg的时候,将对应的编解码器编译进去。

  • 转H264编码
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
  • 转H265编码
ffmpeg -i input.mp4 -c:v libx265 -c:a aac output.mp4
  • 转VP9编码
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.webm

4.音视频裁剪

使用ffmpeg可以实现对视频进行剪切。比如,需要将视频的10~30s的内容剪切出来,可以使用命令:

ffmpeg -i input.mp4 -ss 10 -t 10 -c:v copy -c:a copy output.mp4
  • -ss 10: 指定起始时间,这里是第 10 秒。
  • -t 10: 指定持续时间,这里是 10 秒,所以输出文件将包含从第 10 秒到第 20 秒的内容。

5.音视频拼接

如果需要将多个视频进行拼接,可以创建一个文本文件,列出要拼接的视频文件的路径。例如,创建一个名为 input.txt 的文本文件,其中包含:

file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'

这表示要拼接的三个视频文件为 video1.mp4、video2.mp4 和 video3.mp4。

使用 ffmpeg 命令进行拼接:

ffmpeg -f concat -i input.txt -c copy output.mp4

6.音视频分离

通过ffmpeg命令,将媒体文件中的音视频分离出来,可以使用如下命令:

  • 分离音频,保存为aac文件
ffmpeg -i input.mp4 -c:a copy -vn audio.aac
  • 分离视频,保存为MP4文件
ffmpeg -i input.mp4 -c:v copy -an video.mp4

7.音视频合并

将音频文件和视频文件合并:

ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy output.mp4

8.音视频添加水印

通过ffmpeg,给视频添加水印,可以添加图片水印,也可以添加文字水印。

  • 添加图片水印
ffmpeg -i input.mp4 -vf "movie=logo.jpg[wm];[in][wm]overlay=30:10[out]" output.mp4
  • 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=fontsize=100:fontfile=lazy.ttf:text='This is a test':x=20:y=20:fontcolor=green:box=1:boxcolor=yellow" output.mp4
  • 添加时间水印
ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=lazy.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" output.mp4

9.音视频加密

关于HLS加密的实现,我专门写过一篇文章。感兴趣的朋友们可以移步《HLS AES加密》

10.修改视频码率

  • 指定码率
ffmpeg -i input.mp4 -b:v 1500k output.mp4

11.修改视频分辨率

ffmpeg -i input.mp4 -s 1280x720 output.mp4

12. 检测视频源是否失效

ffmpeg -i <source> -f null -

补充

除了上述给出的参数外,ffmpeg还有很多参数,如果我们使用命令行对视频进行处理后,没有达到想要的效果,那么就有可能是ffmpeg的参数配置出现了问题,可以参考ffmpeg的官方文档来获取更多的参数用法。 当有一些特定的需求需要实现,但是又不知道该使用ffmpeg的哪些参数时,可以尝试使用FFmpeg Commander工具,你可以根据自己的需求手动选择配置,他可以帮你快速生成ffmpeg的命令行。 链接:alfg.dev/ffmpeg-comm…

ffmpegComm.png