Не уверен, что здесь происходит, но я не могу получить согласованную синхронизацию звука с HDMI с помощью ffmpeg. Я могу получить стабильные результаты от OBS без проблем (видео всегда на 100 мс или около того впереди), хотя у меня там все настроено одинаково, но OBS на Linux не позволяет изменять входной диапазон цветов. Это известная проблема, которая, похоже, не будет исправлена в ближайшее время. Поэтому, если я не использую видео с ограниченным диапазоном, OBS не является предпочтительным вариантом. OBS поддерживает пользовательские настройки ffmpeg, но они влияют только на вывод, который в любом случае уже поддерживает полный диапазон. Я хотел бы знать, что OBS делает с ffmpeg под капотом, но я не нашел способ просмотреть это.
Большая часть моей команды не имеет отношения к проблеме, но лучше всего включить все это. Ранее я использовал ALSA, но ради согласованности с OBS я перешел на Pulse. Поведение кажется похожим. Я могу попытаться синхронизировать его с параметром -itsoffset
, но как только мне удастся закрыть синхронизацию, он снова будет отключен. Звук звучит нормально, а частота дискретизации на выходе 48 кГц совпадает с входной. Я также добавил в него оба -vsync
, -async
и -force_key_frames
как другие предлагали в Интернете для таких целей.
ffmpeg -hide_banner -f pulse -async 1 -i default -itsoffset 0 -f v4l2 -vsync 1 -i /dev/video0 -force_key_frames 0 -pix_fmt yuv420p -src_range 1 -dst_range 1 -color_range 2 -framerate 60 -r 60 -video_size 1920x1080 -vf setpts="(PTS-STARTPTS)" -c:v libx264 -c:a flac -crf 12 -dn -sn -map_metadata -1 -preset veryfast -f matroska capture.mkv
Вот мой журнал, позволяющий эффективно идентичной команде выполняться в течение 26 секунд. Это выглядит не очень хорошо, но я не уверен, что это значит:
https://gofile.io/?c=nEHyj3
В соответствии с предложением Xtoforas для Reddit я попытался использовать -use_wallclock_as_timestamps 1
и -copyts
, но я не увидел никаких улучшений с -use_wallclock_as_timestamps 1
и -copyts
сломали аудио, и, вероятно, это не то, что мне нужно в любом случае.