以写作调身心

ffmpeg常用命令整理

检测源流信息

ffmpeg -i 源流地址

推流

把A.MP4和B.mp4打包进同一个ts流,并推到本机的10003端口

ffmpeg -re -i A.mp4  -re -i B.mp4  -map 0:0 -map 0:1 -map 1:0 -map 1:1  -program program_num=1:title=videoA:st=0:st=1 -program program_num=3:title=videoB:st=2:st=3  -f mpegts udp://localhost:10003

以此类推

推一路流
ffmpeg -re -i A.mp4 -map 0:0 -map 0:1 -program program_num=1:title=videoA:st=0:st=1  -f mpegts udp://localhost:10003

推三路流
ffmpeg -re -i shenzhen.ts  -re -i guangdong.ts -re -i girl.mp4  -map 0:0 -map 0:1 -map 1:0 -map 1:1 -map 0:0 -map 0:1 -program program_num=1:title=videoA:st=0:st=1 -program program_num=3:title=videoB:st=2:st=3 -program program_num=5:title=videoXXX:st=4:st=5 -f mpegts udp://localhost:10003

循环推一路流,不做编码

ffmpeg -re -stream_loop -1 -i aaa.xx -c copy -f mpegts udp://localhost:10003

命令参数解释

  • re:realtime 推的速度,按当前帧率推
  • map 0:0 第一个流的视频
  • map 0:1 第一个流的音频
  • map 1:0 第二个流的视频
  • map 1:1 第二个流的音频
  • program_num=1:title=videoA:st=0:st=1 0,1合成一个视频videoA
  • program program_num=3:title=videoB:st=2:st=3 2,3合成一个视频videoB
  • -stream_loop 循环推流

查看流中的program信息

ffprobe -show_programs -print_format json -timeout 5000000 -i udp://localhost:10003  
  • 注意:这个命令有返回值,0表示执行成功,1表示失败。

将流中的program 1和program 3分别截取5s钟的时间,生成了两个文件

ffmpeg -timeout 5000000 -i udp://localhost:10003  -t 0:0:5  -map p:1 -c copy  1.mp4 -t 0:0:5 -map p:3 -c copy 3.mp4 
  • 注意。此时推的是复合流。

对视频流抽帧

ffmpeg -i 源流地址 -vframes 1 -vf scale=90:51 图片存放路径

重复推流

ffmpeg -re -stream_loop -1 -i aaa.xx -c copy -f mpegts udp://localhost:10003

./ffmpeg -re  -i -stream_loop -1 startslient.mp3  -c:a aac -f flv rtmp://123.56.17.184/live/znn

将流保存成文件

ffmpeg -i 流地址 -c copy 文件名

例如:
ffmpeg -i udp://localhost:10003 -c copy test.ts

检测源流中是否有静音

ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
(默认音频中如果有2秒是静音,就认为是有静音的)

持续让ffmpeg检测音频5秒
ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -t 0:0:5 -f null -

评论