Как объединить видео и аудио файлы в ffmpeg-python

#python #audio #video #ffmpeg

#python #ffmpeg #ffmpeg-python

Вопрос:

Я пытаюсь объединить видео (без звука) и его отдельный аудиофайл

Я пробовал ffmpeg ffmpeg -i video.mp4 -i audio.mp4 -c copy output.mp4 , и он работает нормально.

я пытаюсь добиться того же результата из ffmpeg-python, но безуспешно. Любая помощь о том, как это сделать?

Ответ №1:

У меня была такая же проблема.

Вот код python после того, как у вас есть pip install ffmpeg-python в вашей среде:

 import ffmpeg

input_video = ffmpeg.input('./test/test_video.webm')

input_audio = ffmpeg.input('./test/test_audio.webm')

ffmpeg.concat(input_video, input_audio, v=1, a=1).output('./processed_folder/finished_video.mp4').run()

 

v=1 :
Установите количество выходных видеопотоков, то есть также количество видеопотоков в каждом сегменте. Значение по умолчанию равно 1.

a=1 : Установите количество выходных аудиопотоков, то есть также количество аудиопотоков в каждом сегменте. Значение по умолчанию равно 0.

Для получения подробной ffmpeg.concat информации ознакомьтесь с: https://ffmpeg.org/ffmpeg-filters.html#concat .

Вы можете ознакомиться с другими примерами здесь: https://github.com/kkroening/ffmpeg-python/issues/281

Надеюсь, это поможет!

PS. Если вы используете macOS и у вас ошибка: FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg' во время выполнения кода, только brew install ffmpeg в вашем терминале.

Комментарии:

1. спасибо, это мне очень помогло. можете ли вы также написать, скажите мне метод, чтобы после завершения слияния видео и аудиофайлов он удалял исходные видео и аудиофайлы из каталога. пожалуйста, помогите мне.

Ответ №2:

Вы могли бы использовать подпроцесс:

 import subprocess    
subprocess.run("ffmpeg -i video.mp4 -i audio.mp4 -c copy output.mp4")
 

Вы также можете использовать fstrings для использования имен переменных в качестве входных данных:

 videofile = "video.mp4"
audiofile = "audio.mp4"
outputfile = "output.mp4"
codec = "copy"
subprocess.run(f"ffmpeg -i {videofile} -i {audiofile} -c {codec} {outputfile}")
 

Комментарии:

1. Добро пожаловать в Stack Overflow! Это не то, о чем просит человек. Он знает, как использовать «ffmpeg» для объединения аудио с видео, но он хочет использовать пакет «ffmpeg-python» для объединения аудио с видео.

Ответ №3:

 import ffmpeg
input_video = ffmpeg.input("../resources/video_with_audio.mp4")
added_audio = ffmpeg.input("../resources/dance_beat.ogg").audio.filter('adelay', "1500|1500")
merged_audio = ffmpeg.filter([input_video.audio, added_audio], 'amix')
(ffmpeg
.concat(input_video, merged_audio, v=1, a=1)
.output("mix_delayed_audio.mp4")
.run(overwrite_output=True))
 

вы можете просмотреть эту ссылку https://github.com/kkroening/ffmpeg-python/issues/281#issuecomment-546724993

Комментарии:

1. Я получаю эту ошибку: ValueError: Encountered atempo(2) <721e83834c8e> with multiple outgoing edges with same upstream label None; a возможно, требуется разделить `фильтр`

Ответ №4:

Добавлен следующий код: https://github.com/russellstrei/combineViaFFMPEG

Он проходит по каталогу, находит файлы «.mp4», добавляет их в файл, который будет использоваться ffmpeg , затем выполняет команду.

 for name in glob.glob(directory  "\"  '*.mp4'):
    print(name)
    file1 = open(processList, "a")  # append mode
    file1.write("file '"   name   "'n")
    file1.close()
    execute()

def execute():
    cmd = "ffmpeg -f concat -safe 0 -i "   processList   " -c copy "  dir   "output.mp4"
    os.system(cmd)