Как я могу записать поток UDP в сегментах, FFmpeg - PullRequest
0 голосов
/ 18 октября 2019

Я ищу способ непрерывной записи потока UDP в течение 30 минут и кодирования в реальном времени на 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.

1 Ответ

0 голосов
/ 25 октября 2019

Я решил это.

Я установил пакетный файл, который запускается в планировщике задач. Триггеры каждые 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 и -t 00:31:00, но без кодирования, поэтому я использую -codec copy -map 0 output.mp4

...