2

У меня есть много папок mp3-файлов, и я хотел бы иметь список общей продолжительности всех mp3-файлов в каждой папке. Это было бы идеальным решением, но некоторые средства печати каталогов с индивидуальной продолжительностью mp3 также были бы хорошими. Любая помощь приветствуется. Я использую Windows 7 Home Premium, но у меня есть доступ к ряду других Windows/Mac OS.

Редактировать - я действительно нашел решение, используя функцию экспорта в бесплатной программе Tagscanner.

4 ответа4

5

Если вы работаете в 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
4

Вы можете легко получить это с помощью oneliner:

$ for file in *.mp3; do mp3info -p "%S\n" "$file"; done | paste -sd+ | sed 's+\(.*\)+(\1)/60+' | bc

Разъяснение:

  • mp3info: получает индивидуальную длину mp3 в секундах
  • вставить: объединить результат столбца с + качестве разделителя
  • sed: положить () вокруг суммы и делит на 60 (минут
  • bc: выполнить арифметическую операцию
2

Вы можете добавить столбец в список файлов в Windows Explorer. Добавьте столбец свойства "Длина" в папку. Затем выберите все файлы mp3 в папке. Вы можете увидеть общую длину в нижней сводной панели win.exp ...

(Не полное решение вашего вопроса, но вы сказали "любая помощь будет оценена:D)

1

Немного в конце дня (десятилетие!), Но я хотел сделать то же самое. Благодаря 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .