2022-02-24 FFmpeg操作
参数描述
参数名称 | 参数内容 | 描述 |
---|---|---|
-i | 1.mp4 | 指定此次操作的输入文件 |
-re | 控制读取 AVpacket 的速度,按照帧率速度读取文件 AVpacket。如果有多个流,以最慢的帧率为准。或者 以本地帧频读数据,主要用于模拟捕获设备 | |
-y | 操作过程中询问类型选择yes | |
out.avi | 一般放在命令最后,作为此次操作的输出文件 | |
-ss | 00:00:10 | 指定开始时间,单位是s |
-t | 00:01:50 | 指定结束时间,单位是s |
-ss | 10 | 指定开始时间,单位是s |
-t | 80 | 指定持续时间,单位是s |
-acodec | copy | 指定音频编码,copy表示使用原音频编码 |
-vcodec | copy | 指定视频编码,copy表示使用原视频编码 |
ac | 2 | 音频通道选择(1=单通道,2=立体声) |
-vframes | 1 | 选择第几帧 |
-stream_loop | -1 | 循环次数,-1表示无限循环 |
-formats | 查看所有支持的容器格式 | |
-codecs | 查看所有编解码器 | |
-filters | 查看所有可用的filter | |
-pix_fmts | 查看所有支持的图片格式 | |
-sample_fmts | 查看所有支持的像素格式 |
查看支持处理的文件格式
ffmpeg.exe -formats
图像合并成视频
.\ffmpeg.exe -y -framerate 25 -i image%d.png out.avi
2022-02-24_102813.png
查看视频信息
ffmpeg.exe -i 1.mp4
2022-06-10_144746.png
音频格式转换
flac转MP3
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
从视频中截取某一时间段
-ss 00:00:00=开始时间
-t 00:01:50=结束时间
-vcodec copy=视频编解码使用原格式
-acodec copy=音频编码使用原音频编码
以下2种方式等价,时间格式支持HH:mm:ss和秒值
ffmpeg -i src.mp3 -ss 00:00:00 -t 00:01:50 -vcodec copy -acodec copy result.mp3
ffmpeg -i src.mp3 -ss 0 -t 90 -vcodec copy -acodec copy result.mp3
视频中截图
-ss 截图的时间,单位秒
-y 如果这个图片存在,是否覆盖,如果不加这个参数,遇到同名文件就会提示你是否覆盖
-vframes 第几帧,因为输入的时间是秒单位,在这1秒内视频中有很多帧,这里输入你要的第几帧
out.bmp 输出图像的路径
ffmpeg.exe -ss 00:10:00 -i 1.mp4 -y -vframes 1 out.bmp
![2022-06-10_145636.png](https://img.haomeiwen.com/i23281417/[图片上传中...(2022-06-29_133510.png-2699a3-1656480919446-0)]
255accfbe22036b4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
本地视频循环推流到RTMP服务器
-stream_loop -1=循环推送,如果不加这个参数,视频结束后就停止了,加了过后视频结束后又重新开始
rtmp://localhost:29991/hf_dav/test=RTMP服务器地址
ffmpeg.exe -re -stream_loop -1 -i 1.mp4 -f flv rtmp://localhost:29991/hf_dav/test
本地视频循环推流到RTSP服务器
ffmpeg.exe -re -stream_loop -1 -i 1.mp4 -f rtsp rtsp://localhost:554/rtsp_test
推声卡音频到RTMP服务器
Windows
"audio=virtual-audio-capturer"=通过名称指定声卡设备,加双引号是因为很多时候声卡设备名称中会包含空格,可以通过加双引号将这个参数标识数来。同理在其他参数中如果包含空格时也可以这样做,比如路径。
-acodec aac=音频编码
ffmpeg.exe -f dshow -i "audio=virtual-audio-capturer" -acodec aac -ac 2 -f flv rtmp://localhost:29991/hf_dav/ai
银河麒麟V10
执行上述命令时提示 Unknown input format: 'dshow'
查看后发现在麒麟中FFmpeg没有dshow模块,但是有一个alsa模块,这个模块在Windows中是没有的。
所以在麒麟中可以同理的进行推流
-i hw:0=指定声卡设备,笔者也不知道在麒麟中怎么找声卡,网上有人说就用这个,试了一下好像是可以的
ffmpeg -f alsa -i hw:0 -acodec aac -ac 2 -f flv rtmp://localhost:81/push/test
枚举设备中的音视频设备
如下图中列出了设备中的2个video和一个audio设备
ffmpeg -list_devices true -f dshow -i dummy
2022-06-29_133510.png
提取音视频
可以将视频文件中的音视频分离
-an=不处理音频
-vn=不处理视频
//提取视频流
ffmpeg -i in.mp4 -vcodec copy -an out.mp4
//提取音频流
ffmpeg -i in.mp4 -acodec copy -vn out.mp3
合并音视频文件
ffmpeg –i in.mp3 –i in.mp4 –vcodec copy –acodec copy out.mp4
RTSP视频流录制
将RTSP视频流保存到本地视频文件中,RTMP应该也同理吧
ffmpeg –i rtsp://localhost:81/stream –vcodec copy out.mp4
多个视频文件拼接
创建一个in.txt文件
里面添加需要合并的每个文件内容
file 'in_1.mp4'
file 'in_2.mp4'
...
ffmpeg -f concat -i in.txt -c copy out.mp4