如何让ffmpeg/youtube-dl自动为后续请求附加URL查询参数?
解决ffmpeg/youtube-dl下载HLS视频时分片请求403的问题
针对ffmpeg的解决方案
问题根源是ffmpeg请求分片时未携带主URL中的cred=abcd查询参数,导致服务器返回403,可通过以下两种方式解决:
方法1:自动附加查询参数
用-http_opts的customize_url选项修改每个请求的URL,自动给分片地址追加所需参数:
ffmpeg -http_opts "customize_url:%0?cred=abcd" -i 'https://example.com/playlist.m3u8?cred=abcd' -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4
其中%0代表原始请求URL,执行后所有分片请求都会自动带上?cred=abcd参数。
方法2:手动修改m3u8后下载
- 先下载原始m3u8文件:
curl 'https://example.com/playlist.m3u8?cred=abcd' > playlist.m3u8
- 编辑
playlist.m3u8,将所有分片地址(如s2q1.m4s)修改为带参数的完整URL(https://example.com/s2q1.m4s?cred=abcd) - 用ffmpeg读取本地修改后的文件:
ffmpeg -i playlist.m3u8 -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4
针对youtube-dl的解决方案
youtube-dl处理HLS分片时同样不会自动继承主URL的查询参数,可按以下方式处理:
方法1:通过Referer头绕过验证(部分服务器有效)
若服务器验证请求的Referer,可将带参数的主URL设置为Referer:
youtube-dl --add-header "Referer:https://example.com/playlist.m3u8?cred=abcd" 'https://example.com/playlist.m3u8?cred=abcd'
方法2:修改本地m3u8后下载
和ffmpeg的方法2步骤一致:
- 下载并修改m3u8文件,给每个分片地址加上查询参数
- 使用youtube-dl下载本地文件:
youtube-dl "file:///你的本地路径/playlist.m3u8"
额外推荐:使用yt-dlp(youtube-dl分支)
如果可以替换工具,yt-dlp支持更灵活的HTTP选项,直接附加参数更简便:
yt-dlp --http-opt "customize_url:%0?cred=abcd" 'https://example.com/playlist.m3u8?cred=abcd'
内容的提问来源于stack exchange,提问作者TSR
相关产品推荐
相关产品推荐

