问题描述
问题说明:从 YouTube 链接列表中下载 1080p 的某个 YouTube 视频剪辑
所以我尝试了 PyTube
库,但它似乎不支持下载视频的某个片段。
有一个 question 大致相同,其答案支持在视频中进行后期处理以将其剪掉,但我只想下载该特定剪辑而不是整个视频。虽然我正在寻找一个支持从一组链接下载多个视频的选项。
下面是我使用的代码。
import time
import pytube
import os
from pytube import YouTube
YouTubeIDs = ['QC8iQqtG0hg']
StartSeg = [2]
EndSeg = [3]
for i in range(len(YouTubeIDs)):
print(f'Downloading Video {i} with ID {YouTubeIDs[i]}')
ID = YouTubeIDs[i]
StartSegment = StartSeg[i]
EndSegment = EndSeg[i]
YTLink = f'https://www.youtube.com/embed/{ID}?start={StartSegment}&end={EndSegment}'
print(f'Link to the YouTube Video - {YTLink}')
time.sleep(2)
yt = YouTube(YTLink)
yt.streams.filter(res="720p").first().download()
os.rename(yt.streams.filter(res="720p").first().download(),f'YouTube_{i}.mp4')
print(f'Finished Downloading Video {i},renamed as YouTube_{i}.mp4')
使用 youtube-dl
尝试了另一种方法,但没有奏效,因为下载的视频大小为 0 KB。即使在 os 导入之后,我也在 python 环境中尝试过,但它给出了同样的错误,我非常喜欢 Python 实现,除非非常必要,否则不要使用 bash 脚本。
%%bash
ffmpeg $(youtube-dl -g 'https://www.youtube.com/watch?v=NnW5EjwtE2U' | sed "s/.*/-ss 10 -i &/") -t 60 -c copy test3.mp4
旁注:这个想法是能够从大约 260 万个链接的 CSV 文件中下载 YouTube 视频的特定片段(大约 5-6 秒)。 CSV 文件包含 ['YouTube ID'、'开始片段'、'结束片段']
等列如果能得到同样的帮助,将不胜感激。 如果我需要进一步澄清,请告诉我。 谢谢。
解决方法
我有一些不同的东西给你,但我认为它会帮助你! pip 安装 pytube
from pytube import YouTube
yt = YouTube("https://www.youtube.com/watch?v=n06H7OcPd-g")
yt = yt.get('mp4','720p')
yt.download('/path/to/download/directory')
,
这是我使用 youtube-dl
的版本,不确定它是否适用于您的上下文,并且它是在不使用批处理脚本的情况下完成的。
def get_youtube_video(url):
ydl_opts = {'cachedir': False}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])