ffmpeg 无法下载 content-type 为 image 的 m3u8,有什么参数可以绕过并下载?

2022-12-20 23:30:38 +08:00
 estk
起因:某个视频网站把切片以 image 文件的形式放别人图床上,运行 ffmpeg -i m3u8_url -c copy dl.mp4 无法下载,猜测是 ffmpeg 检测到 content-type 为 image 就不下载了

m3u8 文件 URL Base64: aHR0cHM6Ly9jMi5tb25pZGFpLmNvbS8yMDIyMTEyOC9rTTlRakQwcS9pbmRleC5tM3U4
curl m3u8_url 可以看到切片文件是.png 结尾

但是在他们网页可以正常播放,网页 URL Base64: aHR0cHM6Ly9kaWFueWkubmcvcGFseS05VWpxQ1MtMS0xLmh0bWw=
可能是 html video 标签不检测切片的 content-type 吧?

发这个帖子的目的不是为了下载这个视频,想讨论一下 ffmpeg 遇到这种 m3u8 有什么什么参数可以让它顺利下载?
2472 次点击
所在节点    程序员
15 条回复
ysc3839
2022-12-21 00:20:46 +08:00
改代码?
icoming
2022-12-21 00:40:52 +08:00
你访问那个图片 URL 看看,提示找不到。
mikewang
2022-12-21 00:59:53 +08:00
链接已经失效了。换了一集试了下,这个视频站非常的狡猾,在 TS 片段前加上了 PNG 头部,迷惑图床,从而利用 CDN 的流量。
显然 ffmpeg 是被骗了,无法解码;而 Chromium 没有被骗,所以浏览器可以正常播放。

这个时候,需要手动下载 m3u8 的内容,然后向 FFmpeg 指定格式即可。

wget https://....../../index.m3u8
grep '.png' index.m3u8 | xargs curl > video.ts
ffmpeg -f mpegts -i video.ts -codec copy video.mkv
mikewang
2022-12-21 01:06:42 +08:00
estk
2022-12-21 08:29:11 +08:00
@mikewang #3
所以只能手动下载所有切片,没有 ffmpeg 的其它参数可以让它忽略这个 content-type 直接下载?
jiulang
2022-12-21 09:10:06 +08:00
反向代理来修改
jifengg
2022-12-21 10:00:19 +08:00
我碰到过一些网站是这么搞的,但是,他不仅仅是只动了 content-type ,他文件存储的时候,就是在前面加了固定字节的 png 内容,所以 ffmpeg 去解码的时候会认为这是一个 png 图片。网页可以正常播放应该是内嵌的播放器做了处理。

我以前写过一个下载的脚本,用的笨方法就是自己解析 m3u8 文件,下载里面的文件,截掉前面的 n 个字节,再用 ffmpeg 合并。
Administrat0r
2022-12-21 10:43:48 +08:00
可以试试我蹭的这个项目 也是解决 png 的问题 https://github.com/orestonce/m3u8d
novolunt
2022-12-21 10:57:51 +08:00
反向代理图床,改请求头。另外 视频存什么操作
jeesk
2022-12-21 21:24:36 +08:00
简单的就是楼上的。否则直接去修改 ffmpeg 源码处理 reponse 的部分 。
mikewang
2022-12-22 01:26:06 +08:00
@estk #5 不能,FFmpeg 对于 m3u8 要使用 HLS 这个 demuxer ,而内部 segment 的 demuxer 则是自动判断的,没有提供指定 demuxer 的方法。如果一定要使用 ffmpeg ,则需要修改源码重新编译了。
Slurp
2022-12-22 11:52:00 +08:00
PR is welcome.
estk
2022-12-22 13:21:55 +08:00
@Slurp #12
官方会决绝说:如果用户传个.exe 是否也需要下载?
Kobayashi
2022-12-22 13:33:29 +08:00
给个地址?
AngryFootHair
2023-01-04 13:06:44 +08:00
@mikewang @estk @jifengg

刚刚试了下,123llq.com 123 浏览器 打开 网页 URL Base64: aHR0cHM6Ly9kaWFueWkubmcvcGFseS05VWpxQ1MtMS0xLmh0bWw= 这个页面,成功嗅探到了 m3u8 资源,点击就可以下载了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903827

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX