我正在尝试编写一个程序,可以从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')
您可以尝试使用现有的开源工具之一来实现此目的,例如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/")
如果这样做可以提高性能,但是您不希望使用该库,则可以检查其来源,以了解他们如何进行视频和音频合并。
我已经尝试过了,但是却收到错误消息:'警告:您请求了多种格式,但未安装ffmpeg或avconv。格式不会合并。”
安装ffmpeg(或avconv,但是我有ffmpeg进行测试,所以我知道可以使用)
我已经在我的python库'pip install ffmpeg-python'中安装了ffmpeg,所以我很困惑。
我相信youtube-dl直接调用ffmpeg,因此您需要二进制文件(即直接从网站安装的ffmpeg)。它不需要ffmpeg-python(我没有安装它,这不是问题)。
我已经从网站上下载了该文件夹,将其解压缩并放入与我的python代码相同的文件夹中,但是仍然无法正常工作。