如何使用FFMPEG以分块方式记录UDP流?

5
我正在寻找一种使用ffmpeg以10分钟为间隔记录视频UDP流的方法,目前我使用以下命令获取10分钟的视频(使用h264转码)。
"ffmpeg -i udp://239.0.77.15:5000 -map 0:0 -map 0:1 -s 640x360 -vcodec libx264 -g 100 -vb 500000 -r 25 -strict experimental -vf yadif -acodec aac -ab 96000 -ac 2 -t 600 -y /media/test.m4"
我的问题是使用命令行ffmpeg需要时间来重新同步udp流,每次会丢失2秒钟的视频。这是正常现象吗?
请问有没有办法在命令行中实现它,或者我应该尝试使用ffmpeg API?
谢谢!
2个回答

13

好的,找到了。

最近ffmpeg新增了一个分段器,以下是语法:

-f segment: 告诉ffmpeg使用分段器

-segment_time: 分块大小(秒为单位)

您可以使用类似%03d(000、001、002、003 ...)的自动递增文件名。

这是我用来转码UDP MPEGTS流到H264+AAC并将其保存到文件块(60秒)的命令行:

ffmpeg -i udp://239.0.77.15:5000 -map 0:0 -map 0:1 -s 640x360 -vcodec libx264 -g 60 -vb 500000 -strict experimental -vf yadif -acodec aac -ab 96000 -ac 2 -y -f segment -segment_time 60 "xxx-%03d.ts"


2
我正在尝试使用你的解决方案,目前我有以下命令:ffmpeg -i rtsp://192.168.88.11/ -vcodec copy -acodec copy -f mp4 -segment_time 60 -y "test-%03d.mp4"这个命令可以正常工作,但输出文件不是分段的。如果我将"-f mp4"替换为"-f segment",会出现以下错误信息:输出文件#0不包含任何流有什么想法吗? - Roman Gaufman
想知道将多个UDP/RSTP流转换和录制为mp4时是否会导致大量的RAM使用?我想在一台计算机上尝试8个流的实验。 - CP3O

10

这是更好的方法:

ffmpeg -re -i udp://10.1.1.238:1234?fifo_size=1000000 -vcodec libx264 -vb 500000 -g 60 -vprofile main -acodec aac -ab 128000 -ar 48000 -ac 2 -vbsf h264_mp4toannexb -b 1000k -minrate 1000k -maxrate 1000k -strict experimental -f stream_segment -segment_format mpegts -segment_time 5 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 d:/%H%M%S.mp4

通过这段代码,ffmpeg使用当前系统时间来创建一系列输出文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接