pytube(python)视频在几秒钟后停止播放视频



我一直在使用pytube创建我的youtube视频下载器,在视频下载和编译完成并播放后,它只播放几秒钟,然后只显示静止图像,而音频在后台中继续

这些是文件"中的函数;模块.py";

import pytube
from moviepy.editor import *
import os.path
def video(link):
yt = pytube.YouTube(link)
streamlist = []
for stream in yt.streams.filter():
streamlist.append(stream)
finalstreamlist = []
for i in streamlist:
if i.resolution == "1080p" and i.mime_type == "video/mp4":
finalstreamlist.append(i)
stream = yt.streams.get_by_itag(finalstreamlist[0].itag)
stream.download(r"C:UserspcPycharmProjectsyoutube")
return [stream.title, yt.length]
def audio(link):
yt = pytube.YouTube(link)
streamlist = []
for stream in yt.streams.filter():
streamlist.append(stream)
finalstreamlist = []
for i in streamlist:
if i.mime_type == "audio/mp4":
finalstreamlist.append(i)
stream = yt.streams.get_by_itag(finalstreamlist[0].itag)
stream.download(r"C:UserspcPycharmProjectsyoutube", "Audio.mp4")
return ["Audio.mp4",yt.length]

def mixer(video,audio,title):
videoclip = VideoFileClip(video)
audioclip = AudioFileClip(audio)
videoclip2 = videoclip.set_audio(audioclip)
videoclip2.write_videofile(title)

这就是";main.py";文件:

from modules import *
import time
link = "https://www.youtube.com/watch?v=CLk7A7HXhYQ"
vtitle = video(link)[0] + ".mp4"
atitle = audio(link)[0]
print("Files Downloaded")
time.sleep(1)
print("Compiling")
mixer(vtitle,atitle,vtitle)
print("FileDone")

我试过你的代码,它正确地下载了视频文件,但问题是当它混合视频和音频时。

我认为问题在于它编写的新视频与原始视频同名——可能它不会将旧视频加载到内存中,但它一直从文件中读取——这会产生冲突。

我认为你应该用新的(临时(文件名编写新的视频,然后将其重命名为预期的名称。或者您应该下载带有临时名称(即video.mp4(的视频


我用于测试的代码

import pytube
from moviepy.editor import *
import os
BASE = os.path.dirname(os.path.abspath(__file__))
def video(link):
yt = pytube.YouTube(link)

finalstreamlist = yt.streams.filter(resolution='1080p', mime_type='video/mp4')

itag = finalstreamlist[0].itag
print('video itag:', itag)

stream = yt.streams.get_by_itag(itag)
stream.download(os.path.join(BASE, 'youtube'), 'video.mp4')
return [os.path.join(BASE, 'youtube/video.mp4'), stream.title, yt.length]
def audio(link):
yt = pytube.YouTube(link)

finalstreamlist = yt.streams.filter(mime_type='video/mp4')

itag = finalstreamlist[0].itag
print('audio itag:', itag)

stream = yt.streams.get_by_itag(itag)
stream.download(os.path.join(BASE, 'youtube'), 'audio.mp4')

return [os.path.join(BASE, 'youtube/audio.mp4'), stream.title, yt.length]
def mixer(video, audio, title):
videoclip = VideoFileClip(video)
audioclip = AudioFileClip(audio)
new_videoclip = videoclip.set_audio(audioclip)
new_videoclip.write_videofile(title)
# --- main ---
link = 'https://www.youtube.com/watch?v=CLk7A7HXhYQ'
print('Downloading')
v = video(link)
a = audio(link)
print('Downloaded')
print('Compiling')
output = os.path.join(BASE, v[1] + '.mp4')
mixer(v[0], a[0], output)
print('Compilied')

最新更新