通过pytube模块和FFmpeg实现自动爬取youtube上的视频和音频并自动拼接
一.安装pytube模块
登录此链接下载:https://pypi.org/project/pytube/#files
下载完成后放入Python解释器的script文件夹下,然后进入CMD执行pip install 模块名
二.安装ffmpeg
登录官网:http://ffmpeg.org/
选择需要的版本
下载圈出来的这个版本
将解压后得到的以下几个文件放置在 E:\FFmpeg 下
环境变量
此电脑--属性--高级系统设置--环境变量
在系统变量(也就是下面那一半)处找到新建,按如下所示的方法填写
再将 %FFMPEG_HOME% 以及 %FFMPEG_HOME%\bin 写入系统变量的Path中
然后一路确定即可
验证
win+R,cmd
输入 ffmpeg
三.ffmpeg在Python中的使用
重点重点!
重点重点!
重点重点!
重要的事情要说三遍,这边需要注意,不然很可能你会一直拼接失败却找不到原因。
# {video}是要拼接的视频路径,{audio}是要拼接的音频路径,这里我直接用格式化字符串来传值了。
# 由于该命令需要被传入cmd命令窗,所以路径务必加上双引号,以免程序识别不出来
# 某些特殊字符在CMD里是直接被移除的,例如‘/’,所以我们需要在格式化字符串的时候移除指定的那几个特殊字符。
f'ffmpeg -i "{video}" -i "{audio}" -c:v copy -c:a aac -strict -2 "{outer_path}"'.replace('/','')
#主程序start.py
import os,re,subprocess
import sys
import setting
from pytube import YouTube
from threading import Thread
BATH_PATH=os.path.dirname(__file__)
sys.path.append(BATH_PATH)
link = input('请输入YouTube视频链接:').strip()
yt_name = YouTube(link).title # 获取视频名(不带后缀格式名)
yt = YouTube(link).streams
def youtube_v():
if not os.path.exists(setting.VIDEO_PATH) : #判断下载目录是否存在
os.mkdir(setting.VIDEO_PATH)
title_v=yt.get_by_itag(137).download(setting.VIDEO_PATH).title() #下载并返回视频名(带后缀格式名)
# 下载之前先看视频源有哪几种清晰度 1080p 选137 | 1080p 60fps 选299
return title_v
def youtube_a():
if not os.path.exists(setting.AUDIO_PATH) : #判断下载目录是否存在
os.mkdir(setting.AUDIO_PATH)
title_a=yt.get_by_itag(251).download(setting.AUDIO_PATH).title()
# 音频251默认160kbps
return title_a
def video_add_mp4(video, audio, outer_path):
order = f'ffmpeg -i "{video}" -i "{audio}" -c:v copy -c:a aac -strict -2 "{outer_path}"' # 拼接系统命令用于执行ffmpeg程序
print(order)
os.system(order)
subprocess.Popen(order, shell=True) # 执行ffmpeg
subprocess.Popen('explorer %s'%setting.OUTER_PATH, shell=True) # 打开合成目录
subprocess.Popen('explorer %s'%c, shell=True) # 打开合成后的视频
if __name__ == '__main__':
t = Thread(target=youtube_v)
t2 = Thread(target=youtube_a)
t.start()
t2.start()
t2.join()
print('音频下载成功')
t.join()
print('视频下载成功')
a = youtube_v() # 视频
b = youtube_a() # 音频
outer_name=f'{yt_name}.mp4'
re_c=re.sub(r'[/*?"<>|]','',outer_name ) # 过滤文件名中不允许出现的几个字符
c = os.path.join(setting.OUTER_PATH, re_c)
video_add_mp4(a,b,c)
----setting.py
import os import re BASE_PATH=re.sub(r'[/]',r'\\',os.path.dirname(__file__ )) VIDEO_PATH=os.path.join(BASE_PATH,'video') OUTER_PATH=os.path.join(BASE_PATH,'outer') AUDIO_PATH=os.path.join(BASE_PATH,'audio')
get_by_itag()括号内对应数字如下:
作者链接:https://blog.csdn.net/hezhefly/article/details/102531398
itag Code Container Content Resolution Bitrate Range VR / 3D 5 flv audio/video 240p - - - 6 flv audio/video 270p - - - 17 3gp audio/video 144p - - - 18 mp4 audio/video 360p - - - 22 mp4 audio/video 720p - - - 34 flv audio/video 360p - - - 35 flv audio/video 480p - - - 36 3gp audio/video 180p - - - 37 mp4 audio/video 1080p - - - 38 mp4 audio/video 3072p - - - 43 webm audio/video 360p - - - 44 webm audio/video 480p - - - 45 webm audio/video 720p - - - 46 webm audio/video 1080p - - - 82 mp4 audio/video 360p - - 3D 83 mp4 audio/video 480p - - 3D 84 mp4 audio/video 720p - - 3D 85 mp4 audio/video 1080p - - 3D 92 hls audio/video 240p - - 3D 93 hls audio/video 360p - - 3D 94 hls audio/video 480p - - 3D 95 hls audio/video 720p - - 3D 96 hls audio/video 1080p - - - 100 webm audio/video 360p - - 3D 101 webm audio/video 480p - - 3D 102 webm audio/video 720p - - 3D 132 hls audio/video 240p - - 133 mp4 video 240p - - 134 mp4 video 360p - - 135 mp4 video 480p - - 136 mp4 video 720p - - 137 mp4 video 1080p - - 138 mp4 video 2160p60 - - 139 m4a audio - 48k - 140 m4a audio - 128k - 141 m4a audio - 256k - 151 hls audio/video 72p - - 160 mp4 video 144p - - 167 webm video 360p - - 168 webm video 480p - - 169 webm video 1080p - - 171 webm audio - 128k - 218 webm video 480p - - 219 webm video 144p - - 242 webm video 240p - - 243 webm video 360p - - 244 webm video 480p - - 245 webm video 480p - - 246 webm video 480p - - 247 webm video 720p - - 248 webm video 1080p - - 249 webm audio - 50k - 250 webm audio - 70k - 251 webm audio - 160k - 264 mp4 video 1440p - - 266 mp4 video 2160p60 - - 271 webm video 1440p - - 272 webm video 4320p - - 278 webm video 144p - - 298 mp4 video 720p60 - - 299 mp4 video 1080p60 - - 302 webm video 720p60 - - 303 webm video 1080p60 - - 308 webm video 1440p60 - - 313 webm video 2160p - - 315 webm video 2160p60 - - 330 webm video 144p60 - hdr 331 webm video 240p60 - hdr 332 webm video 360p60 - hdr 333 webm video 480p60 - hdr 334 webm video 720p60 - hdr 335 webm video 1080p60 - hdr 336 webm video 1440p60 - hdr 337 webm video 2160p60 - hdr 394 mp4 video 144p - - 395 mp4 video 240p - - 396 mp4 video 360p - - 397 mp4 video 480p - - 398 mp4 video 720p - - 399 mp4 video 1080p - - 400 mp4 video 1440p - - 401 mp4 video 2160p - - 402 mp4 video 2880p - -
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现