html - 如何分段录制 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 的原因。
解决方案
我已经解决了这个问题。
我设置了一个在任务调度程序上运行的批处理文件。每 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:00
and-t 00:31:00
但没有编码,所以我正在使用-codec copy -map 0 output.mp4
推荐阅读
- python - 使用 smtplib 发送邮件在本地部署时有效,但在 swarm 中部署时失败(无法分配请求的地址)
- python - 使用 beautifulsoup 抓取维基百科表格
- javascript - 电子/节点 - 使用 require 和 readFile 的片段使 javascript 失败
- docker - 如何在 docker 中获得网络摄像头访问权限?
- javascript - 对象属性未定义
- c# - 如何让主窗体监听控件中的按钮单击
- html - Blazor 服务器端未加载事件侦听器
- python - 使用python将图像和文本写入文件
- c# - 从 WebService 发出异步请求
- reactjs - 将数据传递给事件处理程序的更好方法是:通过函数闭包或自定义数据属性