获取包含声音文件的文件夹和子文件夹的整个时长

获取包含声音文件的文件夹和子文件夹的整个时长

我正在寻找一个可以让我获取音乐文件整个时长的 ffmpeg。假设所有文件都是 mp3 格式。我在网上找到了以下代码:

ffmpeg -i * 2>&1 | grep Duration

现在,我该如何使它包含在当前文件夹中的子文件夹中?

回答:

afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'

答案1

如果您安装了 ffmpeg,那么您可能也安装了 ffprobe。

man ffprobe

例如,输出仅有的您可以执行的时长(以秒为单位)

ffprobe -hide_banner -v error -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration sound.mp3

如果您想要每个文件的持续时间,则需要递归。

find . -type f -name "*.mp3" -print0 | parallel -0 'echo "{} : `ffprobe -hide_banner -v error -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration {}`"'

ffprobe 需要一些时间,因此我们并行化

您可能希望将持续时间相加以获得整个目录层次结构的持续时间:

find . -type f -name "*.mp3" -print0 | parallel -0 ffprobe -hide_banner -v error -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration | paste - -sd+ - | bc

相关内容