Экспорт общей длины mp3 файлов в папке?
У меня есть много папок mp3-файлов, и я хотел бы иметь список общей продолжительности всех mp3-файлов в каждой папке. Это было бы идеальным решением, но некоторые средства печати каталога с привязкой продолжительности mp3 также были бы хорошими. Любая помощь приветствуется. Я использую Windows 7 Home Premium, но у меня есть доступ к ряду других Windows/Mac OS.
Редактировать - я действительно нашел решение, используя функцию экспорта в бесплатной программе Tagscanner.
4 ответа
Если вы работаете в Mac OS или любой другой системе Unix, вы можете установить ffmpeg и использовать следующую команду, чтобы извлечь длительность одного файла:
ffmpeg -i filename.mp3 2>&1 | egrep "Duration" | cut -d ' ' -f 4 | sed s/,//
Это, например, вернет "00:08:17.4".
Конечно, вы можете использовать это в скрипте оболочки, так что, например, здесь будут перечислены все 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
Вы можете легко получить это с помощью oneliner:
$ for file in *.mp3; do mp3info -p "%S\n" "$file"; done | paste -sd+ | sed 's+\(.*\)+(\1)/60+' | bc
Разъяснение:
- mp3info: получает индивидуальную длину mp3 в секундах
- вставить: объединить результат столбца с
+
в качестве разделителя - sed: put
()
вокруг суммы и делится на 60 (минут - bc: выполнить арифметическую операцию
Вы можете добавить столбец в список файлов в Windows Explorer. Добавьте столбец свойства "Длина" в папку. Затем выберите все файлы mp3 в папке. Вы можете увидеть общую длину в нижней панели итогов win.exp...
(Не полное решение вашего вопроса, но вы сказали "любая помощь будет оценена:D)
Немного в конце дня (десятилетие!), Но я хотел сделать то же самое. Благодаря 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. Торонто 1977\ 01:52:28