Добавление текущего времени в качестве метки времени в необработанном потоке H.264 с несколькими кадрами - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть программа, которая выплевывает исходный поток H.264 (а именно, screenrecord на Android). Я использую FFmpeg для добавления PTS (метки времени представления) к кадрам следующим образом:

$ my-program | ffmpeg -i - -filter:v setpts='(RTCTIME - RTCSTART) / (TB * 1000000)' out.mp4

Этот фильтр вычисляет текущее время и помещает его в качестве PTS.

Проблема в том, что my-program не выдает никаких выходных данных, если в видео нет никаких изменений. Так как FFmpeg, кажется, ждет кучу кадров, прежде чем пропустить их через фильтр setpts, вычисленная PTS не будет правильной. В частности, последний кадр последовательности будет иметь временную метку при запуске следующей последовательности.

Есть ли способ (с FFmpeg или иным способом) добавить текущее время как PTS к необработанным кадрам H.264, где " текущее время "- это когда получает кадр, а не выводит его?

Примечание: Проблема заключается в , а не в буферизации из канала.

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете назначить временные метки раньше, позволяя setpts просто нормализовать его, начиная с 0.

 my-program | ffmpeg -use_wallclock_as_timestamps 1 -i - -filter:v setpts='PTS-STARTPTS' out.mp4

-use_wallclock_as_timestamps назначается структурой libavformat при получении пакета.

...