Vollständige Version anzeigen : Linux - Befehl verstehen


Heisenberg
17.12.2011, 20:54

Guten Abend,

ich habe eben danach gegoogled, wie ich eine -flac Datei ins -mp3 Format konvertieren kann.
Ich würde gerne den Befehl verstehen:

ffmpeg -i input-flac -vn -f wav - | lame --v -V7 - out-mp3

Ich benutze das Programm ffmpeg. -i gibt an dass die Datei "input-flac" konvertiert werden soll. Wofür stehen -vn und -f? Dann kommen: " wav - | " Den Hochstrich verstehe ich nicht. Ich schätze dass die Datei evtl. somit weitergereicht wird? Dann wird Lame verwendet (ist das ein eigenständiges Programm? mit den Parametern "--v -V7 - " -> was hat das zu bedeuten?
out-mp3 ist dann wieder klar: halt die entstandene -mp3 Datei.

Ist das was ich mir geacht habe richtig? Und was bedeuten die anderen Parameter?

mtxkl
17.12.2011, 21:23

~Befehl~ + -h oder -? oder -help oder --help
bzw.

ffmpeg -h
ffmpeg -?
ffmpeg -help
oder
ffmpeg --help

Fraggdieb
17.12.2011, 21:35

Mh, guck mal_. jedes Programm hat eine Manpage oder eine -h (Hilfe) funktion. Wobei der Befehl oben, mein ich, falsch ist. Sollte lauten:
fmpeg -i input-flac -vn -f wav - | lame -V 0 - neu-mp3

Fangen wir mal von links nach rechts an

-i (input file name)

-vn (disable video)

-f (force format) (WAV)

-V (set ffmpeg verbosity level)

Weitergereicht ist schon richtig interpretiert, quasi übernimmt "Lame" nun die umwandlung. Lame ist der MP3 Encoder

Mr. Mouse
17.12.2011, 21:50

Und wenns dir um die Pipe (" | ") geht

-> __-linfo-org/pipes-html

Heisenberg
17.12.2011, 23:12

Linux - Befehl verstehen

Danke schon mal. Und wie mache ich das ganze mit Wildcards, sodass alle Dateien umbenannt werden?

ffmpeg -i 1-flac -vn -f wav - | lame -V0 - 1-mp3

Wenn ich jetzt einfach statt *-flac und *-mp3 setze, bekomme ich einen Fehler, sprich es wird eine *-mp3 erzeugt.

bloodyphoenix
17.12.2011, 23:35

ich glaube einfach nen * als wildcard zu nehmen, wird so nicht funktionieren.

probiers mal mit

for d in *-flac; do ffmpeg -i $d -vn -f wav - | lame -V0 - $d-mp3; done


Bedeutet: Startet eine Schleife, die der variable d alle einträge von *-flac (also alle flac dateien) nacheinander zuweist. Innerhalb der Schleife führt er deinen Befehl aus, ersetzt dabei die Dateinamen durch $d (also die Variable, in der du den aktuellen Dateinamen gespeichert hast).
Das macht er, bis er alle Dateien durch hat.

Einziger Nachteil: die datei heisst bla-flac-mp3. dagegen hilft es das -flac wegzuschneiden. ich benutze dafür gerne "sed"


for d in *-flac; do ffmpeg -i $d -vn -f wav - | lame -V0 - $(echo $d | sed 's/\-flac//')-mp3; done

Bedeutet: Nehme $d und stecke es in sed. sed ersetzt dann -flac durch nix und fertig ist der richtige dateiname bla-mp3

Obs einfacher geht? Vielleicht? Obs trotzdem funktioniert? Ziemlich sicher ;)

Edit: im sed Befehl . mit \ escapen, sonst matcht . auf alle Zeichen und nicht nur Punkte (dürfte zwar keinen Unterschied machen, aber so ists "richtiger")

3X3X3X3
20.12.2011, 14:18

Danke schon mal. Und wie mache ich das ganze mit Wildcards, sodass alle Dateien umbenannt werden?

ffmpeg -i 1-flac -vn -f wav - | lame -V0 - 1-mp3

Wenn ich jetzt einfach statt *-flac und *-mp3 setze, bekomme ich einen Fehler, sprich es wird eine *-mp3 erzeugt_
als input kannst du vllt die wildkart nutzen, da er jede -flac datei lesen wird, jedoch wird er nicht zufällige namen für den output verwenden ^^ vllt gerade mit einer schleife wie davor beschrieben austattetn, so dass die titel durch nummeriert werden ;)

raid-rush.ws pr