废话:公司项目需要学习一下ffmpeg处理音频流相关知识,所以文中大多跟音频相关的简单使用,现在还处于只知其一不知其二的阶段,越学越觉得ffmpeg很强大,如文章有任何错误之处还望指出,之后如果学到更多的东西会更新,英语渣渣觉得要是能把原文档啃下来肯定能学到很多,文档很详细,推荐大家去看,碎碎念结束
FFmpeg官网:http://ffmpeg.org/
常用语句
1、文件或流转推http流
ffmpeg -re -i D:11.mp4 -vcodec copy -acodec copy -listen 1 -f flv http://127.0.0.1:8088/test
-re:用于控制文件传输速度,流输入可不要;
listen 1:限制拉流端只能一个,可设置为2,但在命令行中不可取
flv:为格式,一般由输入流的格式决定,常用还有ogg
vcodec copy&acodec copy:应该可以理解为复制视频和音频流
mp3同理ffmpeg -re -i D:CloudMusic2.mp3 -c copy -listen 1 -f mp3 http://127.0.0.1:7089
2、文件或流转推rtsp流
ffmpeg -re -stream_loop 100 -i D:CloudMusic320.mp3 -vn -vcodec copy -acodec copy -map_metadata -1 -rtsp_transport tcp -f rtsp rtsp://172.16.0.29:554/20200118/test
-stream_loop:循环播放,后接数字100为循环次数
-vn:不传输视频,类似还有-an,不传输音频,此处用于传输mp3时不传输音频流的其他信息,类似于作者,流派,同样能做到此作用的还可以是 -map 0:a ,代表只传输0通道的数据流,也就是音频流
-map_metadata -1:设置mp3的信息,类似于作者,流派,封面等
3、文件或流转推rtp流
ffmpeg -re -f concat -safe 0 -i D:CloudMusic320.txt -map 0:a -vcodec copy -acodec copy -map_metadata -1 -f rtp rtp://172.16.0.29:8088
-concat:用户合并音频流,可以是多个音频文件,也可以是多个音频文件路径组合的txt文件,格式为:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv
如果文件名有奇怪的字符,要先转义,file后面是音频路径,缺陷是不能同时和stream_loop使用,要实现多文件循环只能在TXT文件重复音频路径
-safe 0:应该可以理解为安全打开文件
4、文件或流转码并同时推流(rtsp、rtp等)
ffmpeg -re -i D:CloudMusicTM.aac -c:a mp3 -vn -f rtp rtp://172.16.0.29:5548 //aac转mp3,同理可替换
-c:a:0 copy 告诉ffmpeg复制音轨而不重新编码
-c:a mp3 告诉ffmpeg复制音轨而重新编码
-vn:去除视频流,转播rtp无法多路复用,可能出现报错Only one stream supported in the RTP muxer
注:无法接收rtp流转发rtp流,因为rtp播发需要sdp文件,sdp文件在接收流完成后产生,可能出现的报错
Unable to receive RTP payload type 97 without an SDP file describing it
5、文件或流转码并同时推流rtmp(监控用)
ffmpeg -rtsp_transport tcp -i "rtspUrl" -vcodec libx264 -vprofile baseline -tune zerolatency -preset superfast -f flv rtmp://127.0.0.1:8081/live/test
-tune zerolatency:主要用于降低延迟,还有其他选项
-preset superfast:同上 ,解释如下
最后附上大佬博客https://blog.csdn.net/leixiaohua1020/article/details/15811977