ffmpeg и рассинхронизация звука

Ответить
Сквозняк
Сообщения: 78
Зарегистрирован: 25 сен 2023, 22:57
Operating system: Роса, Федора, Бубунта, Дос, Маздайка

ffmpeg и рассинхронизация звука

Сообщение Сквозняк »

Захватываю часть экрана командой

Код: Выделить всё

ffmpeg -f pulse -thread_queue_size 256 -i alsa_output.pci-0000_01_0a.0.analog-stereo.monitor -f x11grab -r 60 -s 1440x1080 -thread_queue_size 4096 -i :1.0+240 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p -threads 12 grab_4.mkv
Скорости для захвата хватает, но звук сильно отстаёт. Если бы не успевало писать видео, то тогда бы звук впереди был. У ffmpeg вроде как есть способы автоматически синхронизировать звук при записи, -vsync брутфорсил, но пока успехов не добился.
turik02
Сообщения: 645
Зарегистрирован: 01 июн 2022, 13:47
Operating system: РОСА «ФРЕШ» 13 GNOME 64-bit

Re: ffmpeg и рассинхронизация звука

Сообщение turik02 »

При записи экрана с помощью ffmpeg часто возникают проблемы с синхронизацией аудио и видео. Вот несколько способов решения проблемы с отставанием звука:
При записи экрана с помощью ffmpeg часто возникают проблемы с синхронизацией аудио и видео. Вот несколько способов решения проблемы с отставанием звука:

1. **Использование синхронизации по времени**
Добавьте параметры `-async 1` или `-af aresample=async=1` для автоматической синхронизации аудио с видео.

2. **Настройка буферов**
Увеличьте размер буфера для аудио:
```bash
-thread_queue_size 512
```

3. **Изменение параметров захвата звука**
Попробуйте использовать другой метод захвата звука:
```bash
-f alsa -i hw:0
```

4. **Оптимизация параметров кодирования**
Измените параметры кодирования для уменьшения нагрузки:
```bash
-preset veryfast -crf 20
```

5. **Синхронизация через map**
Используйте явное сопоставление потоков:
```bash
ffmpeg -f pulse -thread_queue_size 256 -i alsa_output.pci-0000_01_0a.0.analog-stereo.monitor \
-f x11grab -r 60 -s 1440x1080 -thread_queue_size 4096 -i :1.0+240 \
-map 0:a:0 -map 1:v:0 -async 1 -acodec pcm_s16le -vcodec libx264 \
-preset ultrafast -qp 0 -pix_fmt yuv444p -threads 12 grab_4.mkv
```

6. **Проверка системных ресурсов**
Убедитесь, что:
* Процессор не перегружен
* Достаточно оперативной памяти
* Нет проблем с дисковой подсистемой

7. **Альтернативный вариант команды**
Попробуйте такой вариант конфигурации:
```bash
ffmpeg -f pulse -thread_queue_size 1024 -i alsa_output.pci-0000_01_0a.0.analog-stereo.monitor \
-f x11grab -r 60 -s 1440x1080 -thread_queue_size 4096 -i :1.0+240 \
-async 1 -acodec pcm_s16le -vcodec libx264 -preset veryfast \
-crf 20 -pix_fmt yuv444p -threads 12 grab_4.mkv
```

Если проблема сохраняется, попробуйте уменьшить разрешение видео или частоту кадров для снижения нагрузки на систему. Также можно протестировать запись на другом устройстве для исключения аппаратных проблем.
Сквозняк
Сообщения: 78
Зарегистрирован: 25 сен 2023, 22:57
Operating system: Роса, Федора, Бубунта, Дос, Маздайка

Re: ffmpeg и рассинхронизация звука

Сообщение Сквозняк »

Да вот как-то никак - никаких улучшений синхронизации звука не добился. На других устройствах мощностей для кодирования видео мало, в последний раз когда там захватывал, использовал древний ffmpeg и такую команду, чтобы как-то пожать видео с минимумом тормозов и не мыльно-артефактно:
ffmpeg -video_size 1024x768 -framerate 30 -f x11grab -i :1.0+128,157 -f pulse -i alsa_output.pci-0000_01_0a.0.analog-stereo.monitor -c:v mpeg1video -b:v 20000K -minrate 8000K input.mkv

Это было на славной видеокарте GT 730, наверно потому этот кодек показал наилучшие результаты в скорости и неплохое качество при завышенном битрейте. Райзен этот кодек не оценил, пришлось для x264 опции подбирать:)

Выводить звук через алсу не получилось - не набрутфорсил наверно. А в других случаях наблюдается чёткое отставание звука - где-то программно он тормозится или кладётся в контейнер не с тем таймингом.
Сквозняк
Сообщения: 78
Зарегистрирован: 25 сен 2023, 22:57
Operating system: Роса, Федора, Бубунта, Дос, Маздайка

Re: ffmpeg и рассинхронизация звука

Сообщение Сквозняк »

Нашёл некоторые подводные камни в процессе. Сначала надо определить источники звука:

Код: Выделить всё

 pactl list short sources
В команде захвата сначала писать видео, а потом аудио, тогда если рассинхронизация и будет, то мелкая. Причём, большой -thread_queue_size для аудио сильно снижает фпс.

Код: Выделить всё

ffmpeg -f x11grab -r 60 -s 1440x1080 -thread_queue_size 4096 -i :1.0+240 -f pulse -thread_queue_size 256 -i alsa_output.pci-0000_0e_00.6.analog-stereo.monitor -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p -threads 12 -acodec pcm_s32le grab_4.mkv
Также фпс может снизиться, если несколько раз захватывать видео из одной консоли, и если консоль с игрой заезженная. Где-то ресурсы не освобождаются и нужно перезапускать консоли для их освобождения.
Ответить

Вернуться в «Программы РОСА десктоп»