Ich versuche gerade eine AVI Datei mittels den Funktionen der VfW32.lib zu dekodieren und daraus Audio und Video zu extrahieren. Video klappt wunderbar, nur mit dem Ton habe ich ein kleines Verständnisproblem: Das Audioformat wird richtig erkannt, soweit funktioniert es schon. Ich lese mittels AVIStreamRead den Audiostream und lasse diese Funktion selbst entscheiden, wieviel Daten ich lesen soll (mittels AVISTREAMREAD_CONVENIENT). Ich bekomme also 3840Bytes an Daten geliefert. Diese Daten kann ich auch abspielen, nur sind diese anscheinend im mp3 Format, d.h. ich muss diese noch selbst dekodieren. Ich dachte, dass ich für lStart den Wert hochzähle, und so nach und nach alle Audiodaten lesen kann. Nur leider bekomme ich immer wieder die ersten 3840 Bytes, also immer etwa die ersten 0,5s des Videos. Vermutlich habe ich irgendein Verständnisproblem bei dieser Funktion, was mache ich also falsch ? Oder gibt es sogar eine einfache Lösung, um an die fertigen Wavedaten zu kommen ? http://msdn2.microsoft.com/en-us/library/ms706789(VS.85).aspx
Trennen von Audio und Video durch sog. Demultiplexing beherrscht VirtualDub Mod. Das Ausgabeeformat ist allerdings auch u.a. MP3, bloss sollte es kein Problem darstellen, daraus WAV zu machen. http://german.doom9.org/index.html?/virtualdub_procedures-ger.htm
So habe ich das früher auch gemacht: VirtualDub -> BMP Sequenz + Wave. Nur leider muss dazu das komplette Video dekomprimiert werden, was erstmal etliche 10GB groß wird. Von daher würde ich das ganze gerne alles in einem C++ Programm erledigen, da ich die AVI Datei direkt lesen und die Daten dann direkt weiterverarbeiten kann.
Der mplayer kann das direkt...
1 | #!/bin/bash
|
2 | |
3 | for file in *.avi |
4 | do
|
5 | mencoder "$file" -o $(basename "$file" .avi).mp3 -oac mp3lame -ovc copy -of rawaudio |
6 | |
7 | done
|
das ist zwar ein bash-script sollte aber schön zeigen welche parameter gebraucht werden... mencoder ist übrigens beim mplayer dabei.. der mplayer selbst hat auch... 73
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.