如何使用Instaloader下载带音频的Instagram短视频(Reels)?
解决Instaloader下载Instagram Reels无音频的问题
一、修复Instaloader的下载问题
登录Instagram账号:Instagram对未登录用户的媒体资源访问有限制,多数带音频的Reels需要登录才能获取完整资源。添加登录逻辑即可解决大部分无音频问题:
import instaloader L = instaloader.Instaloader() # 方式1:从保存的会话文件登录(推荐,避免重复输入密码) L.load_session_from_file("你的Instagram用户名") # 方式2:直接输入账号密码登录 # L.login("你的用户名", "你的密码") post = instaloader.Post.from_shortcode(L.context, "SHORTCODE") L.download_post(post, target=post.owner_username)登录后重新运行代码,一般就能下载到带音频的完整视频。
手动合并视频与音频(登录后仍无效时):部分Reels的视频和音频文件是分开存储的,Instaloader可能未自动合并。可以手动提取两者URL,下载后用FFmpeg合并:
import requests import instaloader import subprocess L = instaloader.Instaloader() L.load_session_from_file("你的用户名") post = instaloader.Post.from_shortcode(L.context, "SHORTCODE") # 下载视频文件 video_url = post.video_url video_path = f"{post.owner_username}_video.mp4" with open(video_path, "wb") as f: f.write(requests.get(video_url).content) # 下载并合并音频(如果存在) if hasattr(post, 'audio_url'): audio_url = post.audio_url audio_path = f"{post.owner_username}_audio.mp3" with open(audio_path, "wb") as f: f.write(requests.get(audio_url).content) # 用FFmpeg合并(需提前安装FFmpeg并添加到系统环境变量) output_path = f"{post.owner_username}_reel.mp4" subprocess.run([ "ffmpeg", "-i", video_path, "-i", audio_path, "-c:v", "copy", "-c:a", "aac", output_path ])
二、替代库推荐:Instagrapi
如果Instaloader的方案仍不满足需求,可以试试Instagrapi——这个库对Reels的支持更完善,默认就能下载带音频的完整视频:
from instagrapi import Client cl = Client() # 登录账号 cl.login("你的用户名", "你的密码") # 通过shortcode获取并下载Reels media_pk = cl.media_pk_from_shortcode("SHORTCODE") cl.video_download(media_pk, filename=f"reel_{media_pk}.mp4")
内容的提问来源于stack exchange,提问作者ypendi
相关产品推荐
相关产品推荐

