Python中使用FFmpeg命令解析m3u8链接报403 Forbidden错误如何解决

在代码里加上 headers 后访问正常,请问有什么办法能用 FFmpeg 正常解析?
Python中使用FFmpeg命令解析m3u8链接报403 Forbidden错误如何解决

9 回复

写个代理帮着加 header 呗


403错误是服务器拒绝了你的请求。这通常是因为请求头信息不完整或者服务器有反爬机制。

最常见的原因是缺少必要的请求头,特别是User-AgentReferer。很多视频网站会检查这些头信息来判断请求是否来自浏览器。

你可以尝试在FFmpeg命令中通过-headers参数添加这些头信息。下面是一个完整的示例:

import subprocess

# 你的m3u8链接
m3u8_url = "你的m3u8链接地址"

# 构建请求头字符串
headers = (
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
    "(KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\r\n"
    "Referer: https://example.com/\r\n"  # 替换为实际的来源页面
)

# 构建FFmpeg命令
command = [
    'ffmpeg',
    '-headers', headers,
    '-i', m3u8_url,
    '-c', 'copy',
    'output.mp4'
]

# 执行命令
try:
    subprocess.run(command, check=True)
    print("下载完成!")
except subprocess.CalledProcessError as e:
    print(f"命令执行失败: {e}")
except Exception as e:
    print(f"发生错误: {e}")

关键点:

  1. User-Agent:模拟真实浏览器的请求
  2. Referer:设置来源页面,很多网站会检查这个
  3. 如果网站有Cookie验证,可能还需要添加Cookie

如果还是403,可能需要:

  • 检查链接是否有效且未过期
  • 查看是否需要特定的Cookie或授权信息
  • 尝试从浏览器开发者工具中复制完整的请求头

建议先用浏览器访问一下m3u8链接,确认能正常播放再尝试下载。

代理是什么意思?

FFmpeg 命令里不能直接加 header 是吧?

m3u8 的就算连上也很不稳定……

Nginx

不才与劣者认为你可以直接在 ffmpeg 加上 header

ffmpeg -v 9 -loglevel 99 -headers "X-Forwarded-For: 160.53.186.194" -i <a target="_blank" href="http://pebbles112-lh.akamaihd.net/i/daserste_1@97481/index_900_av-p.m3u8?sd=6&amp;b=0-1000&amp;rebase=on" rel="nofollow noopener">http://pebbles112-lh.akamaihd.net/i/daserste_1@97481/index_900_av-p.m3u8?sd=6&amp;b=0-1000&amp;rebase=on</a>





谢谢各位热心帮助

回到顶部