Bash-计算一个文件夹中所有mp3文件的长度

问题描述 投票:3回答:3

我有以下命令返回mp3s文件的文件名和长度:

mp3info -p "%f: %m:%02s\n" *.mp3

我如何在bash脚本中使用它来返回给定目录中所有mp3文件的总长度(总和)?我想使用以下符号:mm:ss

bash sum mp3
3个回答
3
投票

我打算采取三步走的方法:

  1. 代替打印filename.mp3: mm:ss\n,省略文件名并打印整个秒数
  2. 根据结果构建算术表达式,使您总共有几秒钟
  3. 除以60,四舍五入得到分钟,计算秒的余数。

第一步很简单

mp3info -o '%S' 

将完成这项工作。现在,我们希望事物能够为我们提供形式为>>的有效数值表达式

time1 + time2 + ....

so,

mp3info -o '%S + '

似乎很明智。

然后,因为mp3info打印的最后一个内容将是+,所以我们添加一个零:

"$(mp3info -o '%S + ') 0"

并在算术表达式中使用该字符串:

total_seconds=$(( $(mp3info -o '%S + ' *.mp3) 0 ))

现在,获取完整的会议记录:

full_minutes=$(( total_seconds / 60 ))

和剩余的秒数

seconds=$(( total_seconds % 60 ))

所以整个脚本看起来像

#!/bin/bash 
# This code is under GPLv2
# Author: Marcus Müller

total_seconds=$(( $(mp3info -o '%S + ' *.mp3) 0 ))

printf "%02d:%02d\n" $((total_seconds / 60)) $((total_seconds % 60))

3
投票

mp3info中的基本计算容易出错,因为元数据不是真实数据。使用sox(瑞士军用音频工具),您可以直接从mp3文件中获取。


0
投票

此Bourne外壳单线管在仅包含音乐文件的目录中使用时,将以非常高的精度输出其总长度:

© www.soinside.com 2019 - 2024. All rights reserved.