使用Pytube下载720P MP4视频遇无声音问题求助
解决YouTube视频下载后无声音的问题
嘿,这个问题我之前折腾过,其实核心原因是YouTube的视频流传输机制在搞鬼~
为什么筛选720p会没声音?
YouTube为了优化加载速度和带宽利用,把视频流分成了两种类型:
- 渐进式流(Progressive Streams):音视频合并在同一个文件里,这种流通常只支持360p、480p这类低分辨率,下载后直接就能正常播放带声音。
- 自适应流(Adaptive Streams):视频和音频被拆成了独立的轨道,720p及以上的高分辨率视频基本都用这种方式传输。你代码里指定的
res="720p", mime_type="video/mp4",刚好选中了自适应流里的纯视频轨道——它只包含画面,完全不带音频数据,所以下载后自然没声音。
而当你移除筛选条件时,streams.first()默认会返回第一个可用的渐进式流(带音视频),所以播放起来就正常有声音啦。
怎么下载带声音的720p视频?
要拿到带声音的720p视频,我们需要分别下载对应的视频流和音频流,然后把它们合并成一个完整的文件。这里推荐用ffmpeg来完成合并(得先安装ffmpeg并添加到系统环境变量里哦)。
给你修改好的代码示例:
from pytube import YouTube import subprocess import os # 你的视频链接列表 video_links = [ "https://www.youtube.com/watch?v=Rb9CjDjqNC4", "https://www.youtube.com/watch?v=pmmKCDvsFy8", "https://www.youtube.com/watch?v=erN1_QVCCM8", "https://www.youtube.com/watch?v=fjzM3NbgGzE", "https://www.youtube.com/watch?v=JWBiY29GqRs", "https://www.youtube.com/watch?v=vp7zMFrHkmA" ] for link in video_links: yt = YouTube(link) print(f"正在处理视频: {link}") # 下载720p的纯视频流 video_stream = yt.streams.filter(res="720p", mime_type="video/mp4").first() temp_video = video_stream.download(filename_prefix="temp_video_") # 下载最高质量的音频流 audio_stream = yt.streams.filter(only_audio=True).order_by("abr").desc().first() temp_audio = audio_stream.download(filename_prefix="temp_audio_") # 用ffmpeg合并音视频 final_filename = f"{yt.title}_720p.mp4" subprocess.run([ "ffmpeg", "-i", temp_video, "-i", temp_audio, "-c:v", "copy", # 直接复制视频编码,不重新压缩 "-c:a", "aac", # 确保音频编码兼容 final_filename ]) # 删除临时文件 os.remove(temp_video) os.remove(temp_audio) print(f"完成!已保存为: {final_filename}\n")
补充小技巧
如果对分辨率没那么严格,也可以直接下载带音视频的渐进式流,省掉合并步骤:
yt.streams.filter(progressive=True, file_extension="mp4").order_by("resolution").desc().first().download()
这种方式会自动选最高分辨率的渐进式流(一般是480p),下载后直接就能用。
内容的提问来源于stack exchange,提问作者Dejan Dozet
相关产品推荐
相关产品推荐

