【问题标题】:Recursively list video duration for all files in a directory递归列出目录中所有文件的视频时长
【发布时间】:2014-10-13 17:54:35
【问题描述】:

我想列出文件夹中每个视频的所有文件名和持续时间。目前我只能单独定位文件:

ffmpeg -i intro_vid001.mp4 2>&1 | grep 持续时间

有人可以建议我如何在终端中将其打印出来,或者将其打印到文件夹中每个视频文件的文本文件中吗?

我尝试过使用 shell 脚本,但对 shell 脚本非常陌生。

if [ -z $1 ];then echo Give target directory; exit 0;fi

find "$1" -depth -name ‘*’ | while read file ; do
directory=$(dirname "$file")
oldfilename=$(basename "$file")


echo oldfilename
#ffmpeg -i $directory/$oldfilename” -ab 320k “$directory/$newfilename.mp3″ </dev/null
ffmpeg -i "$directory/$oldfilename" 2>&1 | grep Duration | echo
#rm “$directory/$oldfilename”

done

【问题讨论】:

  • 如果您以后想要整个文件名,则无需拆分文件名。您在 echo 行中错过了 $oldfilename 上的 $。您不需要将输出从grep 传送到echo(它不会为您做任何事情)。如果您找到了它,您可能希望使用-print0 而不是默认的-print 来更安全地使用文件名(然后使用while IFS= read -rd '' file 来读取该输出)。除此之外,该脚本是否适合您?

标签: bash shell video ffmpeg


【解决方案1】:
  1. 我忘记在一个“旧文件名”前面加一美元
  2. grep 在其标准输出上写入,您不能使用不使用其标准输入的 echo 管道。

我建议使用以下脚本:

find "$1" -type f | while read videoPath ; do
    videoFile=$(basename "$videoPath")
    duration=$(ffmpeg -i "$videoPath" 2>&1 | grep Duration)

    echo "$videoFile: $duration"
done

【讨论】:

  • 您可以使用 ffprobe(包含在您的 ffmpeg 中)获得更好的持续时间和其他元数据的输出:ffprobe -v quiet -show_format $vildeoPath | grep duration 甚至将其发送到 JSON:ffprobe -v quiet -show_format -print_format json $videoPath
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 2010-10-04
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多