PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wma2mp3 id tags


craano
09.02.07, 22:44
Hallo,

ich versuche gerade einen Haufen .wma Dateien in .mp3 zu enkodieren.
In Anlehnung an diesen Thread:
http://www.linuxforen.de/forums/showthread.php?t=214584&highlight=wma+mp3
verwende ich folgenden (Beispiel-)Befehl, den ich später in ein script einbauen werde:
mplayer -vo null -ao pcm:file=audiodump.wav Johnny\ Cash\ -\ The\ Night\ Hank\ Williams\ Came\ To\ Town.wma; lame -h --r3mix -b 192 audiodump.wav Johnny\ Cash\ -\ The\ Night\ Hank\ Williams\ Came\ To\ Town.mp3; rm audiodump.wav

Das klappt fasst!
Zwei Probleme / Merkwürdigkeiten treten auf:

1. Die ID Tags der .wma Dateien werden unter Windows richtig angezeigt (unter Eigenschaften -> Dateiinfo -> Erweitert. Auch der Windows Media Player zeigt sie korrekt an.) Wenn ich unter Gnome einen Rechtsklick auf die Datei tätige wird nur der Titel und Interpret angezeigt, Album, Jahr, Titelnummer werden gar nicht gezeigt oder sind "unknown". Diese Informationen fehlen dann auch in der späteren .mp3 Datei.
Kann / muss ich die id tags irgendwie auch unter Linux auslesen und in die .mp3 Datei beim Konvertieren überführen?

2. Ich gebe ein Bitrate von 192 an, da auch das Ausgangsmaterial diese Bitrate hat. Ein Rechtsklick auf die konvertierte Datei unter Gnome zeigt 191 kbit/s an. mpg321 zeigt bei der Wiedergabe 128 kbit/s an und unter Windows werden sogar 482 kbit/s im Eigenschaften Menu und im Media Player bei der Wiedergabe angezeigt. Was stimmt denn nun? Ist das normal?

Kennt jemand diese Probleme?
Wirklich ärgerlich sind die fehlende id tags, das erschwert die spätere Ordnung doch sehr. Ich habe leider nicht die Möglichkeit unter Windows die Konvertierung vorzunehmen, aber das muss Linux doch auch können!

Grüße.
craano.

/EDIT: Ich sehe gerade, dass ich mit den ID3 tag options von lame die tags explizit in die .mp3 Datei schreiben kann. Gibt es irgendeine Möglichkeit die ig tags des wma vorher auszulesen, damit ich die in meinem script für den lame Aufruf weiterverarbeiten kann?

craano
11.02.07, 00:48
Kleines Update:
Amarok kann die Tags der wma Dateien erkennen.

Ich versuche jetzt ohne den Umweg über eine wav Datei direkt mit ffmpeg eine mp3 Datei zu erstellen. Ich denke, dass die Tags komplett verloren gehen, da sie nicht in der wav Datei enthalten sind.

Leider bekomme ich immer die Fehlermeldung, das der Codec nicht unterstützt wird. Lame ist installiert, ich verwende hier gerade ein Ubuntu 6.10

ffmpeg -i Bill\ Engvall\ -\ Boys\ Have\ No\ Discretion\ \(Album\ Version\).wma -vn -ab 192 -ar 44100 -acodec mp3 Bill\ Engvall\ -\ Boys\ Have\ No\ Discretion\ \(Album\ Version\).mp3
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --enable-gpl --enable-pp --enable-pthreads --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 0d.49.0.0
libavcodec version: 0d.51.11.0
libavformat version: 0d.50.5.0
built on Sep 20 2006 00:26:15, gcc: 4.1.2 20060906 (prerelease) (Ubuntu 4.1.1-13ubuntu2)
Input #0, asf, from 'Bill Engvall - Boys Have No Discretion (Album Version).wma':
Duration: 00:06:11.4, start: 1.578000, bitrate: 193 kb/s
Stream #0.0: Audio: wmav2, 44100 Hz, stereo, 192 kb/s
File 'Bill Engvall - Boys Have No Discretion (Album Version).mp3' already exists. Overwrite ? [y/N] y
Output #0, mp2, to 'Bill Engvall - Boys Have No Discretion (Album Version).mp3':
Stream #0.0: Audio: 0x0000, 44100 Hz, stereo, 192 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Unsupported codec for output stream #0.0

Weiß jemand Rat?

Grüße.
craano.

craano
15.02.07, 22:24
Ich weiß nicht mehr, wo ich noch gucken / suchen soll.
Wie kann ich ffmpeg denn bloß dazu überreden die id Tags mit in die erstellte mp3 Datei zu schreiben?

Ich verstehe nicht, wieso Amarok die Tags ohne Probleme anzeigt, doch egal wie ich konvertiere, gehen sie immer verloren! Hat denn hier noch niemand viele mp3s mit id3 Tags erzeugt?

Für Apple gibt es ein Frontend für ffmpeg, welches genau das kann:
http://www.easywma.com/
Jetzt frage ich mich, mit welchen Optionen ffmpeg dort aufgerufen wird?

Hat jemand vielleicht eine Idee, wie man denn die Tags aus der wma in die mp3 kopieren kann, nachdem ich mit ffmpeg die Datei konvertiert habe?

Grüße.
craano.

fuffy
16.02.07, 07:20
Hi!

2. Ich gebe ein Bitrate von 192 an, da auch das Ausgangsmaterial diese Bitrate hat. Ein Rechtsklick auf die konvertierte Datei unter Gnome zeigt 191 kbit/s an. mpg321 zeigt bei der Wiedergabe 128 kbit/s an und unter Windows werden sogar 482 kbit/s im Eigenschaften Menu und im Media Player bei der Wiedergabe angezeigt. Was stimmt denn nun? Ist das normal?
Wenn der Windows Media Player etwas >320 anzeigt, liegts an VBR. Der WMP kommt bei VBR-MP3 nicht mit der korrekten Anzeige der Bitrate klar. Was mpg321 anzeigt, weiß ich nicht, GStreamer liefert jedenfalls die durchschnittliche Bitrate.

Warum verwendest du eigentlich --r3mix? Der Einfachheit halber würde ich die Presets verwenden. Und auf jeden Fall LAME 3.97 einsetzen.

Wirklich ärgerlich sind die fehlende id tags, das erschwert die spätere Ordnung doch sehr. Ich habe leider nicht die Möglichkeit unter Windows die Konvertierung vorzunehmen, aber das muss Linux doch auch können!
Wieso muss "Linux" unbedingt mit proprietären Audio- und Tag-Formaten umgehen können? Bei MP3 und ID3 sind ja (zumindest) die Spezifikationen veröffentlicht.

Bei dir wurde ffmpeg ohne LAME-Unterstützung kompiliert, vermutlich weil ffmpeg in universe ist und lame in multiverse.

Gruß
fuffy

rudi_m
16.02.07, 09:19
2. Ich gebe ein Bitrate von 192 an, da auch das Ausgangsmaterial diese Bitrate hat.

Qualitaetsverlust gibts trotzdem, das audiodump.wav weiss nicht mehr welche bitrate das wma mal hatte.
Ein Rechtsklick auf die konvertierte Datei unter Gnome zeigt 191 kbit/s an. mpg321 zeigt bei der Wiedergabe 128 kbit/s an und unter Windows werden sogar 482 kbit/s im Eigenschaften Menu und im Media Player bei der Wiedergabe angezeigt. Was stimmt denn nun? Ist das normal?
Du verwendest
--r3mix Uses r3mix VBR preset
also variable bitrate! Viele player zeigen dann einfach die bitrate des ersten frames an.
xmms zeigt beim abspielen immer die bitrate das aktuellen frames an - sollte sich also staendig veraendern.

Gibt es irgendeine Möglichkeit die ig tags des wma vorher auszulesen, damit ich die in meinem script für den lame Aufruf weiterverarbeiten kann?
wenn es id3 tags sind sollte es mit id3v2 gehen
siehe http://www.easylinux.de/2005/05/082-id3/

asonsten vlt selbst was basteln.
id3v1 tags befinden sich am anfang der datei
id3v2 am Ende
einfach mal mit cat,head,tail oder hexdump angucken.

craano
16.02.07, 10:01
Da ist etwas dran gewesen, dass ffmpeg ohne Lame Unterstützung in den Paketquellen ist!
Jetzt habe ich noch einmal aus den Quellen kompiliert und installiert. Nun klappt der obige ffmpeg Aufruf und ich spare mir schon mal den Umweg über die wav Datei. So hoffe ich, muss ich keinen Qualitätstverlust in Kauf nehmen. Auch die Bitrate ist nun konstant. Sollte doch zumindest so sein, wenn ich eine Bitrate gleich oder größer gleich dem Ausgangsfile wähle.
Ein Teilerfolg!

Wieso muss "Linux" unbedingt mit proprietären Audio- und Tag-Formaten umgehen können? Bei MP3 und ID3 sind ja (zumindest) die Spezifikationen veröffentlicht.

Das Problem ist, dass ich nunmal einen Haufen Dateien in diesem Format habe und ich diese nun gerne konvertieren möchte / muss.
Ich habe auch schon das tool id3v2 gefunden, doch leider kann das auch nicht mit meinen Ausgangsdateien umgehen.
Allerdings ist es unter Linux möglich auch die tags einer wma zuverlässig auszuwerten, da sie unter Amarok richtig angezeigt werden.

Es war viel Mühe meine Musik mit korrekten tags auszustatten! Ich mag Amarok, deswegen sind die Tags für mich so wichtig, nur habe ich beim Format leider aufs falsche Pferd gesetzt.

Grüße.
craano.

fuffy
16.02.07, 10:20
So hoffe ich, muss ich keinen Qualitätstverlust in Kauf nehmen.
Doch. Der Stream muss trotzdem erst decodiert und anschließend encodiert werden. Ob das jetzt über einen internen Puffer oder eine externe Datei geschieht, spielt keine Rolle.

Ich habe auch schon das tool id3v2 gefunden, doch leider kann das auch nicht mit meinen Ausgangsdateien umgehen.
WMA verwendet ein eigenes proprietäres Tag-Format und nicht ID3.

Allerdings ist es unter Linux möglich auch die tags einer wma zuverlässig auszuwerten, da sie unter Amarok richtig angezeigt werden.
Wenn Amarok sie richtig anzeigt, dann kommt TagLib also mit den Tags von WMA-Dateien klar.

Du könnest dir jetzt ein Script schreiben, dass die Tags der WMA-Dateien via TagLib ausliest und in die MP3-Dateien reinschreibt. Es gibt verschiedene Bindings für TagLib, unter anderem in Python und Ruby.
Beachte allerdings, dass TagLib (somit auch Amarok) im Falle von ID3v2 gleich die Version 2.4 schreibt, mit der viele proprietäre ID3-Reader nicht klar kommen.

Gruß
fuffy

craano
16.02.07, 18:48
OK, da bin ich ums skripten wohl nicht herum gekommen.
Vielleicht kann es noch jemand gebrauchen, der etwas ähnliches vor, also habe ich das Skript mal mit hochgeladen.

Eine kleine Frage am Rande, bevor ich jetzt meine gesamte Musik konvertiere.
Ausgangsmaterial ist wma mit 192 kbit/s, erreiche ich mit diesem Aufruf von ffmpeg eine verlustfreie Konvertierung zu mp3?
ffmpeg -i TEMP.wma -vn -ab 256 -ar 44100 -acodec mp3 TEMP.mp3

Skript:
#!/usr/bin/perl -w
#
#
#
#
use Audio::WMA;
my $INPUT='~/Musik';
my $BEFEHL;
my $artist;
my $title;
my $album;
my $year;
my $genre;
my $track;
my $comment = "Fancy Music Collection";
my $filename;

chdir $INPUT;
my @wmas = glob "*.wma";

foreach (@wmas) {
my $wma = MeinWMA->new($_);
my $tags = $wma->tags();
rename $_ , "TEMP.wma";

print "\n +++ Beginne Konvertierung für: $_... \n\n";
$BEFEHL = "ffmpeg -i TEMP.wma -vn -ab 256 -ar 44100 -acodec mp3 TEMP.mp3";
qx($BEFEHL);

print "\n +++Konvertierung für: $_ abgeschlossen. \n ";
print "\n +++Lese Tags ein für: $_ \n\n";
$artist = $tags->{"AUTHOR"};
$track = $tags->{"TRACKNUMBER"};
$album = $tags->{"ALBUMTITLE"};
$title = $tags->{"TITLE"};
$genre = $tags->{"GENRE"};
$year = $tags->{"YEAR"};

print "\n +++Schreibe Tags in Datei... \n\n";

$BEFEHL = "id3v2 --artist \"$artist\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --track \"$track\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --album \"$album\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --song \"$title\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --genre \"$genre\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --year \"$year\" TEMP.mp3";
qx($BEFEHL);
$BEFEHL = "id3v2 --comment \"$comment\" TEMP.mp3";
qx($BEFEHL);

print "\n +++Tags werden in Datei geschrieben... \n\n";

print "\n +++Datei wird umbenannt.. \n\n";

$filename = "$track" . " - " . "$title" . " - " . "$artist" . " - " . "$album" . " - " . "$year" . ".mp3";
$filename =~ s/\*/_/g;
$filename =~ s/\|/_/g;
$filename =~ s/\\/_/g;
$filename =~ s/:/_/g;
$filename =~ s/\"/_/g;
$filename =~ s/\>/_/g;
$filename =~ s/\</_/g;
$filename =~ s/\?/_/g;
$filename =~ s/\//_/g;

rename "TEMP.mp3" , $filename;

print "\n +++$filename fertig erstellt. \n\n";
print "\n +++Räume auf... \n";

unlink "TEMP.wma";
}



Grüße.
craano.

fuffy
16.02.07, 19:17
Eine kleine Frage am Rande, bevor ich jetzt meine gesamte Musik konvertiere.
Ausgangsmaterial ist wma mit 192 kbit/s, erreiche ich mit diesem Aufruf von ffmpeg eine verlustfreie Konvertierung zu mp3?
ffmpeg -i TEMP.wma -vn -ab 256 -ar 44100 -acodec mp3 TEMP.mp3
Nein, eine verlustfreie Konvertierung in ein verlustbehaftetes Kompressionsformat ist prinzipbedingt unmöglich. Das sagte ich aber bereits.

Gruß
fuffy

PS. Wenn du schon Audio::WMA verwendest, warum nicht auch MP3::Tag? Auf jeden Fall würde ich nicht für jede einzelne Datei mehrmals id3v2 aufrufen.

craano
16.02.07, 19:42
Nein, eine verlustfreie Konvertierung in ein verlustbehaftetes Kompressionsformat ist prinzipbedingt unmöglich. Das sagte ich aber bereits.

Die wma - Dateien sind ja auch schon komprimiert, oder?
Ich habe das immer so verstanden, das mp3 für den Menschen nicht hörbare Frequenzen nicht mit speichert.
Ich frage dann mal anders, ermöglicht der obige ffmpeg - Aufruf denn eine Konvertierung die möglichst wenig verlustreich ist?
Würdest Du andere Parameter wählen?

PS. Wenn du schon Audio::WMA verwendest, warum nicht auch MP3::Tag? Auf jeden Fall würde ich nicht für jede einzelne Datei mehrmals id3v2 aufrufen.
Ich bin nicht gerade der begnadeste Skripter vor dem Herrn. :cool: id3v2 ging am schnellsten und ich hatte nicht wirklich Lust mich auch noch durch MP3::Tag zu wühlen. Wenn ich mal Lust habe, werde ich das noch eleganter lösen. Fürs erste reicht es erstmal. Die eine Sekunde zusätzliche Laufzeit pro Datei kann ich verschmerzen. Bin erstmal froh eine Lösung zu haben, die funktioniert.

Jetzt noch ein bisschen die ffmpeg Optionen tunen, um ein möglichst gutes Ergebnis zu erreichen, dann kann es losgehen.

Grüße.
craano.

rudi_m
16.02.07, 21:49
Die wma - Dateien sind ja auch schon komprimiert, oder?
Genau, und bei dieser komprimierung gab es schon einmal qualitaetsverlust.
Wenn man Du es nun umwandelst in ein anderes Format, wird es dabei implizit in wav umgewandelt und dann erneut (unter quali verlust) komprimiert.
Ob man das heraushoert ist subjektiv.
Auf jedenfall merkst Du es deutlich, wenn du es 10 mal umwandelst (das hab ich schon mal getestet irgendwann).

Ich habe das immer so verstanden, das mp3 für den Menschen nicht hörbare Frequenzen nicht mit speichert.
So die theorie, der Unterschied zwischen original und mp3 is aber auf jedenfall messbar und unsere Hunde, Katzen und Pflanzen werden es auch sofort heraushoeren.

Ich frage dann mal anders, ermöglicht der obige ffmpeg - Aufruf denn eine Konvertierung die möglichst wenig verlustreich ist?
Keine Ahnung, mach doch die Hoerprobe! Oder nimm sicherheitshalber eine hoehere bitrate - platz kostet ja nichts mehr.

Ich persoenlich wuerde einfach das was ist wma lassen. Wenn Du auf nem hardware player hoeren willst der das nicht kann dann wandle es doch vorher fix in mp3 um - geht doch sehr schnell auf nem aktuellen Rechner.

Die auf_immer_und_ewig_mit_allem_kompatible music Sammlung wirds eh nie geben. Ich tippe mal in 3 jahren gibts nicht mal mehr autoradios die daten CDs lesen koennen - wer weiss was fuer codecs dann aktuell sind.

Also sichere dein Ausgangsmatrial einfach so wie es jetzt ist.

craano
16.02.07, 22:30
Das Ausgangsmaterial sichern werde ich sowieso, das kann ich ja auf ein paar DVDs wegbrennen, man weiß ja nie.
Jedes mal umwandeln, wenn ich es auf einen Player packe, möchte ich nur ungern.

Eine höhere Bitrate habe ich mir auch überlegt. Das Ausgangsmaterial hat 192 meine fertigen mp3s dann 256 kbit/s, beide 44100 Hz. Ich habe keine Ahnung, ob einen noch höhere Bitrate Sinn machen würde.

Meines Wissens benutzt ffmpeg lame zum mp3 enkodieren, das musste ich ja auch nachinstallieren. Ich habe im Internet gelesen, dass lame qualitativ gute mp3s erzeugt. Nur bin ich mir bei den Parametern unsicher, die ich ffmpeg übergebe und die ffmpeg dann lame übergibt.

Ich versuche einfach mit dem gegebenen Ausgangsmaterial das beste Ergebnis als mp3 zu erzielen und die Qualitätsverlsute so gering wie möglich halten.

Grüße.
craano.

fuffy
17.02.07, 11:47
Hi!

Ich versuche einfach mit dem gegebenen Ausgangsmaterial das beste Ergebnis als mp3 zu erzielen und die Qualitätsverlsute so gering wie möglich halten.
Die beste Quelle dafür ist Hydrogenaudio (http://wiki.hydrogenaudio.org/index.php?title=LAME).

Gruß
fuffy

craano
17.02.07, 15:44
Hi!


Die beste Quelle dafür ist Hydrogenaudio (http://wiki.hydrogenaudio.org/index.php?title=LAME).

Gruß
fuffy

OK, danke. Ich habe mir das einmal durch gelesen und auch in der Lame Dokumentation selbst gestöbert.
Mit -V 0 bis -V 9 kann ich die Qualitätsstufen bei variabler Bitrate einstellen. Eine variable Bitrate wollte ich zwar Anfangs nicht, aber mit -V 0 schein man die bestmögliche Qualität erreichen zu können.
Das möchte ich nun gerne probieren.
Leider akzeptiert Lame als Input ja kein wma, also bleibt mir nur der Umweg über ffmpeg. Die Doku / Manpage von ffmpeg gibt leider nur wenig her über Audio Options. mit -acodec mp3 kann man lediglich Lame zu enkodieren auswählen.
Ich kann lediglich die Bitrate einstellen (zZ 256, eventuell macht auch 320 Sinn?), aber keine dieser Lame Presets mit übergeben.

Wie kann ich denn mittel ffmpeg Lame meine entsprechenden Optionen übergeben?

Grüße.
craano.

fuffy
17.02.07, 17:10
Mit -V 0 bis -V 9 kann ich die Qualitätsstufen bei variabler Bitrate einstellen.
Ja, allerdings würde ich noch --vbr-new hinzufügen.

Eine variable Bitrate wollte ich zwar Anfangs nicht, aber mit -V 0 schein man die bestmögliche Qualität erreichen zu können.
Naja, die bestmögliche Qualität für MP3 liefert --preset insane bzw. -b 320. Allerdings dürfte das Overkill sein.

Leider akzeptiert Lame als Input ja kein wma, also bleibt mir nur der Umweg über ffmpeg.
Es wäre immer noch möglich, erst zu dekodieren und dann mit Lame die MP3-Datei zu erzeugen, auch via Pipes.

Ich kann lediglich die Bitrate einstellen (zZ 256, eventuell macht auch 320 Sinn?), aber keine dieser Lame Presets mit übergeben.
Bei einer aktuellen Lame-Version (z.B. 3.97) kannst du die Wirkung der Presets auch anders erreichen.
Beispiel: --alt-preset standard == --preset standard == -V 2
Das war bei älteren Versionen noch anders.

Gruß
fuffy

craano
17.02.07, 17:44
Es wäre immer noch möglich, erst zu dekodieren und dann mit Lame die MP3-Datei zu erzeugen, auch via Pipes.


Danke für Deine unermüdliche Hilfe bis hier her!
Im Grunde habe ich das ursprüngliche Problem schon längst erreicht; Ziel war eine Möglichkeit zu finden die Tags der wma beim enkodieren in die mp3s zu übernehmen. Das funktioniert soweit.

Ich möchte den Thread jetzt hier nicht unnötig aufblähen.

Die Presets von Lame habe ich soweit verstanden, doch eine Frage ist neu entstanden. Wie und mit welchen Programm kann ich denn zu Lame eine dekodierte wma durchpipen?

Ich habe versucht das mit ffmpeg zu machen, doch dann bekomme ich eine Fehlermeldung, dass ich keine Outfile angegeben habe.

Wenn Du mir ein Beispiel geben könntest, dann kann ich mein obiges Skript noch etwas anpassen. Direkt mit Lame zu arbeiten hätte zweierlei Vorteile.
Erstens bin ich mit meinen Aufruf Optionen viel flexibler und zweitens unterstützt lame id3 Tags. Also wäre der wiederholte Aufruf von id3v2 unnötig und ich könnte alles in einem Abwasch erledigen.

Mir fehlt nur eine Idee, wie ich zu lame eine dekodierte wma pipen kann.

Falls Interesse werde ich natürlich das kleine Perl Schätzchen hier wieder posten.

Grüße.
craano.

/EDIT:
So nach vielen Probieren habe ich einen Weg gefunde:
ffmpeg -i TEMP.wma -f wav - | lame --preset insane - > TEMP.mp3
Ob das nun das bestmögliche Ergebnis ist, muss ich noch ein wenig testen.

Danke für alle Hilfe.

craano
21.02.07, 22:19
Hallo fuffy,

ich muss Dein Wissen noch einmal in Anspruch nehmen.

Auf diese Weise rufe ich ffmpeg auf und übergebe an lame:
ffmpeg -i $wma -f wav - | lame -V 0 --vbr-new --id3v2-only --ta \"$artist\" --tn \"$track\" --tl \"$album\" --tt \"$title\" --tg \"$genre\" --ty \"$year\" --tc \"$comment\" - > $mp3"

Die Tags ermittele ich vorher mit dem oben schon geposteten Perl Code.
Das klappt auch einwandfrei und mit der Qualität bin ich soweit auch ganz zufrieden.
Dabei wird ja nun mit variabler Bitrate encodiert, so das die Dateigrößen überschaubar bleiben.
Bei bei ca. 1 / 10 der Dateien tritt ein Phänomen auf. Die Laufzeit der Titel wird nicht richtig angezeigt, sie ist immer deutlich zu hoch. (Amarok und auch der Ipod geben sich dabei nichts) Auch ein Springen während des Abspielens nach vorne oder hinten im Lied ist dann teilweise nicht möglich! Das nervt doch ziemlich. :mad:

Xmms hingegen ermittelt immer die richtige Länge und auch ein "Spulen" nach vorne oder hinten klappt immer einwandfrei.

Ich vermute, dass Amarok / Ipod aufgrund der variablen Bitrate durcheinander kommen und die Titellänge aus Bitrate und Dateigröße errechnen. Am Anfang (erste Sekunde) sind es meistens immer nur 32 kbs, die werden ja auch unter Eigenschaften immer angezeigt. 32 kbs bei 8 MB Dateigröße ergeben dann wahrscheinlich ca 30 Min. Doch während des Abspielens steigt die Bitrate!

Gibt es eine Möglichkeit die reale Länge zu ermitteln und mit in die Datei zu schreiben?

Grüße.
craano.

fuffy
22.02.07, 07:06
Hi!

Lame sollte das eigentlich von sich aus machen. Ich würde allerdings nicht in $mp3 pipen, sondern $mp3 als zweites Argument für Lame verwenden, also direkt nach "-". Dann könnte Lame z.B. in der Datei zurückspringen.

Gruß
fuffy

craano
22.02.07, 07:53
Guten Morgen,

schon wieder ein fettes Danke!
Fix ">" entfernt und schon macht lame so wie soll. :D
Sehr ärgerlich nur, dass ich jetzt wieder von vorne anfangen kann, aber dank unserer Vorarbeit beschränkt sich das auf ein bisschen kopieren und anschließen warten.

Grüße.
craano.

tormod
10.04.08, 10:58
Hallo zusammen,

da das Skript bei mir nicht so wirklich rund gelaufen ist und ich ein wenig andere Anforderungen hatt, hab ich das mal umgebaut und will es der Allgemeinheit nicht vorenthalten (da ich hier gelandet bin über Google denke ich das einige andere auch hier aufschlagen)

Das überarbeitete Skript macht nun folgendes:

1.) Es erwartet als Übergabeparameter den Namen eines Verzeichnisses, von dem aus es rekursiv alle (!) wma Dateien hernimmt.
2.) mittels des Tools "soundconverter" (anstatt ffmpeg) werden die WMAs nun in MP3s gewandelt. Der Dateiname bleibt dabei gleich, nur aus .wma wird nun .mp3.
3.) Die ID Tags der WMA Datei werden danach mit id3v2 in die MP3 geschrieben.
4.) Die WMA Datei wird danach gelöscht (!achtung!)

#!/usr/bin/perl -w
#
#

use Audio::WMA;
my $BEFEHL;
my $artist;
my $title;
my $album;
my $year;
my $genre;
my $track;
my $comment = "Meine tolle Musiksammlung";
my $filename;

my $INPUT = $ARGV[0];

die "Bitte als Parameter einen Verzeichnisnamen angeben von dem aus rekursiv konvertiert werden soll!" unless $INPUT;

@wmas = `find $INPUT -iname '*.wma' `;

foreach my $wmafilename (@wmas) {

chomp $wmafilename;

my $wma = Audio::WMA->new($wmafilename);
my $tags = $wma->tags();
rename $wmafilename , "TEMP.wma";

print "\n +++ Beginne Konvertierung für: $wmafilename.. \n\n";
$BEFEHL = "soundconverter -b -m audio/mpeg -s .mp3 TEMP.wma";
qx($BEFEHL);

print "\n +++Konvertierung für: $wmafilename abgeschlossen. \n ";
print "\n +++Lese Tags ein für: $wmafilename\n\n";
$artist = $tags->{"AUTHOR"};
$track = $tags->{"TRACKNUMBER"};
$album = $tags->{"ALBUMTITLE"};
$title = $tags->{"TITLE"};
$genre = $tags->{"GENRE"};
$year = $tags->{"YEAR"};

print "\n +++Schreibe Tags in Datei... \n\n";

$artist and $BEFEHL = "id3v2 --artist \"$artist\" TEMP.mp3";
$artist and qx($BEFEHL);
$track and $BEFEHL = "id3v2 --track \"$track\" TEMP.mp3";
$track and qx($BEFEHL);
$album and $BEFEHL = "id3v2 --album \"$album\" TEMP.mp3";
$album and qx($BEFEHL);
$title and $BEFEHL = "id3v2 --song \"$title\" TEMP.mp3";
$title and qx($BEFEHL);
$genre and $BEFEHL = "id3v2 --genre \"$genre\" TEMP.mp3";
$genre and qx($BEFEHL);
$year and $BEFEHL = "id3v2 --year \"$year\" TEMP.mp3";
$year and qx($BEFEHL);
$comment and $BEFEHL = "id3v2 --comment \"$comment\" TEMP.mp3";
$comment and qx($BEFEHL);

print "\n +++Tags werden in Datei geschrieben... \n\n";

print "\n +++Datei wird umbenannt.. \n\n";

my @parts = split( /\./,$wmafilename);
pop(@parts);
$newname = join('.', @parts);
$newname .= ".mp3";


rename "TEMP.mp3" , $newname;


print "\n +++$newname fertig erstellt. \n\n";
print "\n +++Räume auf... \n";

unlink "TEMP.wma";

}



Vielleicht kanns ja jemand brauchen :)

Gruß