我正在拼命寻找一种方便的方法来检查特定目录中包含文件夹的.mp4文件的完整性..mp4文件和文件夹的名称都包含空格,特殊字符和数字.
我已经找到了一个正确的ffmpeg命令来快速识别一个损坏的.mp4文件,取自这里:
ffmpeg -v error -i filename.mp4 -map 0:1 -f null - 2>error.log
如果创建的error.log包含一些条目,则该文件显然已损坏.相反的是一个空的error.log.
下一步是将此命令应用于文件夹及其子文件夹中的每个.mp4文件.一些指南,比如这里和这里,确实描述了如何递归地应用ffmpeg命令,但我的编码技巧有限,因此我找不到一种方法来组合这些命令来获得以下内容:
一种使用前面提到的ffmpeg命令测试文件夹内的所有.mp4文件的方法(应该创建.log文件),只有当视频文件确实包含错误(读取有一些内容)并且它应该继承破坏的名称时文件,以了解哪个文件已损坏.
使用Ubuntu Gnome 15.10.
试试这个命令:
find . -name "*.mp4" -exec ffmpeg -v error -i "{}" -map 0:1 -f null - 2>error.log \;
该find
命令以递归方式查找当前目录中与给定模式相对应的所有文件:"*.mp4"
.在-exec
您输入要为所有文件运行的命令之后."{}"
替换当前文件的名称,其中引号允许文件名中的空格.命令必须结束\;
.
编辑:
上面的代码只生成一个日志文件.要.log
为.mp4
每个带有名称的文件创建单独的文件,可以{}
再次使用该符号:
find . -name "*.mp4" -exec sh -c "ffmpeg -v error -i {} -map 0:1 -f null - 2>{}.log" \;
我最近遇到了同样的问题,但我认为有一个简单的黑客可以找出哪些文件被破坏了:
find -name "*.mp4" -exec sh -c "echo '{}' >> errors.log; ffmpeg -v error -i '{}' -map 0:1 -f null - 2>> errors.log" \;
这样,错误遵循文件名(和路径).