FFmpeg无法正确处理输入URL:重定向截断致401授权失败
解决FFmpeg处理重定向URL时截断的问题,获取最终重定向URL
遇到这种FFmpeg因重定向URL截断导致401的问题,核心原因是FFmpeg的HTTP模块对重定向后的URL参数解析不够健壮,尤其是带特殊编码字符的场景。最可靠的办法是先用专门的HTTP工具获取最终重定向后的完整URL,再传给FFmpeg处理,具体步骤如下:
1. 用curl获取最终重定向URL
curl是处理HTTP请求的专业工具,对重定向追踪和URL解析的支持比FFmpeg更完善。执行以下命令可以直接输出重定向后的最终URL:
curl -L -s -o /dev/null -w "%{url_effective}" "https://serverigetmyvideofrom.com/videos/xxxxx.mp4"
参数解释:
-L:自动跟随所有HTTP重定向-s:静默模式,不输出多余日志-o /dev/null:不保存响应内容,只关注URL-w "%{url_effective}":输出最终跳转后的有效URL
2. 将最终URL传入FFmpeg
把上面得到的URL保存到变量中,再作为输入传给FFmpeg,避免直接让FFmpeg处理重定向:
# 获取最终重定向URL并保存到变量 FINAL_URL=$(curl -L -s -o /dev/null -w "%{url_effective}" "https://serverigetmyvideofrom.com/videos/xxxxx.mp4") # 用FFmpeg处理视频 ffmpeg -ss 5 -i "$FINAL_URL" -t 139 -y -codec:v libx264 -codec:a libfaac /var/www/vhosts/www/36.mp4 > /var/www/vhosts/xxx/block.txt 2>&1 &
3. 处理401授权问题(如果需要)
如果原URL需要身份验证,你可以让curl先带上认证信息获取重定向URL,再把同样的认证信息传给FFmpeg:
- 比如需要Basic认证:
# 带用户名密码获取最终URL FINAL_URL=$(curl -L -s -u "username:password" -o /dev/null -w "%{url_effective}" "https://serverigetmyvideofrom.com/videos/xxxxx.mp4") # FFmpeg用同样的认证信息 ffmpeg -user_agent "Mozilla/5.0" -http_user "username" -http_passwd "password" -ss 5 -i "$FINAL_URL" -t 139 -y -codec:v libx264 -codec:a libfaac /var/www/vhosts/www/36.mp4 > /var/www/vhosts/xxx/block.txt 2>&1 &
- 如果是Cookie认证:
# 获取最终URL并保存Cookie curl -L -s -c cookies.txt -o /dev/null -w "%{url_effective}" "https://serverigetmyvideofrom.com/videos/xxxxx.mp4" > final_url.txt FINAL_URL=$(cat final_url.txt) # FFmpeg加载Cookie COOKIE_HEADER=$(cat cookies.txt | awk '{print $1 "=" $2}') ffmpeg -headers "Cookie: $COOKIE_HEADER" -ss 5 -i "$FINAL_URL" -t 139 -y -codec:v libx264 -codec:a libfaac /var/www/vhosts/www/36.mp4 > /var/www/vhosts/xxx/block.txt 2>&1 &
这种方法能彻底绕开FFmpeg处理重定向时的URL截断问题,同时保证授权信息正确传递,解决401错误。
内容的提问来源于stack exchange,提问作者None
相关产品推荐
相关产品推荐

