Если используется формат Matroska, при определенных частотах кадров он записывает не точную входную частоту кадров, а немного более высокую, чем входная частота кадров.
Например:
ffmpeg -video_size 1920x1080 -f x11grab -framerate 30 -i :0.0 -c:v libx264rgb -crf 0 -preset ultrafast video.mkv
не создает запись со скоростью 30 кадров в секунду, а со скоростью 30,0003 кадра в секунду.
Это нехорошо, потому что даже незначительное изменение входной частоты кадров может вызвать сильное зависание кадров. Если только ffmpeg не ускоряет поток в 1,00001x, о чем я так не думаю при использовании x11grab.
Чтобы доказать это, можно использовать VLC для проверки частоты кадров.
Есть ли способ заставить ровно 30 кадров в секунду, или это недостаток формата?
Кроме того, uname -a
:
Linux linux 4.1.15-rt17-1-rt-fixedtimers #1 SMP PREEMPT RT Sat Jan 16 01:14:52 GMT+5 2016 x86_64 GNU/Linux
MKV не хранит частоту кадров в своем контейнере. Таким образом, ffmpeg/vlc вместо этого смотрит на продолжительность кадра по умолчанию. Он видит 33,333 мс и делает математику, откуда и взялось ваше странное число.
Для получения дополнительной информации см.: https://gitlab.com/mbunkus/mkvtoolnix/wikis/Wrong-frame-rate-displayed .
Чтобы проверить это, вы можете запустить ffprobe
с -show_frames
. Я думаю, вы обнаружите, что время презентации для каждого кадра точное.
Джим Мак
Логан
ffmpeg
команды в консоль.тильда
Гьян
-vsync 0
. Независимо от скорости исходного сигнала, MKV будет кодировать одинаковые тайминги.