检测源流信息
推流
把A.MP4和B.mp4打包进同一个ts流,并推到本机的10003端口
1
| 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 -c copy -f mpegts udp://localhost:10003
|
以此类推
1 2 3 4 5
| 推一路流 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
|
循环推一路流,不做编码
1
| 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 循环推流
- -c copy 将视频中压缩的数据复制
- -c:v libh264 将视频流强制转换为h264编码
查看流中的program信息
1
| ffprobe -show_programs -print_format json -timeout 5000000 -i udp://localhost:10003
|
- 注意:这个命令有返回值,
0
表示执行成功,1
表示失败。
将流中的program 1和program 3分别截取5s钟的时间,生成了两个文件
1
| 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
|
对视频流抽帧
1
| ffmpeg -i 源流地址 -vframes 1 -vf scale=90:51 图片存放路径
|
重复推流
1 2 3
| 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
|
将流保存成文件
1 2 3 4
| ffmpeg -i 流地址 -c copy 文件名
例如: ffmpeg -i udp://localhost:10003 -c copy test.ts
|
检测源流中是否有静音
1 2 3 4 5
| 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 -
|
切分视频片段
切分纯视频片段
1
| ffmpeg -i test.flv -vsync 0 -filter_complex "[0:v]select='between(t-start_t,8.250,10.000)'[xv];[xv]setpts='PTS-STARTPTS'[vout];[vout]scale=1920:1080,pad=1920:1080:0:0:black[vout2]" -map "[vout2]" -c:v libx264 test.ts
|
切分纯音频片段
1
| ffmpeg -i test.mp3 -filter_complex "[0:a]aselect='between(t,0.000,26.250)'[xa];[xa]asetpts='NB_CONSUMED_SAMPLES/SAMPLE_RATE*1/TB'[aout] " -map "[aout]" out.mp3
|
切分带音频的视频片段
1
| ffmpeg -i test.flv -filter_complex "[0:v]select='between(t-start_t,5.250,10.000)'[xv];[xv]setpts='PTS-STARTPTS'[vout];[vout]scale=[vout2]" -r 25 -map "[vout2]" -c:v libx264 -x264-params sps-id=6 out.ts
|
命令参数解释
- -vsync 0:打印ffmpeg详细日志的开关
- black:添加黑边
- libx264:编码
合并视频片段
1
| ffmpeg -f concat -safe 0 -i test.txt -c copy out.mp4
|
- test.txt:一个文件列表,里面存放着要合并的视频片段名
- -f concat -safe 0:打开文件时会用到
合并视频的同时添加图片和文字水印
1
| ffmpeg -f concat -safe 0 -i test.txt -t 27.040 -loop 1 -i 1080P%05d.png -filter_complex "[0:v][1:v]overlay=x=0:y=885:enable='between(t,0,30)'[out];[out]drawtext=fontfile=simhei.ttf:text='name':x=414:y=928:fontsize=60:fontcolor=white:enable='between(t,0,30)'[out];[out]drawtext=fontfile=simhei.ttf:text='title':x=630:y=933:fontsize=52:fontcolor=white:enable='between(t,0,30)'" -y -c:v libx264 out.mp4
|
链接
how-can-i-overlay-png-image-sequence-but-start-at-particular-frame-using-ffmpeg
利用ffmpeg实现添加图片水印和文字水印,添加多个水印
使用ffmpeg给视频添加图片及文字水印