Я использую IP Webcam на Android, который обеспечивает видеопоток mpjpeg. Я должен ограничить частоту кадров захвата до 5 кадров в секунду, чтобы сэкономить на батарее.
Однако ffmpeg по-прежнему будет определять входной поток как 25 кадров в секунду, что приводит к его сохранению с неправильной скоростью, вызывая временные метки и звук десинхронизировано.
Input #0, mpjpeg, from 'https://***:***@smarthome:8080/video':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
Input #1, ogg, from 'https://***:***@smarthome:8080/audio.opus':
Duration: N/A, start: 0.006500, bitrate: N/A
Stream #1:0: Audio: opus, 48000 Hz, mono, fltp
Metadata:
ENCODER : Lavf58.12.100
[stream_segment,ssegment @ 0x19b49a0] Opening '/mnt/nas/SecurityCamera/2020-06-20_14-26-04.mkv' for writing
Output #0, stream_segment,ssegment, to '/mnt/nas/SecurityCamera/%Y-%m-%d_%H-%M-%S.mkv':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 25 tbr, 1k tbn, 25 tbc
Stream #0:1: Audio: opus, 48000 Hz, mono, fltp
Metadata:
ENCODER : Lavf58.12.100
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[ogg @ 0x1753e00] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
frame= 8 fps=7.9 q=-1.0 size=N/A time=00:00:00.49 bitrate=N/A speed=0.489x
Как вы можете видеть, он обнаруживает, что вход № 0 равен 25 tbr, 25 tbn, 25 tb c, что дает ожидаемые 25 кадров в секунду, однако частота кадров в секунду (показанная сейчас высокая, но он медленно приближается к 5 кадрам в секунду) намного ниже 25, что приводит к тому, что скорость <1x. </p>
Я пытался использовать -r 5 -i ...
и -vsync 2
и разные значения для -enc_time_base
, ни одно из которых не имело никакого влияния. Из https://trac.ffmpeg.org/ticket/403 я узнал, что -r работает только с входами с неизвестной частотой кадров. Но у моего ввода нет неизвестных кадров в секунду, у него неправильные.
Есть ли способ принудительно перезаписать входные кадры в секунду, чтобы я мог получить правильную скорость 1x и синхронизированные временные метки и звук?