如何快速批量扫描视频文件以检查完整性(损坏/有效)

问题描述 投票:0回答:1

这个问题在这个论坛上被问了好几次,接受的答案是使用 ffmpeg 来评估文件的完整性,这些示例命令:

# scan a single file
ffmpeg.exe -v error -i C:\to\path\file.avi -f null - >error.log 2>&1

# batch scan
find C:\to\path\ -name "*.mp4" -exec sh -c "ffmpeg -v error -i '{}' -map 0:1 -f null - 2>'{}.log'" \;

问题:

上述命令没有问题,评估单个视频文件需要 2-20 分钟。但是,当对大量视频文件(1000+)运行上述批处理命令时(假设每个文件平均 5 分钟),该过程可能需要一个多星期才能完成。

目标:

寻找一个更快的解决方案来验证我的文件的完整性。要么修改

ffmpeg
命令,要么完全用作不同的二进制文件。只要我可以在终端/bash 中运行新命令,任何东西都可以接受。希望将处理时间从几天缩短到几个小时。

参考资料:

https://superuser.com/questions/100288/how-can-i-check-the-integrity-of-a-video-file-avi-mpeg-mp4

使用ffmpeg快速检查目录内视频文件的完整性

如何判断视频文件是否损坏? FFmpeg?

https://gist.github.com/ridvanaltun/8880ab207e5edc92a58608d466095dec

更新

我从来没有找到一种“快速”扫描视频文件的方法。为了彻底起见,我只是接受了这需要一些时间。不过,我做了一个GUI Python程序,可能对其他人有好处:

https://github.com/nhershy/CorruptVideoFileInspector

python bash macos ffmpeg mp4
1个回答
0
投票

如果您可以假设文件在创建时有效,那么将校验和(sumcksum)存储为每个视频的单独并行文件,然后您可以将该校验和作为任何后续文件移动/复制/传输的验证工具。

求和

{checksum} {block count}
07664 39404

对于校验和

{CRC checksum} {byte count} {filename}
3609965344 40348936 testfile.mp4

如果您正在寻找一种方法来验证视频文件是否有效在第一次创建时,唯一的方法是使用 ffmpeg 方法进行验证。

valid”这个词本身也是含糊不清的

如果你的意思是“not corrupt”,上面的校验和方法就是你所需要的。

如果你的意思是“playable”,你可以使用任何多媒体工具并尝试在命令行播放视频(作为后台进程),如果它立即失败,那么你知道它是无效的(假设使用的编解码器是一个该工具识别)。

如果在开始后台播放视频后,你有一个循环等待 30 秒,然后测试并发现进程仍在运行,那么你会认为文件可播放/有效,终止后台视频进程并移至列表中的下一个文件进行测试。

基本上,视频都是磁盘和 CPU 密集型数据,需要在开始收集之前需要预先建立数据完整性维护方案。否则,您将陷入现在面临的收藏后噩梦。

当我开始自己的收藏后完整性检查时,我与自己的“Rubicon”面对面。

对于 ffprobe,在这种情况下,它更限于用作初步扫描,以协助设置更全面的 ffmpeg 评估。

© www.soinside.com 2019 - 2024. All rights reserved.