识别缺少索引的 AVI 文件

识别缺少索引的 AVI 文件

我正在寻找一种可编写脚本的 bash 方法来识别缺少索引的 AVI 文件。

这些是截断的 AVI 文件,尽管存在一些问题,但仍可播放。到目前为止,唯一可靠的方法是在 VirtualDub 中打开 AVI(它要求重新导出关键帧标志,然后使用流副本保存以创建修复的 AVI)或 VLC,它会提示创建可寻址播放的索引,但它不会保存它。

ffmpeg -i bad.avi -codec copy good.avi创建已修复的 AVI。这是可编写脚本的。但我想只识别坏文件并将它们提供给这样的修复脚本,而不是浪费处理好文件。

我尝试了类似的方法ffprobe -v error -select_streams v:0 -show_entries stream=index -of default=nw=1 file.avi,但对于好文件和坏文件,结果都是“index=0”。(也许我误解了)

此类文件可以被识别吗ffmpeg?如果可以,如何识别?


我为自己准备了一个这样的测试用例:(original.avi完整,带有索引文件)和test.avi截断版本(无索引)。使用dd if=original.avi of=test.avi bs=1M count=X(其中 X 小于原始文件大小)创建。

ffprobe 的输出:

Input #0, avi, from 'original.avi': 
Duration: 01:54:27.87, start: 0.000000, bitrate: 847 kb/s 
Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, 640x352, 646 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn, 23.98 tbc 
Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s

Input #0, avi, from 'test.avi':
Duration: 01:47:10.18, start: 0.000000, bitrate: 847 kb/s 
Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, 640x352, 23.98 fps, 23.98 tbr, 23.98 tbn, 23.98 tbc 
Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s

此外,该命令ffprobe -hide_banner -v error -select_streams v:0 -show_entries stream -of default test.avi还会产生以下不同的字段:期间duration_ts比特率与 上的输出相比original.avi

比特率被列为不适用但这test.avi不可靠。我在多个文件上进行了测试,该指标通常表现为误报。

使用 ffmpeg 第 3、4、5 和 6 代进行测试。

相关内容