我有许多 mp3 文件夹,我想列出每个文件夹中所有 mp3 的总时长。这将是理想的解决方案,但执行目录打印并附加单个 mp3 时长的方法也不错。任何帮助都将不胜感激。我运行的是 Windows 7 Home Premium,但可以访问许多其他 Windows/Mac OS。
编辑 - 我实际上找到了使用免费软件程序 Tagscanner 中的导出功能的解决方案。
答案1
如果你使用的是 Mac OS 或任何 Unix 系统,你可以安装ffmpeg并使用以下命令提取单个文件的时长:
ffmpeg -i filename.mp3 2>&1 | egrep "Duration" | cut -d ' ' -f 4 | sed s/,//
例如将返回“00:08:17.4”。
当然,您可以在 shell 脚本中使用它,例如,这将在右侧列出文件夹中的所有 mp3 文件及其持续时间。
#!/bin/bash
# call me with mp3length.sh directory
# e.g. ./mp3length .
# or ./mp3length my-mp3-collection
for file in $1/*.mp3
do
echo -ne $file "\t"
ffmpeg -i "$file" 2>&1 | egrep "Duration"| cut -d ' ' -f 4 | sed s/,//
done
以下脚本返回全部的持续时间(小时):
#!/bin/bash
# call me with mp3length.sh directory
# e.g. ./mp3length .
# or ./mp3length my-mp3-collection
list-individual-times() {
for file in $1/*.mp3
do
echo -ne $file "\t"
ffmpeg -i "$file" 2>&1 | egrep "Duration"| cut -d ' ' -f 4 | sed s/,//
done
}
TOTAL_HOURS=$(list-individual-times $1 | cut -f2 | xargs -I hhmmss date -u -d "jan 1 1970 hhmmss" +%s | awk '{s+=$1}END{print s/3600}')
echo "Total hours: ${TOTAL_HOURS}"
答案2
您可以使用一行代码轻松获得它:
$ for file in *.mp3; do mp3info -p "%S\n" "$file"; done | paste -sd+ | sed 's+\(.*\)+(\1)/60+' | bc
解释:
- mp3信息:获取单个 mp3 的长度(以秒为单位)
- 粘贴:合并列结果为
+
分隔符 - sed:将
()
总和除以 60(分钟 - 公元前:执行算术运算
答案3
您可以在 Windows 资源管理器的文件列表中添加一列。为文件夹添加“长度”属性列。然后选择文件夹中的所有 mp3 文件。您可以在 win.exp 的底部摘要窗格中看到总长度...
(这不是您问题的完整解决方案,但您说“如能提供任何帮助,我们将不胜感激:D)
答案4
虽然有点晚了(十年了!),但我也想做同样的事情。感谢Windows Powershell,这是我今天写的一个小脚本。
$path = '~\MS Subbulakshmi\1. Toronto 1977\'
$shell = New-Object -COMObject Shell.Application
$folder = $path
$shellfolder = $shell.Namespace($folder)
$total_duration = [timespan] 0
foreach($file in Get-ChildItem $folder)
{
$shellfile = $shellfolder.ParseName($file.Name)
$total_duration = $total_duration + [timespan]$shellfolder.GetDetailsOf($shellfile, 27);
}
Write-Host "Total Duration of $folder is $total_duration"
输出将是这样的
~\MS Subbulakshmi\1. Toronto 1977\ 的总时长为 01:52:28