我有很多视频文件,主要是H264。为了节省存储空间,我编写了一个批处理脚本,使用ffmpeg将它们全部转换为H265。问题:某些文件导致ffmpeg使用我的所有内存(24 GB)。然后它崩溃(导致它尝试分配更多的RAM),这将停止转换过程。
我认为这些文件在某种程度上是腐败的。因为使用其他文件,它适用于低内存消耗。现在我想拒绝那些破碎的,以便无人值守的转换是可能的。
如何检测此类损坏? ffmpeg可以这样做,还是需要第三方工具?
set crf=20
set codec=265
ffmpeg -hide_banner -i "!fullSourcePath!" -c:v libx%codec% -crf %crf% "%targetPath%\!targetFileName!"
mkvalidator表示损坏的文件有效:
mkvalidator.exe "V:\Filme\_LegacyFormat\22 Jump Street.mkv"
........................................................................................................................
WRN0D0: There are 5306 bytes of void data..
mkvalidator 0.5.0: the file appears to be valid
file created with libebml v1.3.0 + libmatroska v1.4.1 / mkvmerge v6.9.1 ('Blue Panther') 64bit built on Apr 18 2014 18:23:38
我找到了工具eac3to331,它有一个check
标志。但它没有给我任何错误,虽然测试文件似乎已损坏(导致我的PC在运行ffmpeg几分钟后崩溃)
eac3to.exe -check "V:\Filme\_LegacyFormat\22 Jump Street.mkv"
MKV, 1 video track, 2 audio tracks, 1 subtitle track, 1:51:57, 24p /1.001
1: h264/AVC, English, 1920x808 24p /1.001 (240:101)
2: DTS, German, 5.1 channels, 1509kbps, 48kHz
3: DTS, English, 5.1 channels, 1509kbps, 48kHz
4: Subtitle (SRT), German
v01 Extracting video track number 1...
a02 Extracting audio track number 2...
a03 Extracting audio track number 3...
s04 Extracting subtitle track number 4...
Video track 1 contains 161039 frames.
eac3to processing took 1 minute, 26 seconds.
Done.