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

The*_*Red 5 bash mp3 sum

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

mp3info -p "%f: %m:%02s\n" *.mp3
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ler 5

我会采取三步走的方法:

\n\n
    \n
  1. 省略filename.mp3: mm:ss\\n文件名并打印总秒数,而不是打印
  2. \n
  3. 根据结果​​构建算术表达式,给出总秒数
  4. \n
  5. 除以 60,向下舍入得到分钟,计算秒的余数。
  6. \n
\n\n

第一步很简单

\n\n
mp3info -o \'%S\' \n
Run Code Online (Sandbox Code Playgroud)\n\n

会做这项工作。现在,我们希望事物能够为我们提供以下形式的有效数值表达式

\n\n

时间1+时间2+...

\n\n

所以,

\n\n
mp3info -o \'%S + \'\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来很明智。

\n\n

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

\n\n
"$(mp3info -o \'%S + \') 0"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
total_seconds=$(( $(mp3info -o \'%S + \' *.mp3) 0 ))\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
full_minutes=$(( total_seconds / 60 ))\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及剩余的秒数

\n\n
seconds=$(( total_seconds % 60 ))\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以总脚本看起来像

\n\n
#!/bin/bash \n# This code is under GPLv2\n# Author: Marcus M\xc3\xbcller\n\ntotal_seconds=$(( $(mp3info -o \'%S + \' *.mp3) 0 ))\n\nprintf "%02d:%02d\\n" $((total_seconds / 60)) $((total_seconds % 60))\n
Run Code Online (Sandbox Code Playgroud)\n

  • 要以 `mm:ss` 格式打印,请使用 `printf`,如下所示:`printf "%02d:%02d\n" $((total_seconds / 60)) $((total_seconds % 60))`。 (2认同)