#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)