utilizar envoltorio java-ffmpeg, o simplemente utilizar el tiempo de ejecución de Java para ejecutar ffmpeg?

StackOverflow https://stackoverflow.com/questions/1281353

  •  16-09-2019
  •  | 
  •  

Pregunta

Soy bastante nuevo en Java, necesita escribir un programa que escuchar las instrucciones de conversión de vídeo y convertir el vídeo una vez que llega una instrucción nueva (las instrucciones se almacenan en Amazon SQS, pero es irrelevante para mi pregunta)

estoy frente a una elección, o bien utilizar Java Runtime a exec 'ffmpeg' conversión (como desde la línea de comandos), o puedo utilizar un envoltorio ffmpeg escrita inJava http://fmj-sf.net/ffmpeg-java/getting_started.php

Me gustaría mucho prefieren el uso de Java Runtime a exec ffmpeg directamente, y evitar el uso de envoltorio java-ffmpeg ya que tengo que aprender la biblioteca. así que mi pregunta es ¿hay beneficios utilizando envoltorio java-ffmpeg ffmpeg sobre Exec directamente a través de tiempo de ejecución? No necesito ffmpeg para reproducir vídeos, simplemente convertir vídeos

Gracias

¿Fue útil?

Solución

Si no me equivoco, el proyecto "ffmpeg envoltorio" se ha vinculado a esta caducado y no se mantiene. FFmpeg es un proyecto muy activo, con un montón de cambios y libera todo el tiempo.

Usted debe mirar el proyecto Xuggler, esto proporciona una API de Java para lo que quiere hacer, y tienen una estrecha integración con ffmpeg.

http://www.xuggle.com/xuggler/

Si decide ir por el Runtime.exec () ruta, este hilo Red5 debería ser útil:

http://www.nabble.com/java-call-ffmpeg- ts15886850.html

Otros consejos

Yo también estoy buscando algo para envolver FFMPEG en Java. Durante la búsqueda, encontré esto:. https://github.com/bramp/ffmpeg-cli-wrapper

A partir de hoy, parece haber sido modificado hace un mes. Por lo tanto, es de esperar que se quedará por un tiempo.

Una muestra de sus docs:

FFmpeg ffmpeg = new FFmpeg("/path/to/ffmpeg");
FFprobe ffprobe = new FFprobe("/path/to/ffprobe");

FFmpegBuilder builder = new FFmpegBuilder()
    .setInput(in)
    .overrideOutputFiles(true)
    .addOutput("output.mp4")
        .setFormat("mp4")
        .setTargetSize(250000)

        .disableSubtitle()

        .setAudioChannels(1)
        .setAudioCodec("libfdk_aac")
        .setAudioRate(48000)
        .setAudioBitrate(32768)

        .setVideoCodec("libx264")
        .setVideoFramerate(Fraction.getFraction(24, 1))
        .setVideoResolution(640, 480)

        .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL)
        .done();

FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
executor.createTwoPassJob(builder).run();

Hay una gran cantidad de bibliotecas de Java que proporcionan envolturas FFMPEG. Sin embargo, la mayoría de estas bibliotecas son lamentablemente anticuado y utilizar versiones FFMPEG antiguos que carecen de algunos códecs importantes (por ejemplo Xuggler, humilde vídeo, JavaAV, JavaAVC y Jave). Así que tenga cuidado al utilizar esos proyectos!

Sin embargo, hay una envoltura FFMPEG que es todavía desarrollados activamente y soportes FFMPEG 3 , también:

Alternativamente, puede utilizar un envoltorio para la interfaz de línea de comandos de FFMPEG, como ffmpeg-CLI- envoltorio . Entonces está en su mano para actualizar ffmpeg manualmente sin tener que esperar a una nueva versión de la biblioteca del reiniciador.

Además, a partir de Xuggler 3.3, Xuggler es LGPL significado que no es necesario para uso comercial.

escribí mi propia línea de comandos de Java ffmpeg envoltorio: Jaffree . Funciona tanto con ffprobe y ffmpeg y apoya la producción de vídeo programática y el consumo. También lo ha hecho en mi opinión API de líquido más conveniente.

Aquí está un ejemplo de uso ffprobe:

FFprobeResult result = FFprobe.atPath(BIN)
        .setInputPath(VIDEO_MP4)
        .setShowStreams(true)
        .setShowError(true)
        .execute();

if (result.getError() != null) {
    //TODO handle ffprobe error message
    return;
}

for (Stream stream : probe.getStreams().getStream()) {
    //TODO analyze stream data
}

ProgressListener listener = new ProgressListener() {
    @Override
    public void onProgress(FFmpegProgress progress) {
        //TODO handle progress data
    }
};

Y esto es para ffmpeg:

FFmpegResult result = FFmpeg.atPath(BIN)
        .addInput(Input.fromPath(VIDEO_MP4))
        .addOutput(Output.toPath(outputPath)
                .addCodec(null, "copy")
        )
        .setProgressListener(listener)
        .execute();

Los beneficios del uso de la envoltura sería principalmente que ofrece más y de grano fino funcionalidad no se puede acceder a través de la línea de comandos (no relevante para usted) y hace que el manejo de errores y control de estado más fácil - que tendrá que analizar el comando de herramienta de la línea de salida y de error flujos estándares.

i tratar varias formas, siendo la más simple para mí es ffmpeg-cli-envoltura, ya que utiliza ffmpeg por defecto o uno específico, por otra parte se puede configurar gran cantidad de configuración como la escala, la tasa de bits ... ... conseguir la duración de JAVE sauronsoftware hacer gran cantidad de errores, XUGGLE y otra me pareció demasiado complicado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top