Compiler-Fehler Xuggler-Problem-Video > Audio bzw. Video > Audio-API

Seikuassi

Aktives Mitglied
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:
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
		}
	}
}
Video-Konvertierung:
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
		}
	}
}
Doch bei der Konvertierung von einem Video zu einer Audio-Datei (was mir eigentlich am Wichtigsten ist! 🙁), funktioniert nicht:
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;
}
Es wird eine leere .wav-Datei erstellt und folgende Ausnahme geworfen:
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)
Die Klasse VolumeAdjustMediaTool sieht übrigens so aus und erzeugt keine Fehler:
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 --- //
	
}
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
 
Hat keiner ne Antwort? Wie schon gesagt: Mir ist wichtig, dass ich Videodateien in Audiodateien umwandeln kann. Ich muss nicht Xuggler verwenden. Ich brauche nur eine Methode bzw. eine Bibliothek, die eben z.B. mp4 oder flv in mp3 oder besser wav umwandeln kann.
 
Ich nochmal,

also, habe für die Konvertierung von Video zu Audio eine Lösung gefunden JAAD.
JAAD kann (in meinem Fall) .mp4-Dateien in .wav-Dateien umwandeln.

Für alle Interessierten hier die Methode:
Java:
/** Konvertiert ein Video zu einer Audio-Datei. **/
private static void convertVideoToAudio(String source_name,String target_name,float volume_change)
throws IOException{
	net.sourceforge.jaad.Main converter=new net.sourceforge.jaad.Main();
	File temp=File.createTempFile("convertedAudio",WAV);
	
	if(source_name.toLowerCase().endsWith(MP4)==true){ // wenn das Video eine .mp4-Datei ist
		converter.main(new String[]{"-mp4",source_name,temp.getAbsolutePath()}); // Video zu .wav-Datei konvertieren
	}else{ // wenn das Video keine .mp4-Datei ist
		File tempMP4=File.createTempFile("convertedVideo",MP4);
		
		convertVideo(source_name,tempMP4.getAbsolutePath(),1f); // Video konvertieren
		converter.main(new String[]{"-mp4",tempMP4.getAbsolutePath(),temp.getAbsolutePath()}); // Video zu .wav-Datei konvertieren
		tempMP4.delete(); // temporare Video-Datei loeschen
	}
	convertAudio(temp.getAbsolutePath(),target_name,volume_change); // Audio konvertieren
	temp.delete(); // temporaere Audio-Datei loeschen
	return;
}

Die letzte Frage wäre nun: Wie kann ich ein Video schneiden? Also sowohl die Startzeit (z.B. 5 Sekunden später) als auch die Endzeit (z.B. bis 3:05 Min)?

Wäre dankbar für jeden Rat von euch.

Mit freundlichen Grüßen
Seikuassi
 

Zurück
Oben