FFMPEG x11grab/pulse AV-захват: немонотонный DTS

FFMPEG x11grab/pulse AV-захват: немонотонный DTS

Я перепробовал множество вариантов, пытаясь это исправить, но я подумал, что лучше начать с того, что я хочу, и попросить о помощи. Я хочу захватить некоторые эмулированные игровые кадры, обычно с разрешением 256*240, поэтому, пока я этим занимаюсь, я подумал, что могу также захватить кадры без потерь и без изменения масштаба. Я использую эту командную строку:

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a copy -y /tmp/capture.mkv

(Кстати, я использую /tmp как раздел ram disk/tmpfs, не уверен, повлияет ли это на что-то.)

Однако я всегда сталкиваюсь с какой-то проблемой с временной меткой, и появляется предупреждение, которое выглядит примерно так:

[matroska @ 0x55b042f269b0] Non-monotonous DTS in output stream 0:1;
previous: 144, current: 141; changing to 144. This may result in
incorrect timestamps in the output file.

Полученное видео имеет рассинхронизированный звук/видео, и при воспроизведении видео будет случайным образом останавливаться и ускоряться, с искаженным звуком, который может полностью остановиться во время воспроизведения. Запись видео или аудио по отдельности работает нормально, но когда ffmpeg пытается синхронизировать их, проблемы, похоже, начинают появляться.

Я перепробовал всевозможные варианты из сообщений на форумах, особенно в сети StackExchange, но единственный, который, как мне показалось, работал в правильном направлении, был -async 1/-af aresample=async=1:min_hard_comp=0.100000:first_pts=0:

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor \
    -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a pcm_s16le \
    -af aresample=async=1:min_hard_comp=0.100000:first_pts=0 -y /tmp/capture.mkv

Это не выводит никаких предупреждений, связанных с DTS, но я действительно наблюдаю замораживание аудио/видео во время игры, и полученное видео все еще не очень хорошее. Я немного сомневаюсь в этом, но, возможно, мое оборудование просто не способно справиться с накладными расходами на эмуляцию игры, запись и кодирование одновременно. Может быть, если можно настроить vcodec и acodec на «копирование», мультиплексировать это в .nut (mkv, судя по всему, не любит необработанное видео) и как-то повторно синхронизировать видео и аудио в посте, я мог бы подтвердить, что это такого рода проблема.

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

По данным "neofetch", это релевантные характеристики:

CPU: AMD Ryzen 5 1600 (12) @ 3.200GHz
GPU: NVIDIA GeForce GTX 970
Memory: 2910MiB / 16017MiB

Связанный контент