如何用FFMPEG分块记录UDP流?

Posted

技术标签:

【中文标题】如何用FFMPEG分块记录UDP流?【英文标题】:How to record UDP stream with FFMPEG in chunks? 【发布时间】:2012-05-22 05:06:53 【问题描述】:

我正在寻找一种使用 ffmpeg 但以 1000 万个块记录视频 UDP 流的方法。 我目前使用以下方法获取 1000 万视频(使用 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 吗?

提前致谢

【问题讨论】:

【参考方案1】:

好的,找到了。

最近ffmpeg添加了一个segmenter,语法如下:

-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_time 60 "xxx-%03d.ts"

【讨论】:

我正在尝试使用您的解决方案,现在我有: ffmpeg -i rtsp://192.168.88.11/ -vcodec copy -acodec copy -f mp4 -segment_time 60 -y "test- %03d.mp4" 这工作正常,但输出不是分段的。如果我将 -f mp4 替换为 -f 段,我得到:输出文件 #0 不包含任何流 有什么想法吗? 只是想知道将多个 UDP / RSTP 流转换+录制为 mp4 时会导致大量 RAM 使用吗?我想尝试在一台计算机上试验 8。【参考方案2】:

这是一个更好的方法:

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 实验性 -f stream_segment -segment_format mpegts -segment_time 5 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 d:/%H%M%S.mp4

通过此代码,ffmpeg 使用当前系统时间生成一系列输出文件。

【讨论】:

以上是关于如何用FFMPEG分块记录UDP流?的主要内容,如果未能解决你的问题,请参考以下文章

教你如何用ffmpeg处理音频格式转换(标贝科技)

如何用ffmpeg将rtsp视频流录制成mp4文件?

如何用ffmpeg截取视频片段&截取时间不准确的坑

ffmpeg:播放 udp 流

OpenDaylight(一):如何用postman控制ODL查看和下发流表

ffmpeg通过UDP协议将编码后的流发送到局域网电脑的某个端口上。