MP3 rekodieren
SorgenkindMech
- php
0 ChrisB
moins ;)
soooo, hier mal wieder ne nette frage *g*
vorab, das ganze läuft auf nem eigenen server, auf dem ich tun und lassen kann, was ich will, und es wird nie zu nem hoster geschoben, sprich ich habe keine einschränkungen
geht um folgendes:
ich hab n script, was n ordner indiziert, und alle mp3-dateien findet
so, jetz kan ich auf meine seite gehen und sehe die da schön aufgelistet
jetz will ich aber, dass man die abspielen kann, in nem iframe, nem popup, mir egal, am besten über n link auf ne m3u, die ich generiere
alles gut und schön, die audiodateien werden aber von den leuten natürlich in entsprechender qualität aufgenommen, also meist über 200 kb/s
ich will, dass mein script nun folgendes macht:
ich klicke auf link, popup oder sonstwas wird geladen "play.php?fileid=42"
nun wird erstens ne m3u-datei generiert (hach wie einfach url rein und gut is, ok header angeben bla blub wegen dateiname und typ)
da schreib ich jetz als adresse rein: http://blablub/get_kleines_mp3.php?file=$_GET['fileid']
und den inhalt dieser get_kleines_mp3.php - da liegt mein problem
das scrit soll sich halt die datei nehmen, die datei rekodieren und zurückgeben, am besten so mit 20-56 kbit / sec oder so, egal, kann ich mir ja dann aussuchen
sprich ein php-script, was in der lage ist, mp3-rekodierung on-demand zu realisieren
ich mein ok, ich könnt n command-line utility nehmen, nur wie leite ich die ausgabe dieses utils wieder zurück an php? will ja nich extra irgendwo ne datei dafür schreiben, die ich dann irgendwann wieder löschen muss ...
hoffe mein problem kam klar rüber, und ich hoffe, jemand weiß rat ;)
bis denn dann
Hi,
ich mein ok, ich könnt n command-line utility nehmen, nur wie leite ich die ausgabe dieses utils wieder zurück an php? will ja nich extra irgendwo ne datei dafür schreiben, die ich dann irgendwann wieder löschen muss ...
Das erschiene mir aber wesentlich empfehlenswerter ...
mp3-Kodierung kostet Rechenzeit - und zwar vergleichsweise viel, verglichen mit dem, was ein Webserver sonst so an Aufgaben zu erledigen hat.
Dein >220kbps-mp3 muss erst mal in WAV dekodiert werden, und das dann wieder in <=56kbps - das jedes Mal on-the-fly zu machen, ist von der Performance her alles andere als eine gute Idee.
<=56kbps braucht ca. ein halbes MB pro Minute, sollte also eigentlich unproblematisch sein, das in Dateiform abzulegen. Wenn du noch ein bisschen weniger Bitrate, und dann vielleicht auch noch Mono statt Stereo in Kauf zu nehmen bereit bist (Stereo rockt bei solchen Bitraten eh kaum mehr), kannst du die Dateigroessen noch kleiner halten.
Anyway, LAME bspw. ist m.W. durchaus in der Lage, seinen Output an STDOUT zurueckzugeben - von PHP aus per system() oder passthru() aufgerufen, sollte das Gewuenschte damit also durchaus machbar sein.
LAME ist ein relativ langsamer Kodierer, dafuer aber qualitativ nach weitlaeufiger Meinung der Beste - bei den anvisierten Bitraten erscheint mir letzteres allerdings auch nicht mehr sonderlich relevant, da kannst du dich also durchaus noch nach einem "Schnelleren" umsehen, der dann ggf. etwas schlechtere Qualitaet liefert.
MfG ChrisB
Moin,
Dein >220kbps-mp3 muss erst mal in WAV dekodiert werden,
Bin mir nicht sicher, aber ich glaube, es gibt auch encoder, die das direkt machen. Zumindest in einem Arbeitsschritt, ohne dass zwischendurch in WAV gewandelt wird (mencoder z.b.) - ggf. macht er aber intern genau das, dass er die einzelnen Frames in PCMs zerlegt und dann wieder recodiert.
Ansonsten, full Ack, on the fly ist vermutlich ungünstig.
Viele Grüße,
Jörg
Hello,
Ansonsten, full Ack, on the fly ist vermutlich ungünstig.
zumal ich mir bei derartigem "Streaming" sorgen um sowas wie eine maximum execution time machen würde.
MfG
Rouven
Hi,
Dein >220kbps-mp3 muss erst mal in WAV dekodiert werden,
Bin mir nicht sicher, aber ich glaube, es gibt auch encoder, die das direkt machen. Zumindest in einem Arbeitsschritt, ohne dass zwischendurch in WAV gewandelt wird (mencoder z.b.) - ggf. macht er aber intern genau das, dass er die einzelnen Frames in PCMs zerlegt und dann wieder recodiert.
Ich wuesste von keinem mp3-Transkodierer, der diesen Schritt auslassen wuerde. Es mag aber durchaus sein, dass einige das ohne temp-Dateien hinkriegen.
Aber ganz ohne Wandlung zurueck in WAV-Format - das waere dann vergleichbar mit dem, was man bei Ogg Vorbis mal unter dem Stichwort "Bitrate Peeling" angedacht hatte - aus bereits kodierten Daten in Qualitaetsstufe X Daten in geringerer Qualitaetsstufe Y zu machen, ohne den Zwischenschritt der Dekodierung (also so, als ob man den Kodiervorgang gleich mit der Qualitaetsstufe Y auf den Originaldaten vorgenommen haette).
Das klang interessant, und sollte ueber ziemlich komplizierte Tabellen realisiert werden, die irgendwelche Faktoren/Algorithmen fuer diese Umwandlung abbilden sollten, aber auch fuer in heutiger (Home-)IT verfuegbare Datenkapazitaeten noch "riesig" waren - und wurde dann wieder aufgegeben, weil's unpraktikabel war. Von Ogg Vorbis Qualitaetsstufe X auf X-1 hat's glaube ich mal halbwegs funktioniert - aber fuer die geringe Einsparung bei der Bitrate war's den Aufwand nicht wert. (Urspruenglich war's mal dafuer gedacht, die Daten auf dem heimischen PC in hoher Qualitaetsstufe lagern zu koennen, und fuer einen mobilen Player mit geringer Kapazitaet dann "mal eben" um mehrere Qualitaetsstufen zu verringern, ohne dauerhaft beide Versionen auf dem PC lagern zu muessen. Die Entwicklung bei den mobilen Playern hinsichtlich Kapazitaet hat das dann aber auch mittlerweise obsolet werden lassen.)
MfG ChrisB