2025-06-21
音视频
00
请注意,本文编写于 32 天前,最后修改于 1 天前,其中某些信息可能已经过时。

目录

ffmpeg命令用法总结
前言
常用参数
使用场景
1.转协议
2.转封装
3.转编码
4.音视频裁剪
5.音视频拼接
6.音视频分离
7.音视频合并
8.音视频添加水印
9.音视频加密
10.修改视频码率
11.修改视频分辨率
12. 检测视频源是否失效
进阶命令
rtsp推流
杂项
一些编码格式配置
mjpeg 转 h264
补充

ffmpeg命令用法总结

前言

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 -

进阶命令

rtsp推流

设置音频采样率,rtsp tcp传输模式等

ffmpeg -f dshow -i video="USB Video Device" -re -stream_loop -1 -i brave.wav -c:v mjpeg -huffman 0 -c:a pcm_mulaw -ar 8000 -ac 1 -rtsp_transport tcp -f rtsp rtsp://192.168.66.18:8554/TX00000206AQBMMD/dm?jwt=

杂项

一些编码格式配置

ffmpeg -re -stream_loop -1 -i mecha.avi -c:v mjpeg -huffman 0 -rtsp_transport tcp -f rtsp rtsp://192.168.66.18:8554/live ffmpeg -re -stream_loop -1 -i mecha.avi -c:v mjpeg -huffman 0 -pix_fmt yuvj420p -rtsp_transport udp -f rtsp rtsp://192.168.66.19:8554/live ffmpeg -f video4linux2 -i "/dev/video0" -c:v mjpeg -huffman 0 -rtsp_transport tcp -f rtsp rtsp://192.168.66.18:8554/live ffmpeg -f video4linux2 -i "/dev/video0" -c:v copy -huffman 0 -rtsp_transport tcp ffplay -rtsp_transport tcp rtsp://192.168.66.18:8554/live ffmpeg -re -stream_loop -1 -i mecha.mp4 -c:v mjpeg -c:a pcm_mulaw -huffman 0 -rtsp_transport tcp -f rtsp rtsp://192.168.66.18:8554/live # 浏览器采集音频转化 ffmpeg -f f32le -ar 48000 -ac 1 -i raw_audio.pcm volum.wav ffmpeg -f s16le -ar 48000 -ac 1 -i raw_audio.pcm -f f32le -ar 48000 -ac 1 volum.wav ffmpeg -f f32le -ar 48000 -ac 1 -i raw_audio.pcm -f s32le -ar 48000 -ac 1 outputauto.pcm ffmpeg -f mulaw -ar 8000 -ac 1 -i star.pcm -f f32le -ar 48000 -ac 1 starf32le.pcm ffmpeg -f f32le -ar 48000 -ac 1 -i raw_audio.pcm -acodec pcm_f32le -ac 1 -ar 48000 origin.wav -y ffmpeg -f mulaw -ar 8000 -ac 1 -i star.pcm -acodec pcm_f32le -ac 1 -ar 48000 star.wav -y ffmpeg -f f32le -ar 48000 -ac 1 -i starf32le.pcm -acodec pcm_f32le -ac 1 -ar 48000 -f rtsp rtsp://192.168.66.19:8554/live ffmpeg -f f32le -ar 48000 -ac 1 -i starf32le.pcm -acodec pcm_f32le -ac 1 -ar 48000 -f rtsp rtsp://192.168.66.19:8554/live ffplay -f f32le -ar 48000 -ac 1 -i raw_audio.pcm ffmpeg -re -stream_loop -1 -f f32le -ar 48000 -ac 1 -i starf32le.pcm -acodec pcm_mulaw -sample_fmt u8 -ar 8000 -ac 1 -rtsp_transport tcp -f rtsp rtsp://192.168.66.19:8554/live ffmpeg -re -stream_loop -1 -f mulaw -ar 8000 -ac 1 -i a.pcm -acodec pcm_mulaw -ar 8000 -ac 1 -rtsp_transport tcp -f rtsp rtsp://192.168.66.19:8554/live

mjpeg 转 h264

mjpeg 转 h264 软解 延迟很高(6~7s) ffmpeg -i rtsp://192.168.66.136:8554/169 -c:v libx264 -preset fast -f mpegts -x264opts "keyint=60:min-keyint=60" udp://localhost:1234 降低编码质量 ffmpeg -i rtsp://192.168.66.136:8554/169 -c:v libx264 -preset ultrafast -crf 28 -f mpegts -x264opts "keyint=60:min-keyint=60" udp://localhost:1234 启用硬件加速 ffmpeg -i rtsp://192.168.66.136:8554/169 -c:v h264_qsv -preset fast -crf 28 -f mpegts -x264opts "keyint=30:min-keyint=30" udp://localhost:123 ffmpeg.exe -i .\20250721_174907.mp4 -c:v libx264 -b:v 500k -c:a aac -ar 8000 output500aac.mp4

补充

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

我会持续对文章进行更新,增加更多的ffmpeg命令行的例子。

本文作者:zion

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!