Есть ли быстрый способ объединить mp3-файл с mp4-файлом в python? - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь написать программу, которая может загружать видео с постов Reddit. Я считаю, что Reddit хранит аудио и видео для каждого поста отдельно, поэтому в настоящее время я скачиваю mp3 и mp4, а затем объединяю их для создания окончательного видеофайла. Я не очень знаком с аудио или видео файлами или с тем, как они хранятся, но я подумал, что объединение этих двух будет быстрым для вычисления.

Однако, объединяющая часть очень медленная, и мне было интересно есть ли более быстрый способ объединения беззвучного видеоклипа с аудиофайлом и записи его на мой привод?

В настоящее время я использую библиотеку moviepy для объединения.

def download_video(data_url,current_post,subreddit):
    #Get the audio url of Reddit video
    audioURL = data_url + "/audio"
    #Get the soundless video url of reddit video
    videoURL = str(current_post).split("'fallback_url': '")[1].split("'")[0]
    #Get the title of the post
    postname = (current_post['title'])

    #Download the two files as mp4 and mp3
    urllib.request.urlretrieve(videoURL, subreddit + '/video_name.mp4')
    urllib.request.urlretrieve(audioURL, subreddit + '/audio.mp3')

    #Combine the mp3 and mp4
    videoName = str(subreddit + "/" + get_valid_filename(current_post['title'])) +".mp4"
    video = mpe.VideoFileClip(subreddit + '/video_name.mp4')
    video.write_videofile(videoName, audio=subreddit + "/audio.mp3")
    #Remove video file with no audio
    del video
    os.remove(subreddit + '/video_name.mp4')

1 Ответ

1 голос
/ 16 марта 2020

Вы можете попробовать использовать один из существующих инструментов с открытым исходным кодом, который достигает этого, например youtube-dl (который загружает гораздо больше, чем предполагает его название). предыдущий SO-поток уже рассмотрел, как это сделать из Python, и я только что проверил его как по ссылкам потоков, так и по ссылкам v.redd.it, и у него не было проблем с .

import youtube_dl

ydl = youtube_dl.YoutubeDL()
with ydl:
    ydl.extract_info("https://www.reddit.com/r/bouldering/comments/fjgmo7/one_of_my_favorite_boulders_from_my_gym_back_home/")

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

...