PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell skript zum umwandeln von mp3's



jockelb
25.12.02, 22:44
Tachjen,

ich möchte alle Dateien im einem Verzeichnis umwandeln. Die mp3's haben falsche bitraten und falsche frequenzen.
Mit dem Befehl:
ffmpeg -i 045-gold\ der\ wikinger.mp3 -ab 128 -ar 44100 -acodec mp3 045-gold\ der\ wikinger128.mp3
klappt das auch wunderbar. Doch wie automatisiere ich das? Wie schon gesagt es sind ein paar mehr Dateien in diesem Verzeichnis, die umgewandelt werden sollen. Es so an den Dateinamen ein 128 angehängt werden oder die Datei soll mit dem gleichen Name in einem anderen Verzeichnis gebaut werden.

Danke

Jörg

dauni
25.12.02, 23:20
Vielleicht so:



#!/bin/bash
name=*
type=.mp3
newtype=128.mp3
for file in $name$type
do
ffmpeg -i $file -ab 128 -ar 44100 -acodec mp3 `echo $file | sed s/$type/$newtype/`
done

zander
26.12.02, 00:47
Zwei Anmerkungen zu dem Skript: 1) sed interpretiert '.' als Bestandteil eines regulären Ausdrucks, also als "irgendein Zeichen", was zu Problemen führen kann; 2) ohne Hochkommata ($file -> "$file") wird das Skript vermutlich nicht mit Dateien umgehen können, die Leerzeichen im Namen beinhalten. Alternativer Vorschlag (ungetested):

for i in *.mp3; do ffmpeg -i "$i" -ab 128 -ar 44100 -acodec mp3 $(basename "$i" .mp3)128.mp3

Jasper
26.12.02, 01:43
Original geschrieben von zander
Zwei Anmerkungen zu dem Skript: 1) sed interpretiert '.' als Bestandteil eines regulären Ausdrucks, also als "irgendein Zeichen", was zu Problemen führen kann; 2) ohne Hochkommata ($file -> "$file") wird das Skript vermutlich nicht mit Dateien umgehen können, die Leerzeichen im Namen beinhalten. Alternativer Vorschlag (ungetested):

for i in *.mp3; do ffmpeg -i "$i" -ab 128 -ar 44100 -acodec mp3 $(basename "$i" .mp3)128.mp3

deine einwände sind volkommen richtig. deine lösung sieht schon recht gut aus.
im falle von bash könnte man basename durch ${i%*.mp3} ersetzen. und natürlich das abschliessende 'done' nicht vergessen:

for i in *.mp3; do
ffmpeg -i "$i" -ab 128 -ar 44100 -acodec mp3 ${i%.mp3}128.mp3
done

-j

zander
26.12.02, 11:07
Das abschliessende ";done" hätte ich wohl nicht vergessen sollen, das passiert, wenn man besser schlafen gehen sollte... Die Idee, Parameter Expansion zu nutzen finde ich gut, das macht die Zeile noch etwas kompakter (wer näheres über den Ausdruck wissen möchte, "Parameter Expansion" in bash(1) erläutert die Funktionsweise).