Подтвердить что ты не робот

Проверить продолжительность аудиофайлов в командной строке

Мне нужно проверить продолжительность группы аудиофайлов. Есть ли простой способ сделать это в командной строке unix?

> duration *

У меня есть потрясающее приложение SoX, у которого есть опция, называемая статистикой, которая генерирует набор аудиоинформации, включая продолжительность. Я ищу способ получить только продолжительность. Я гибкий в формате вывода, может быть любой длины образца, hh: mm: ss или seconds. Последнее было бы моим преимуществом.

4b9b3361

Ответ 1

mp3info -p "%m:%02s\n" filename

дает длину указанного файла в формате mm:ss (мм может быть больше 59). Всего за общее количество секунд в файле вы должны использовать:

mp3info -p "%S\n" filename

Чтобы получить общую длину всех mp3 файлов в секундах, AWK может помочь:

mp3info -p "%S\n" *.mp3 | awk 'BEGIN { s = 0 }; { s = s + $1 }; END { print s }'

Ответ 2

soxi -D filename
soxi -D *

Soxi запрашивает метаданные аудиофайлов; D - опция продолжительности. Он поддерживает подтягивание. Старший брат Soxi sox выполняет обработку звука в командной строке.

Ответ 3

mediainfo вернет вам миллисекунды аудиофайла. Предполагая, что в текущем каталоге есть только аудиофайлы, следующие

mediainfo --Inform="Audio;%Duration%" "Miley Cyrus - Wrecking Ball.mp3"

Чтобы рассчитать продолжительность всего аудио в локальном каталоге, этот метод поможет:

shopt -s nullglob
let playlist_duration_ms=0
for song_file in *.{mp3,ogg,m4a,flac,wav}; do
  playlist_duration_ms=$(expr $playlist_duration_ms + $(mediainfo --Inform="Audio;%Duration%" "$song_file"))
done
shopt -u nullglob

let playlist_duration_secs=$(expr $playlist_duration_ms / 1000)
let playlist_duration_mins=$(expr $playlist_duration_ms / 60000)
let playlist_duration_remaining_secs=$(expr $playlist_duration_secs - $(expr $playlist_duration_mins \* 60))

echo $playlist_duration_mins minutes, $playlist_duration_remaining_secs seconds

Ответ 4

ffmpeg -i <audiofile> 2>&1 | grep Duration

Ответ 5

в OSX

Печать длины каждого аудиофайла в текущем каталоге:

afinfo * | awk '/estimated duration/ { print $3 }'

Включить путь к файлу:

afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }'

Ответ 6

В дополнение к cdosborn answer, чтобы вычислить длину всех .mp3 файлов рекурсивно во вложенных папках текущего каталога и показать итоговую итоговую сумму в формате days:hours:minutes:seconds

В zsh:

afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'

В bash или sh:

find . -name "*.mp3" -exec afinfo {} \; | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'

Результат выглядит следующим образом (7 дней, 5 часов, 6 минут, 58 секунд):

$ afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'
7:05:06:58
$

Ответ 7

sox --info -D file             --> duration in seconds
sox --info -d file             --> duration in HH:mm:ss.ss
sox --info file                --> metadata 

Ответ 8

Решение, основанное на mplayer из командной строки от syssyphus, которое работает с аудио и видео файлами:

sudo apt-get install mplayer
find -type f -name "*.mp3" -print0 | xargs -0 mplayer -vo dummy -ao dummy -identify 2>/dev/null | perl -nle '/ID_LENGTH=([0-9\.]+)/ && ($t +=$1) && printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60' | tail -n 1

Получить общую длину всего видео/аудио в текущем каталоге (и ниже) в формате Ч: м: с

Измените *.mp3 на то, что вы хотите сопоставить (например, *.avi, *.wav), вы можете полностью удалить его, если хотите проверить все файлы.

Пример вывода: 00:00:37

Ответ 9

Другой soxi ответ, включающий имена файлов и продолжительность в формате часов, минут и секунд.

$for f in *amr; do printf "$f "; soxi -d $f; done

DGT20161216.amr 00:22:04.62
DGT20170108.amr 00:28:22.80
DGT20170117.amr 00:20:05.18

Ответ 10

mediainfo может это сделать, но mediainfo - один из тех полезных инструментов, которые так плохо документированы, что вам почти нужно знать, как его использовать, чтобы узнать, как его использовать (что очень часто происходит в мире Linux).

После нескольких часов испытаний и чтения с высоким и низким я наконец получил его для создания рекурсивного списка имен файлов с запятыми и их продолжительности в миллисекундах.

cd в стартовый каталог и выполните следующую команду:

find "$(pwd)" -type f -print0 | xargs -0 -I {} mediainfo --Inform="General;%CompleteName%,%Duration%" {} > list.txt

Результаты будут выводиться в list.txt.

Ответ 11

(Если вы не имеете afinfo в вашем распоряжении) Я получил это рекурсивно для всех моих файлов

# install mp3info if not yet installed with
sudo apt-get install mp3info

с помощью команды find поместите общее количество секунд в файл csv (сначала перейдите в каталог, например, с mp3 файлами)

find . -name "*.mp3" -exec mp3info {} -p "%S\r\n" >> totalSeconds.csv \;

Затем откройте его, например, в LibreOffice и суммируйте в нижней части (чтобы получить часы) с помощью

=SUM(A{start}:A{end})/60/60

Ответ 12

с ffprobe

ffprobe your_file.mp3 2>&1 | grep "Duration"

Вывод выглядит так:

Продолжительность: 00: 44: 33.50, начало: 0,011995, битрейт: 128 кб /