Hallo,
ich benutze Xuggler zur Konvertierung von Audio zu Audio und Video zu Video. Das klappt alles wunderbar.
Doch bei der Konvertierung von Video zu Audio habe ich ein Problem: Die Ausgangsdatei ist 0 Byte groß bzw. das Programm stürzt ab.
Die .jar-Archive "slf4j-api-1.7.9.jar", "slf4j-simple-1.7.9.jar" und "xuggle-xuggler-5.4.jar" sind eingebunden. Kompiliert alles ohne Probleme.
Die Methode zur Konvertierung zwischen Audio und Audio bzw. Video und Video ist recht einfach:
Audio-Konvertierung:
Video-Konvertierung:
Doch bei der Konvertierung von einem Video zu einer Audio-Datei (was mir eigentlich am Wichtigsten ist! ), funktioniert nicht:
Es wird eine leere .wav-Datei erstellt und folgende Ausnahme geworfen:
Die Klasse VolumeAdjustMediaTool sieht übrigens so aus und erzeugt keine Fehler:
Hat von euch einer schon mal mit Xuggler gearbeitet?
Wie schon gesagt, mir ist wichtig, dass ich ein Video in eine Audio-Datei (WAV) umwandeln kann. Es muss nicht Xuggler genommen werden!
Bei JAVE ist das Problem, dass es glaube ich auf Mac nicht funktioniert. Gibt es da noch Alternativen?
Danke im Voraus!
Mit freundlichen Grüßen
Seikuassi
ich benutze Xuggler zur Konvertierung von Audio zu Audio und Video zu Video. Das klappt alles wunderbar.
Doch bei der Konvertierung von Video zu Audio habe ich ein Problem: Die Ausgangsdatei ist 0 Byte groß bzw. das Programm stürzt ab.
Die .jar-Archive "slf4j-api-1.7.9.jar", "slf4j-simple-1.7.9.jar" und "xuggle-xuggler-5.4.jar" sind eingebunden. Kompiliert alles ohne Probleme.
Die Methode zur Konvertierung zwischen Audio und Audio bzw. Video und Video ist recht einfach:
Audio-Konvertierung:
Java:
/** Konvertiert Audioformate untereinander. **/
public static void convertAudio(String source_name,String target_name,float volume_change){
IMediaReader source=null;
IMediaWriter target;
try{
source=ToolFactory.makeReader(source_name);
target=ToolFactory.makeWriter(target_name,source);
source.addListener(new VolumeAdjustMediaTool(volume_change)); // Lautstaerke anpassen
source.addListener(target);
while(source.readPacket()==null); // Konvertierung starten
return;
}finally{
if(source!=null){
source.close(); // Stream schliessen
}
}
}
Java:
/** Konvertiert Videoformate untereinander. **/
public static void convertVideo(String source_name,String target_name,float volume_change){
IMediaReader source=null;
IMediaWriter target;
try{
source=ToolFactory.makeReader(source_name);
target=ToolFactory.makeWriter(target_name,source);
source.addListener(new VolumeAdjustMediaTool(volume_change)); // Lautstaerke anpassen
source.addListener(target);
while(source.readPacket()==null); // Konvertierung starten
return;
}finally{
if(source!=null){
source.close(); // Stream schliessen
}
}
}
Java:
/** Konvertiert ein Video zu einer .wav-Datei. **/
public static void convertVideoToWAV(String source_name,String target_name,float volume_change)
throws IOException{
IMediaReader source=null;
IMediaWriter target;
source=ToolFactory.makeReader(source_name);
target=ToolFactory.makeWriter(target_name);
source.addListener(new VolumeAdjustMediaTool(volume_change)); // Lautstaerke anpassen
source.addListener(target);
while(source.readPacket()==null); // Konvertierung starten
source.setCloseOnEofOnly(false);
target.setForceInterleave(false);
return;
}
Code:
java.lang.UnsupportedOperationException: MediaWriter can not yet create streams without an input container.
at com.xuggle.mediatool.MediaWriter.getStream(MediaWriter.java:1017)
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:742)
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:783)
at com.xuggle.mediatool.MediaWriter.onVideoPicture(MediaWriter.java:1434)
at com.xuggle.mediatool.AMediaToolMixin.onVideoPicture(AMediaToolMixin.java:166)
at com.xuggle.mediatool.MediaReader.dispatchVideoPicture(MediaReader.java:610)
at com.xuggle.mediatool.MediaReader.decodeVideo(MediaReader.java:519)
at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:475)
at classes.Converter.Converter.convertVideoToWAV(Converter.java:105)
at classes.Mediaconverter.main(Mediaconverter.java:19)
Java:
public class VolumeAdjustMediaTool extends MediaToolAdapter{
public VolumeAdjustMediaTool(float volume){
this.volume_change=volume;
}
// --- Klassen --- //
// --- Methoden --- //
@Override public void onAudioSamples(IAudioSamplesEvent e){
ShortBuffer buf=e.getAudioSamples().getByteBuffer().asShortBuffer();
for(int i=0;i<buf.limit();i++){
buf.put(i,(short)(buf.get(i)*this.volume_change));
}
super.onAudioSamples(e);
return;
}
// --- Variablen --- //
private float volume_change;
// --- Aufzaehlungen --- //
}
Wie schon gesagt, mir ist wichtig, dass ich ein Video in eine Audio-Datei (WAV) umwandeln kann. Es muss nicht Xuggler genommen werden!
Bei JAVE ist das Problem, dass es glaube ich auf Mac nicht funktioniert. Gibt es da noch Alternativen?
Danke im Voraus!
Mit freundlichen Grüßen
Seikuassi