Нет звука при добавлении MP3 в VideoFileClip MoviePy

Я пытаюсь добавить аудиофайл mp3 в видеоклип, который я создаю из изображений с помощью MoviePy. Когда скрипт запускается, он создает файл mp4 и успешно воспроизводится, однако звука нет. Я не совсем уверен, почему, и не могу найти тонну документации по этому поводу в целом. MoviePy довольно нов для меня, поэтому любая помощь будет оценена по достоинству - спасибо!

def make_video(images):
    image_clips = []
    for img in images:
        if not os.path.exists(img):
            raise FileNotFoundError(img)
        ic = ImageClip(img).set_duration(3)
        image_clips.append(ic)

    video = concatenate(image_clips, method="compose")
    video.set_audio(AudioFileClip("audio.mp3")) 
    video.write_videofile("mp4_with_audio.mp4", fps=60, codec="mpeg4")

person damaniel    schedule 06.11.2016    source источник


Ответы (5)


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

Линия:

video.set_audio(AudioFileClip("audio.mp3")) 

на самом деле не изменяет звуковую дорожку объекта «видео», а возвращает копию объекта с присоединенным к нему новым AudioFileClip.

Это означает, что метод:

video.write_videofile("mp4_with_audio.mp4", fps=60, codec="mpeg4")

не записывает окончательный файл с новой звуковой дорожкой, так как объект "видео" остается неизменным.

Изменение сценария, как показано ниже, решило проблему для меня.

video_with_new_audio = video.set_audio(AudioFileClip("audio.mp3")) 
video_with_new_audio.write_videofile("mp4_with_audio.mp4", fps=60, codec="mpeg4")

См. также документацию.

person Gustav    schedule 24.04.2018
comment
Я не уверен, чем это отличается от того, что я задал в своем вопросе. Я думаю, что ответ может заключаться в том, что оба файла должны быть одинаковой длины. Это то, что сработало для меня в любом случае, а не то, что вы предлагаете выше. - person damaniel; 09.01.2019

Это сработало для меня:

clip.write_videofile(out_path, 
                     codec='libx264', 
                     audio_codec='aac', 
                     temp_audiofile='temp-audio.m4a', 
                     remove_temp=True
                     )

Нашел здесь: https://github.com/Zulko/moviepy/issues/51

person racket99    schedule 06.12.2018

Проверьте видео mp4_with_audio.mp4 с помощью VLC media player, у меня такая же проблема с быстрым проигрывателем.

person danishshres    schedule 14.11.2016
comment
VLC Player также воспроизводит его без звука. - person damaniel; 19.11.2016

Я тоже сталкиваюсь с этой проблемой. Я нашел решение, попробуйте

video = video.set_audio(AudioFileClip("audio.mp3"))
person MrMagix    schedule 21.11.2016
comment
Я пробовал это раньше, и я просто сделал это снова для проверки работоспособности. Та же проблема, нет звука. Я начинаю думать, что добавление звука, подобного этому, не так просто, как утверждается в документе moviepy. Я предполагаю, что файл, возможно, нужно отформатировать в wav или что-то в этом роде, кодеки должны быть изменены, время должно быть точно таким же и т. д. установить правильно. Я действительно новичок в таких аудио/видео технологиях; это действительно неизведанная территория для меня. Я надеялся, что это будет простой скрипт. - person damaniel; 22.11.2016
comment
И я только месяц назад начал программировать на Python... :) - person MrMagix; 24.11.2016
comment
Это рабочий код. Это немного неаккуратно и плохо структурировано, но именно так я заставил работать moviepy. Взгляните на строки 51 и 93. github.com/JSchwehn/FeedToYoutube/blob /master/videoCreator.py - person MrMagix; 24.11.2016
comment
Я действительно заставил его работать после просмотра вашего кода. Я не совсем уверен, что это было, но как только я начал обрезать аудиофайл, чтобы он соответствовал длине видео, все стало работать правильно. Спасибо за вашу помощь! - person damaniel; 26.11.2016

Я делал что-то подобное и обнаружил, что moviepy 1.0.1 не вызывает ffmpeg с правильными аргументами для объединения видео и аудио для видео в формате mp4. Я решил это с помощью обходного пути, используя ffmpeg напрямую. Он использует временный аудиофайл и видеофайл из moviepy для создания окончательного файла. Это аналогичный вопрос: Выходное видео не имеет звука Поскольку вы работая с mp3, вам может понадобиться преобразовать ffmpeg в aac, поэтому этот код делает это.

Эта ссылка помогла мне с ffmpeg: https://superuser.com/questions/277642/how-to-merge-audio-and-video-file-in-ffmpeg

video_with_new_audio = video.set_audio(AudioFileClip("audio.mp3")) 
video_with_new_audio.write_videofile("temp_moviepy.mp4", temp_audiofile="tempaudio.m4a",codec="libx264",remove_temp=False,audio_codec='aac')

import subprocess as sp

command = ['ffmpeg',
           '-y', #approve output file overwite
           '-i', "temp_moviepy.mp4",
           '-i', "tempaudio.m4a",
           '-c:v', 'copy',
           '-c:a', 'aac', #to convert mp3 to aac
           '-shortest', 
           "mp4_with_audio.mp4" ]

with open(ffmpeg_log, 'w') as f:
    process = sp.Popen(command, stderr=f)
person Filip Mulier    schedule 19.07.2020