Для выполнения ffmpeg
с Python вы можете использовать subprocess
:
import subprocess as sp
sp.run('ffmpeg -y -i /content/input.mp4 -i audio.wav -c:v copy -c:a copy output.mp4')
Проверить преобразование в командной строке ffmpeg
(в консоли) перед использованием Python и проверить там нет ошибок.
В большинстве случаев вы не можете сохранить аудиокод c (используя -c:a copy
) с файлом .wav
в качестве входных данных и сохранить результат в .mp4
видеофайле.
Я получаю следующее сообщение об ошибке:
[mp4 @ 000001d150ea6780] Не удалось найти тег для кода c pcm_s16le в потоке # 1, код c в настоящее время не поддерживается в контейнере Не удалось записать заголовок для выходного файла # 0 (неверный код c параметры?): неверный аргумент
В случае ошибки используйте: -c:a aac
.
Использование -c:a copy
работает, когда код c файла wav
, например, ac3 (но это редкий случай).
Тестирование решения путем генерации синтетических c входных аудио- и видеофайлов:
import subprocess as sp
sp.run('ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=30 -vcodec libx264 -pix_fmt yuv420p -t 5 input1.mp4')
sp.run('ffmpeg -y -f lavfi -i sine=frequency=400 -acodec ac3 -ar 22050 -t 5 audio1.wav')
sp.run('ffmpeg -y -i input1.mp4 -i audio1.wav -c:v copy -c:a copy output1.mp4')
Приведенный выше код работает, поскольку я выбрал ac3
code c для audio1.wav
.