我有以下命令返回mp3s文件的文件名和长度:
mp3info -p "%f: %m:%02s\n" *.mp3
我如何在bash脚本中使用它来返回给定目录中所有mp3文件的总长度(总和)?我想使用以下符号:mm:ss
我打算采取三步走的方法:
filename.mp3: mm:ss\n
,省略文件名并打印整个秒数第一步很简单
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))
mp3info中的基本计算容易出错,因为元数据不是真实数据。使用sox(瑞士军用音频工具),您可以直接从mp3文件中获取。
此Bourne外壳单线管在仅包含音乐文件的目录中使用时,将以非常高的精度输出其总长度: