Este artículo comparte el código específico para la conversión de formato de video Java para su referencia. El contenido específico es el siguiente
El núcleo es usar FFMPEG para convertir videos. No escribimos el código para convertir videos nosotros mismos, pero solo llamamos a FFMPEG, lo que nos ayudará a completar la conversión de video. Los tipos admitidos por FFMPEG son: ASX, ASF, MPG, WMV, 3GP, MP4, MOV, AVI, FLV, etc. Estos tipos se pueden convertir directamente usando FFMPEG. Los tipos que FFMPEG no admite son: WMV9, RM, RMVB, etc. Estos tipos deben convertirse en formato AVI (FFMPEG pueden analizar) primero usando otras herramientas (MENCODER).
No diré muchas tonterías. En primer lugar, necesito preparar las bibliotecas y videos relevantes que se convertirán, como se muestra en la siguiente figura
La siguiente es la parte del código
paquete com.sino.test; import java.io.bufferedReader; import java.io.file; import java.io.ioException; import java.io.inputstream; import java.io.inputstreamreader; import java.util.arrayList; import java.util.list; /** * java implementa la conversión del formato de video * @author liuyazhuang * */public class ChangeVideo {public static void main (string [] args) {changeVideo.convert ("d: //myeclipse//aa.avi", "D: //myeclipse//bb.mp4"); } / ** * @param InputFile: Videos que deben convertirse * @param outputFile: Videos después de la conversión w * @return * / public static boolean Convert (String InputFile, String outputFile) {if (! checkFile (inputFile)) {System.out.println (InputFile + "Nokt File"); devolver falso; } if (proceso (inputFile, outputFile)) {System.out.println ("OK"); devolver verdadero; } return false; } // verifique si el archivo existe un archivo de verificación booleano estático privado (string ruta) {archivo archivo = nuevo archivo (ruta); if (! file.isfile ()) {return false; } return verdadero; } / ** * @param InputFile * @param outputFile * @return * Convertir el archivo de video * / Proceso booleano estático privado (String InputFile, String outputFile) {int type = checkContentType (inputFile); estado booleano = falso; if (type == 0) {status = Processflv (inputFile, outputFile); // Convertir AVI a FLV File directamente} else if (type == 1) {String aviFilePath = ProcessAVI (type, inputFile); if (aviFilePath == null) return false; // AVI El archivo no obtiene status = Processflv (aviFilePath, outputFile); // Convertir avi a flv} status de retorno; } private static int checkContentType (string inputFile) {string type = inputFile.substring (inputFile.lastIndexOf (".") + 1, inputFile.Length ()). tOlowerCase (); // formatos que ffmpeg pueden analizar: (asx, asf, mpg, wmv, 3gp, mp4, mov, avi, flv, etc.) if (type.equals ("avi")) {return 0; } else if (type.equals ("mpg")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } else if (type.equals ("wmv")) {return 0; } (type.equals ("3gp")) {return 0; } else if (type.equals ("mov")) {return 0; } else if (type.equals ("mp4")) {return 0; } else if (type.equals ("asf")) {return 0; } else if (type.equals ("asx")) {return 0; } else if (type.equals ("flv")) {return 0; } // formatos de archivo que no se pueden analizar para FFMPEG (WMV9, RM, RMVB, etc.), // primero puede usar otra herramienta (Mencoder) para convertir a formato AVI (parsable FFMPEG). else if (type.equals ("wmv9")) {return 1; } else if (type.equals ("rm")) {return 1; } else if (type.equals ("rmvb")) {return 1; } return 9; } // The formats that ffmpeg parsable: (asx, asf, mpg, wmv, 3gp, mp4, mov, avi, flv, etc.) are directly converted to target video private static boolean processFLV(String inputFile, String outputFile) { if (!checkfile(inputFile)) { System.out.println(inputFile + " is not file"); devolver falso; } List <String> comment = new ArrayList <String> (); comentario.add (constants.ffmpegpath); comentario.add ("-i"); comentario.Add (InputFile); comentario.Add ("-AB"); comentario.Add ("128"); comentario.add ("-acodec"); comentario.add ("libmp3lame"); comentario.Add ("-AC"); comentario.add ("1"); comentario.add ("-ar"); comentario.Add ("22050"); comentario.add ("-r"); comentario.add ("29.97"); // comentario de alta calidad.add ("-Qscale"); comentario.Add ("6"); // baja calidad /// commend.add ("-b"); //commend.add("512 "); comentario.add ("-y"); comentario.Add (OutputFile); StringBuffer test = new StringBuffer (); for (int i = 0; i <comment.size (); i ++) {test.append (comodio.get (i)+""); } System.out.println (prueba); intente {ProcessBuilder Builder = new ProcessBuilder (); Builder.command (recomendar); builder.start (); devolver verdadero; } catch (Exception e) {E.PrintStackTrace (); devolver falso; }} // formatos de archivo que no se pueden analizar para FFMPEG (WMV9, RM, RMVB, etc.), // primero puede usar otras herramientas (Mencoder) para convertir a AVI (FFMPEG puede analizarse). privado static string processavi (int type, string inputFile) {archivo file = nuevo archivo (constants.avifilepath); if (file.exists ()) file.delete (); List <string> comment = new ArrayList <String> (); comentario.add (constants.mencoderpath); comentario.Add (InputFile); comentario.Add ("-OAC"); comentario.Add ("mp3lame"); comentario.Add ("-Lameopts"); comentario.Add ("Preset = 64"); comentario.add ("-ovc"); comentario.add ("xvid"); comentario.Add ("-xvidencopts"); comentario.add ("bitate = 600"); comentario.add ("-of"); comentario.add ("avi"); comentario.add ("-o"); comentario.add (constants.avifilepath); StringBuffer test = new StringBuffer (); for (int i = 0; i <comment.size (); i ++) {test.append (comodio.get (i)+""); } System.out.println (prueba); intente {ProcessBuilder Builder = new ProcessBuilder (); Builder.command (recomendar); Proceso p = builder.start (); InputStream final IS1 = P.getInputStream (); InputStream final IS2 = P.GetErrorStream (); new Thread () {public void run () {bufferedReader br = new BufferedReader (new InputStreamReader (IS1)); Pruebe {String LineB = null; while ((lineB = br.readline ())! = null) {if (lineB! = null) system.out.println (lineB); }} catch (ioException e) {E.PrintStackTrace (); } } } }.comenzar(); new Thread () {public void run () {bufferedReader br2 = new BufferedReader (new InputStreamReader (IS2)); intente {string linec = null; while ((linec = br2.readline ())! = null) {if (linec! = null) system.out.println (linec); }} catch (ioException e) {E.PrintStackTrace (); } } }.comenzar(); // espere a que el proceso de Mencoder complete la conversión, luego llame al proceso ffmepg p.waitfor (); System.out.println ("A quién le importa"); devuelve constantes.avifilepath; } catch (excepción e) {system.err.println (e); regresar nulo; }}} ChangeVideo-Like convierte principalmente formatos de video
paquete com.sino.test; /** * Clase constante, establece principalmente la ubicación de programas ejecutables, bibliotecas de enlaces dinámicos y archivos de video temporales generados durante el proceso de conversión * @author liUyazhuang * */public class constants {// ruta almacenada por ffmpeg public static final string final ffmpegpath = "d: //myeclipse//ffmpeg.exe"; // ruta almacenada por Mencoder public static final String mencoderpath = "d: //myeclipse//mencoder.exe"; // ruta de almacenamiento AVI convertida a través de Mencoder public static final String Avifilepath = "d: //myeclipse//temp.avi"; } Las constantes, que establece principalmente la ubicación de programas ejecutables, bibliotecas dinámicas de enlaces y archivos de video temporales generados durante el proceso de conversión.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.