首页 > 解决方案 > 如何分段录制 UDP 流,FFmpeg

问题描述

我正在寻找一种在 30 分钟内连续记录 UDP 流并在 GPU 上实时编码的方法。我希望录制将日期和时间刻录到剪辑中并连续进行(24/7)。

我尝试了以下方法:

ffmpeg -i udp://source:port -c copy -flags +global_header -f segment -segment_time 1800 -segment_format_options movflags=+faststart -reset_timestamps 1 show_{Date}_{Time}.mp4

{Date}并且{Time}是保持FFmpeg启动时间的变量。

这会正确记录我的片段,但是,如果流中的信号丢失,则 FFmpeg 会崩溃并且不会继续录制或启动自身备份,并且不会将当前时间或日期刻录到输出视频中。

我需要它可以在 html5 中播放,这就是我做 mp4 的原因。

标签: htmlwindowsffmpegudp

解决方案


我已经解决了这个问题。

我设置了一个在任务调度程序上运行的批处理文件。每 30 分钟触发一次。

ffmpeg -hwaccel cuvid -y -i {udp} -vf "drawtext=fontfile=calibrib.tff:fontsize=25:text='{ChannelName} %{localtime}': x=10: y=10: fontcolor=white: box=1: boxcolor=0x000000" -pix_fmt yuv420p -vsync 1 -c:v h264_nvenc -r 25 -threads 0  -b:v 1M -profile:v main -minrate 1M -maxrate 1M -bufsize 10M -sc_threshold 0 -c:a aac -b:a 128k -ac 2 -ar 44100 -af "aresample=async=1:min_hard_comp=0.100000:first_pts=0" -bsf:v h264_mp4toannexb -t 00:30:00 {output}\{ChannelName}\{ChannelName}_{year}_{monthno}_{day}__{Hours}_{Minutes}_{Seconds}.mp4

中的文件名{ }是我的变量。

输出文件后,我正在运行修剪功能。

修剪功能从文件夹中选择所有 .mp4 文件来修剪视频的第一分钟。

使用-ss 00:01:00and-t 00:31:00但没有编码,所以我正在使用-codec copy -map 0 output.mp4


推荐阅读