这个检测视频文件是否损坏的方法的原理是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
uechris
V2EX    程序员

这个检测视频文件是否损坏的方法的原理是什么?

  •  
  •   uechris 2020-01-29 19:11:23 +08:00 6252 次点击
    这是一个创建于 2088 天前的主题,其中的信息可能已经有所发展或是发生改变。

    希望实现对音视频文件完整性的检测,查了一下,主流的方法是利用 ffmpeg.

    ffmpeg -v error -i file.avi -f null - 2>error.log

    但是这样做的 cpu 占用率很高.

    我又在这里找到了另一种方法.文章提供了一个可执行文件,它调用 ffmpeg 以检测视频完整性,没有源码.我在粗略的测试之后,发现这种方法应该是有效的.我捕捉了它对 ffmpeg 调用参数,大致如下:

    ffmpeg -i file.MOV

    ffmpeg -ss 1 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE25.temp

    ffmpeg -ss 2 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE27.temp

    ffmpeg -ss 3 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE28.temp

    ffmpeg -ss 4 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE29.temp

    ffmpeg -ss 6 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE2B.temp

    ffmpeg -ss 7 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE2C.temp

    ffmpeg -ss 8 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE2D.temp

    ffmpeg -ss 9 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE2F.temp

    ffmpeg -ss 10 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE30.temp

    ffmpeg -ss 12 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE31.temp

    ffmpeg -ss 13 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE33.temp

    ffmpeg -ss 14 -i file.MOV -y -f image2 -vframes 1 -s 1x1 tempdir/125F3585BE34.temp

    ......

    查了一下这条命令,没有找到任何相关结果.

    看起来当 ffmpeg 生成的文件为空时该程序会认为视频是损坏的.此时 ffmpeg 的输出最后会有这么一行:

    Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)

    所以想问一下:

    1,这种方法能工作吗?

    2,它工作的原理是什么?

    3,怎样将这种方法扩展到检测音频文件完整性上?

    4,还有什么检测音视频文件完整性的方法?

    6 条回复    2020-01-31 11:38:51 +08:00
    msg7086
        1
    msg7086  
       2020-01-30 00:58:01 +08:00 via Android
    这种做法检测不了所有的文件损坏。
    aliipay
        2
    aliipay  
       2020-01-30 13:14:46 +08:00
    看参数大概猜测,一个是解码每一帧,一个是每秒解码一帧
    BB9z
        3
    BB9z  
       2020-01-30 17:35:36 +08:00
    命令你都拿到了,原理还分析不出来么?

    挺有趣的,LMGTFY
    https://ffmpeg.org/ffmpeg.html#Options

    你说的「主流方法」是解码整个文件,资源需求当然高了。后一种方法是尝试解码每秒的一像素的一帧。

    能工作么?通过的话播放器应该能完整的播下来不大段丢数据,但不能保证所有帧都 OK,可能有花屏。

    音频检测?据我所知,音频的这种解码包都是处理特定格式的,没范用的。
    uechris
        4
    uechris  
    OP
       2020-01-30 21:34:50 +08:00
    @BB9z 我看得出来这个命令是在每一到两秒解码一帧.我感到困惑的地方正好就在此处:每一到两秒解码一帧怎么能确定视频的其他部分是完好的呢?
    看了一下大家的回答,看来答案就是,后一种方法的确无法检测到所有损坏.靠谱的方法应该还是第一种.
    hardwork
        5
    hardwork  
       2020-01-31 11:31:43 +08:00 via Android
    完整性
    hardwork
        6
    hardwork  
       2020-01-31 11:38:51 +08:00 via Android
    这是检测解码是否有错来判断视频完整性,音频应该没办法,一般音频编码单元之间没有参考关系。要检测完整性,应该有原始参照,和原始比呗,或者通过原始信息获知完整性。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2798 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:03 PVG 15:03 LAX 00:03 JFK 03:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86