希望实现对音视频文件完整性的检测,查了一下,主流的方法是利用 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,还有什么检测音视频文件完整性的方法?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.