如何用 ffmpeg 找到损坏的视频 50 块钱悬赏答案

2022-09-01 04:58:30 +08:00
 1054850490
为了避免同时出现两个答案的情况,悬赏按照时间先后顺序给,最好就是如果有哥们觉得自己会的话,可以评论一下自己在弄,占一下位,避免别的哥们白忙活。

我用着 yt-dlp+aria2 下载着 youtube 视频,视频后处理是 ffmpeg ,因为下载的视频多大几万部,所以有个问题可能存在了很久但是一直没发现,就是有些视频损坏了,就是前面正常,但是后面其中某些段落播放花屏,但是我重新下载的时候又是好的,所以我猜测应该是合成 m3u8 的时候出现了错误,由于 aria2 的关系,下载的视频是分段下载的,而且一直是挂后台下载的,并没有日志,如果有小伙伴知道 yt-dlp 如何开启日志也可以告知。

我现在就是求如何从几万部视频中,自动化的识别出损坏的部分视频,我下面贴上损坏的视频下载链接,可以试一下

https://imgur.com/OXoRgP9
https://imgur.com/clQlBRZ


https://drive.google.com/file/d/1TDbxYD0vri0D8aIJ6a1OSY2abE9tc6Lk/view?usp=sharing
https://drive.google.com/file/d/1Z_kWFZp4YP5q16CixMv_RmlIWIXFTrzb/view?usp=sharing
4196 次点击
所在节点    FFmpeg
32 条回复
1054850490
2022-09-06 00:15:33 +08:00
@ungrown 由于前面已经有人回复了,但是回答得很详细,可以给你 30 悬赏,我的昵称前加“go”就是我的微信号,加我拿一下悬赏
1054850490
2022-09-06 00:16:11 +08:00
@acreti 可以加一下我的微信,我的昵称前加“go”,我可以追加悬赏
ungrown
2022-09-06 09:35:42 +08:00
我怀疑自己会不会要你的悬赏,我甚至怀疑另一个人是不是冲着你的悬赏才来分享方法的。
但在此之前,我更在意的是,他的那个方法,能不能适用于所有损坏的视频。
1054850490
2022-09-06 16:23:43 +08:00
@ungrown 来拿悬赏吧,没事的,这是你应得的
ungrown
2022-09-07 13:40:08 +08:00
@1054850490 #24 我只想知道,计算对比帧数的方法,能不能广泛用于各种视频损坏。

BTW 没人应得什么,没什么东西是谁应得的,任何人,所有人,无一例外。
1054850490
2022-09-07 19:19:39 +08:00
@ungrown 我还在验证,我在测试的时候发现有些视频也少了几帧,但是播放起来一点事也没有,我还在纳闷成因是什么
1054850490
2022-09-07 19:25:39 +08:00
@ungrown
这是一个完全损坏的视频,目前也不知道成因
https://drive.google.com/file/d/1FqWz5MZkdCoO-z0SRvhMPJc7DkVpfsrq/view?usp=sharing

--------------------------
这是一个缺少了 43 帧的视频,但是播放起来也没事
https://drive.google.com/file/d/1rhL9vVxAlSG8oENfuEkigZTTi33kblSs/view?usp=sharing
ungrown
2022-09-08 15:20:59 +08:00
它缺的那几帧如果不是连续的二十分散再各处的话,人眼很难看出来的
1054850490
2022-09-08 21:33:30 +08:00
@ungrown 这倒是,但是还有很多只是缺少 3 帧左右的,一般一个 m3u8 也不止这几帧,我还很纳闷这到底是怎么丢的,
我现在是用 yt-dlp+arid2+ffmpeg 合成来下载的,至于损坏视频是近些时间才发现的,但是用了上面老兄的方法排除的视频,我发现从年初开始就有了,六月初进行了一次系统重装,ffmpeg 又更新到最新版本了,但是六月之后也出现了损坏视频的情况,我还是得发帖到 yt-dlp 社区看看有没有人类似的情况
ungrown
2022-09-09 13:53:11 +08:00
@1054850490 #29
我没有用 yt-dlp ,我用的 youtube-dl ,我其实有点想用 dlp 的,但是我已经在原版的基础上魔改了几个提取器的 class ,比如 iwara 的,我又严重依赖这些改动,用着又没啥毛病,我又懒,所以我就没换 dlp 。

我的 youtube-dl 的配置文件:
--cookies ~/.config/youtube-dl/cookies.youtube.txt
-o "%(title)s [%(extractor)s %(id)s][%(uploader)s].%(ext)s"
--yes-playlist
--fragment-retries infinite
-icw
--external-downloader aria2c
--external-downloader-args "-x10 -s10 -k 1M"
-f (299/137)[height<=?1080][fps<=60]+(m4a/aac)/bestvideo+bestaudio/best
#--socket-timeout 30
#-R infinite

我用自己写的 tg bot 辅助下载,把 url 往 bot 聊天里面一扔就不管了,所以那一大堆下载的视频我并没有挨个仔细检查过。但就我确实打开观看过的那些视频来说,我没有发现肉眼可见的损坏,也许也少了几帧,那这种我肯定是不在乎的。
然后我从油管下载的时候,从来没走过 hls 协议,没看到 m3u8 相关的信息,基本全是 dash mp4 流,一个视频流一个音频流,全是 aria2c 下载的,可能跟我限定了媒体格式有关,就是这行配置`-f (299/137)[height<=?1080][fps<=60]+(m4a/aac)/bestvideo+bestaudio/best`。
从 p 站下的视频倒是经常走 hls ,然后偏偏 aria2 不支持 hls 嘛,然后它就分段下载,哎哟我去那个龟速我就日了,前几天我刚刚研究了这个事情,给 p 站 url 开了一个处理分支加了一点参数,`-f [format_id!*=hls]`,把带 hls 标记的媒体流给排除掉了,终于又可以通过 aria2c 秒速下载了。
hls 真的是坏东西,对下载而言,我个人觉得。
1054850490
2022-10-13 23:58:48 +08:00
@ungrown 我算是研究清楚了,我那个视频损坏常发生于磁盘满的情况下,因为 arin2 是分段下载,不是 ts ,是私有的后缀,列如这里有 1 、2 、3 、4 、5 ,五个片段,aria2 下载完成了其中的 1245 ,虽然 3 也创建了,但是因为中间磁盘满了,下载并不完全,但是依旧发生了合成,就会出现中间缺少帧数的情况,如同下图中的情况



中间缺失的就是因为下载过程中下载不完全,却依旧发生了合成导致的结果,我目前还在开着日志尝试捕捉更多信息,但是目前也不知道怎么会发生合成的,我不知道你了不了解 m3u8 ,我不知道如果其中一个 ts ,直接用一个“毫无意义”的程序,比如用一个 exe 程序,改名为其中一个 ts 片段不知道会不会依旧合成
ungrown
2022-10-14 08:20:15 +08:00
@1054850490 #31
还有服务端的原因。
我后来看自己下载的视频,也遇到了几个,要么是特别长的,要么是下载过程中有过中断重试的(回忆可能不准)。都是 invalid NAL unit 的错误,我用这个关键词搜了一下,github 上有人说这是服务端问题,也就是有时候油管抽风给的某些格式的流切片就有问题,我也懒得验证,只能不置可否。

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

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

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

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

© 2021 V2EX