2015-12-03 148 views
5

我拼命搜索一种方便的方法来检查特定目录中的.mp4文件与其中的文件夹的完整性。 .mp4文件和文件夹的名称都包含空格,特殊字符和数字。使用ffmpeg快速检查目录内的视频文件的完整性

我已经找到了适当的ffmpeg的命令来快速识别损坏.mp4档案,从here采取: ffmpeg -v error -i filename.mp4 -map 0:1 -f null - 2>error.log

如果创建error.log中包含一些条目,那么该文件明显损坏。相反的是一个空的error.log。

下一步是将此命令应用于文件夹及其子文件夹中的每个.mp4文件。一些指南,如herehere,描述了如何递归地应用ffmpeg命令,但是我的编码技巧有限,所以我找不到合并这些命令的方法以获得以下内容:

使用前面提到的ffmpeg命令(递归地)测试文件夹内的所有.mp4文件,该文件应该创建.log文件,只有当视频文件包含错误(读有一些内容)并且它应该继承破损文件的名称知道哪个文件已损坏。

使用Ubuntu Gnome 15.10。

+1

你需要批处理脚本(Windows)还是shell脚本(Unix)? –

+0

一个shell脚本,因为我使用Ubuntu Gnome 15.10。提前谢谢了。 – DMT

回答

4

试试这个命令:

find . -name "*.mp4" -exec ffmpeg -v error -i "{}" -map 0:1 -f null - 2>error.log \; 

find命令查找当前目录递归地对应于给定模式中的所有文件:"*.mp4"。在-exec之后出现您要为所有文件运行的命令。 "{}"替换当前文件的名称,其中引号允许文件名中包含空格。该命令必须以\;结束。

编辑:

上面的代码完全只生成一个日志文件。要为.mp4文件创建单独的.log文件,各自有各自的名字,你可以使用{}符号更多的时间:

find . -name "*.mp4" -exec sh -c "ffmpeg -v error -i {} -map 0:1 -f null - 2>{}.log" \; 
+0

Andrea,感谢您的快速响应!您的命令只能部分工作:虽然它将文件夹中的所有文件及其子文件夹都考虑在内,但只会为所有文件创建一个error.log。坏消息是,我无法单独从这个.log文件的内容中识别出损坏的视频文件,因为它仅显示文件的破碎字节,而不是文件名本身。因此,我正在搜索一个命令,它将为每个损坏的视频文件创建一个单独的.log文件,该文件与损坏的视频文件具有相同的名称。 – DMT

+0

@dmt看到更新的答案,我希望这有助于! –

+0

这次您更新的命令创建了一个名为{} .log的单个.log文件。出了些问题。 – DMT

3

我最近遇到了同样的问题,但我觉得有一个简单的黑客找出哪些文件被破坏:

find -name "*.mp4" -exec sh -c "echo '{}' >> errors.log; ffmpeg -v error -i '{}' -map 0:1 -f null - 2>> errors.log" \; 

这样的错误,按照文件名(和路径)。

+1

为了更好的格式化源文件 'find。 -name“* .mp4”-exec sh -c“echo'{} \ t \ c'>> errors.log; ffmpeg -v error -i'{}'-map 0:1 -f null - 2 >> errors.log; echo''>> errors.log“\;' – awiebe