我正在寻找一个可以让我获取音乐文件整个时长的 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