it-swarm.com.de

überprüfen Sie die Dauer der Audiodateien in der Befehlszeile

Ich muss die Dauer einer Gruppe von Audiodateien überprüfen. Gibt es eine einfache Möglichkeit, dies in der Unix-Befehlszeile zu tun?

> duration *

Ich habe die erstaunliche SoX-App, die eine Option namens stats hat, die eine Reihe von Audio-Informationen einschließlich Dauer generiert. Ich bin auf der Suche nach einer Möglichkeit, nur Dauer zu erhalten. Ich bin flexibel beim Ausgabeformat, es könnte eine beliebige Musterlänge sein, hh: mm: ss oder Sekunden. Letzteres wäre meine Präferenz . 

31
ted.strauss
mp3info -p "%m:%s\n" filename

gibt die Länge der angegebenen Datei an.

22
0xbadc0de
soxi -D filename
soxi -D *

Soxi fragt Metadaten von Audiodateien ab; D ist die Daueroption. Es unterstützt Globbing. Soxis großer Bruder sox führt die Befehlszeilen-Audiobearbeitung aus.

30
ted.strauss

mediainfo gibt Ihnen die Millisekunden einer Audiodatei zurück. Angenommen, das aktuelle Verzeichnis enthält nur Audiodateien 

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

Um die Dauer aller Audiodaten im lokalen Verzeichnis zu berechnen, hilft diese Gist :

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
12
DoggoDougal

unter OSX

Drucken Sie die Länge jeder Audiodatei im aktuellen Verzeichnis:

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

Fügen Sie den Dateipfad hinzu:

afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }'
8
cdosborn
ffmpeg -i <audiofile> 2>&1 | grep Duration
6
JellicleCat

Um zusätzlich zu cdosborn answer die Länge aller .mp3-Dateien rekursiv in Unterordnern des aktuellen Verzeichnisses zu berechnen und das Gesamtergebnis der Summe im days:hours:minutes:seconds-Format anzuzeigen:

In 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))}'

In Bash oder 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))}'

Das Ergebnis sieht so aus (7 Tage, 5 Stunden, 6 Minuten, 58 Sekunden):

$ 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
$
4
Hamid Rohani

Eine auf mplayer basierende Lösung von commandlinefu by syssyphus , die sowohl mit Audio- als auch Videodateien funktioniert:

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

Liefert die Gesamtlänge aller Video-/Audiodateien im aktuellen Verzeichnis (und darunter) in H: m: s

Ändern Sie den *.mp3 in das, was Sie abgleichen möchten (z. B. *.avi, *.wav). Sie können es vollständig entfernen, wenn Sie alle Dateien überprüfen möchten.

Beispiel für die Ausgabe: 00:00:37

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

Eine andere soxi basierte Antwort, einschließlich Dateinamen und Dauer in Stunden, Minuten und Sekunden.

$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
2
alemol

mediainfo kann dies, aber mediainfo ist eines dieser nützlichen Tools, das so schlecht dokumentiert ist, dass man fast wissen muss, wie man es benutzt, um zu lernen, wie man es benutzt (was in der Linux-Welt viel passiert).

Nach stundenlangen Versuchen und dem Lesen von Hoch und Tief habe ich es endlich geschafft, eine rekursive, durch Kommas getrennte Liste von Dateinamen und deren Dauer in Millisekunden zu generieren.

cd in das Ausgangsverzeichnis und geben Sie den folgenden Befehl aus:

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

Die Ergebnisse werden in list.txt ausgegeben.

1
alex_223

mit ffprobe

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

Die Ausgabe sieht folgendermaßen aus:

Dauer: 00: 44: 33,50, Start: 0,011995, Bitrate: 128 kb /

0
Matthias Braun

(Wenn Sie nicht über afinfo verfügen) Ich habe es rekursiv für alle meine Dateien erhalten

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

geben Sie mit dem Befehl find die Gesamtsekunde in eine CSV-Datei ein (wechseln Sie zuerst in das Verzeichnis mit Ihren beispielsweise MP3-Dateien).

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

Öffnen Sie es dann in z. in LibreOffice und fasse es unten zusammen (um die Stunden zu erhalten) mit

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