首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ffmpeg快速检查目录中视频文件的完整性。

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

Stack Overflow用户
提问于 2015-12-03 22:18:03
回答 6查看 46.2K关注 0票数 24

我正在拼命地寻找一种方便的方法来检查包含文件夹的特定目录中的.mp4文件的完整性。.mp4文件和文件夹的名称都包含空格、特殊字符和数字。

我已经找到了一个正确的ffmpeg命令来快速识别损坏的.mp4文件,该文件摘自hereffmpeg -v error -i filename.mp4 -map 0:1 -f null - 2>error.log

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

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

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

使用Ubuntu 15.10。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-12-04 12:50:09

尝试以下命令:

代码语言:javascript
运行
复制
find . -name "*.mp4" -exec ffmpeg -v error -i "{}" -map 0:1 -f null - 2>error.log \;

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

编辑:

上面的代码只生成一个日志文件,因此不可能知道哪个文件被破坏了。相反,要为每个.log文件创建单独的.mp4文件,您可以再次使用{}符号:

代码语言:javascript
运行
复制
find . -name "*.mp4" -exec sh -c "ffmpeg -v error -i '{}' -map 0:1 -f null - 2>'{}.log'" \;
票数 26
EN

Stack Overflow用户

发布于 2016-10-29 11:22:11

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

代码语言:javascript
运行
复制
find -name "*.mp4" -exec sh -c "echo '{}' >> errors.log; ffmpeg -v error -i '{}' -map 0:1 -f null - 2>> errors.log" \;

这样,错误就会跟随文件名(和路径)。

票数 12
EN

Stack Overflow用户

发布于 2018-04-11 12:14:23

使用ffmpeg重新编码到null格式的其他答案的问题是,它们需要很长的时间。一种快速的方法是为所有视频生成缩略图,并查看缩略图生成失败的地方。

代码语言:javascript
运行
复制
find . -iname "*.mp4" | while read -r line; do 
  line=`echo "$line" | sed -r 's/^\W+//g'`; 
  echo 'HERE IT IS ==>' "$line"; 
  if ffmpeg -i "$line" -t 2 -r 0.5 %d.jpg; 
    then echo "DONE for" "$line"; 
  else echo "FAILED for" "$line" >>error.log; 
  fi; 
done;

事实证明,这种方法比其他方法快得多。

然而,有一个警告。此方法可能产生错误的结果,因为有时甚至对损坏的文件也可能生成缩略图。例如,如果视频文件仅在结束时损坏,则此方法将失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34077302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档