如何使用 PyTube 下载没有音频的 youtube 视频(mp4,质量好)

How to download a youtube video without audio with PyTube (mp4, good quality)

我已经对此进行故障排除一两个小时了,有时会使用 streams.filter() 方法猜测某些参数及其值。我想获取一个没有附加音频的 mp4 视频。你会认为这可能很容易,但事实并非如此,至少对我而言。

The streams filter parameters, 列出并展示了一些突出我想要实现的目标。 only_videomime_type,或者 resfps。您可以阅读他们的描述以了解他们将做什么。

现在,一起应用参数基本上意味着您很好,正在根据您的过滤器过滤可用选项。如果您愿意,选项将指定上述对象以及更多内容,因为它是自己的下载预设。要实际选择一个,you can use first()last()get_highest_resolution() 等,以决定您想要的下载。

我已经尝试了上面列出的几个参数,以获得一个不超过 5 秒的无声视频:

yt = YouTube(query)
t = yt.streams.filter(only_video=True).first()
print(t)
t.download(self.path, filename_prefix="Scout_")

有了这个输出,它看起来很有希望,但是,使用 first() 很常见,建议完成工作。如前所述,“此查询的第一个结果”。我需要调高顺序,所以我尝试使用 last() 代替,它起作用了。但是,它是一个 140p 的 webm 文件。在摸索了这个代码结构之后,我正在修改它,看看我是否可以在没有声音的情况下获得质量好的 mp4,而我现在遇到了一些麻烦,这让我写了这个 post.

是的,我正在打印 stream/query 结果,我正在使用我的参数来查看我的选项。我真的需要对此有一些了解,我是应该用 pytube 解决这个问题,还是默认使用 ffmpeg。我不想挑剔,但如果可能并且不是完全不敬,我想使用 pytube 本身获得这个无音频文件。

关于如何实现这一目标的任何想法!

回答或解释

再摆弄一下。使用 only_video=True 似乎与某些吸引人的方法不兼容,以包含一个好的视频。但是,到目前为止,似乎只使用 pytube,您可以获得 完整长度的视频,它没有损坏,但只有 360p。

t = yt.streams.filter(only_video=True).get_by_itag(itag=134)
print(t)
t.download(self.path, filename_prefix="Scout_")

这需要一个 itag(我相信它不会因任何人和视频而改变),即 360p 的无声视频。我尝试转到 480p 及以上并获得了 5 秒的视频。我在这里打印了那个列表。

t = yt.streams.filter(only_video=True).all()
print(t)

我暂时坚持这个方法,以后会遇到更好的方法。希望这对任何人都有帮助!