Как заставить ffmpeg чаще обновлять оверлейное изображение? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь заниматься спортом в прямом эфире с помощью ffmpeg.Оценка совпадения потоковой передачи извлекается с сервера и преобразуется в png.Этот png должен отображаться поверх видео.

ffmpeg позволяет накладывать оверлей на видеопоток с помощью демультиплексора image2.Если я использую -loop1, это наложение обновляется примерно каждые 5 секунд.Как я могу заставить ffmpeg чаще читать его с диска?

Моя текущая попытка с обновлением оверлея раз в 5 секунд (видео mp4 для тестирования):

nice -n -19 ffmpeg \
        -re -y \
        -i s.mp4 \
        -f image2 -loop 1 -i http://127.0.0.1:3000/img \
        -filter_complex "[0:v][1:v]overlay" \
        -threads 4 \
        -v 0 -f mpegts -preset ultrafast udp://127.0.0.1:23000 \
        &

PS Я знаю,что я могу сделать потоковый виджет YouTube на веб-сайте и поставить оценку поверх него, просто используя html / css / js.Но, к сожалению, это должно быть сделано непосредственно в видеопотоке.

PPS Я знаю, что я могу использовать ffmpeg drawtext.Но это не то, что я хочу.У меня есть специально разработанный png, который должен обновляться как можно чаще (раз в 1-2 секунды было бы просто замечательно)

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Три вещи:

1) -re применяется к каждому входу, поэтому в настоящее время ffmpeg читает изображение с асинхронной скоростью относительно видео.Поскольку видео читается в режиме реального времени, считыватель изображений ставит в очередь пакеты зацикленного изображения, пока фильтр-граф не сможет их использовать.Таким образом, обновленное изображение будет израсходовано намного позже и с более высокой временной отметкой, чем когда оно было фактически обновлено.Добавьте -re перед изображением -i, чтобы исправить это.

2) Пропустите -loop 1 и используйте -stream_loop -1, поскольку демультиплексор image2 может прервать работу, если вход заблокирован или пуст (из-за обновления), когдаон пытается это прочитать.Хотя, поскольку вход считывается по сетевому протоколу, это может быть не проблемой для вас.

3) В параметрах вывода вы не указали кодировщик.Поскольку формат MPEG-TS, ffmpeg выберет mpeg2video с битрейтом по умолчанию 200 кбит / с.Предустановка ultrafast не применяется к этому кодеру.Вы, вероятно, хотите добавить -c:v libx264.

0 голосов
/ 29 апреля 2019

Я обнаружил, что увеличение значения частоты кадров image2 до 90-100 делает процесс чтения файлов быстрее, но звук замедляется

...