Вопрос или проблема
Добрый день. Мне нужно записать звук и изображение из игры с использованием NVIDIA cuda, но я не знаю, как одновременно записывать звук с помощью ffmpeg. Я использую RTX 3050 и Windows 11 pro.
Пробую использовать команду
ffmpeg -y -fflags +genpts -init_hw_device d3d11va -filter_complex “ddagrab=0:framerate=60:video_size=3840×2160” -c:v h264_nvenc -y -f mp4 “out.mp4”
Эта команда работает отлично. Я могу получить полное 4K разрешение без пропусков кадров, но как добавить звук к видео на лету?
Мой вопрос отличается от вопроса на Запись экрана с помощью ffmpeg, потому что я использую -init_hw_device d3d11va и ddagrab, что дает большое преимущество, так как мой процессор простаивает во время работы.
start ffmpeg -y -fflags +genpts -init_hw_device d3d11va -filter_complex “ddagrab=0:framerate=60:video_size=3840×2160” -c:v h264_nvenc -y -f mp4 “out.mp4″ start ffmpeg -y -f dshow -i audio=”virtual-audio-capturer” out.wav
но были созданы два несинхронизированных файла out.mp4 и out.wav. Может быть, какой-то более опытный пользователь сможет исправить это, как вы упомянули, на one_video.mp4 на лету.
Ответ или решение
Для решения задачи записи как видео, так и звука с использованием аппаратного ускорения NVIDIA в FFmpeg вам необходимо правильно конфигурировать команды для одновременной записи данных без рассинхронизации. У вашего текущего подхода возникает проблема с записью звука и видео в разные файлы, что приводит к их асинхронности.
Шаги для записи видео и звука в одном файле при помощи FFmpeg с использованием NVIDIA GPU:
-
Поддержка аппаратного ускорения: Вы уже используете
-init_hw_device d3d11va
иh264_nvenc
, что позволяет эффективно использовать ваш GPU (RTX 3050) для кодирования видео, освобождая CPU от лишней нагрузки. Это отличный выбор для достижения высокого качества записи без пропуска кадров. -
Запись звука: Чтобы записать звук одновременно с видео, вам необходимо добавить подходящий аудио-вход в вашу команду FFmpeg. Использование
dshow
на Windows является правильным подходом для захвата звука. -
Пример команды:
ffmpeg -y -fflags +genpts -init_hw_device d3d11va -filter_complex "ddagrab=0:framerate=60:video_size=3840x2160" \ -c:v h264_nvenc -f dshow -i audio="Ваш источник аудио" \ -c:a aac -b:a 192k -shortest -f mp4 "one_video.mp4"
В этом примере:
-c:a aac -b:a 192k
используется для кодирования аудио с применением кодека AAC с битрейтом 192 кбит/с, который оптимизирован для большинства игровых записей.-shortest
гарантирует, что видео не будет длиннее самого короткого потока из видео или аудио, что может помочь избежать проблем с синхронизацией.
-
Поиск источника аудио: Чтобы определить правильный источник аудио для использования с
-i audio="Ваш источник аудио"
, вы можете выполнитьffmpeg -list_devices true -f dshow -i dummy
для получения списка всех доступных аудио входов. -
Синхронизация и тестирование: Протестируйте получившийся файл
one_video.mp4
, чтобы убедиться в отсутствии рассинхронизации между видео и аудио. При необходимости можно отрегулировать параметры битрейта или попробовать другие источники аудио, чтобы добиться наилучшего результата.
Следование этим шагам позволит вам эффективно записать высококачественное видео и звук с минимальной нагрузкой на процессор, используя возможности вашей видеокарты NVIDIA и операционной системы Windows 11 Pro.