有没有一种快速的方法可以将 mp3 文件与 python 中的 mp4 文件结合起来?
Posted
技术标签:
【中文标题】有没有一种快速的方法可以将 mp3 文件与 python 中的 mp4 文件结合起来?【英文标题】:Is there a fast way to combine an mp3 file with an mp4 file in python? 【发布时间】:2020-06-27 13:18:36 【问题描述】:我正在尝试编写一个可以从 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】:您可以尝试使用实现此目的的现有开源工具之一,例如 youtube-dl(它的下载量远远超过其名称所暗示的内容)。 previous SO thread 已经介绍了如何在 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/")
如果这提高了性能,但您不想使用该库,您可以查看他们的源代码,看看他们是如何进行视频和音频组合的。
【讨论】:
我已经尝试过了,但我收到错误:'警告:您请求了多种格式,但未安装 ffmpeg 或 avconv。格式不会被合并。' 安装 ffmpeg(或 avconv,但我有 ffmpeg 用于我的测试,所以我知道它有效) 我的 python 库 'pip install ffmpeg-python' 中已经安装了 ffmpeg,所以我很困惑。 我相信 youtube-dl 直接调用 ffmpeg,所以你需要二进制文件(即直接从网站安装的 ffmpeg)。它不需要 ffmpeg-python(我没有安装它,这不是问题)。 我已经从网站上下载了这个文件夹,解压后把它和我的python代码放在同一个文件夹里,但是还是不行。以上是关于有没有一种快速的方法可以将 mp3 文件与 python 中的 mp4 文件结合起来?的主要内容,如果未能解决你的问题,请参考以下文章