تشارك هذه المقالة الكود المحدد لتحويل تنسيق فيديو Java للرجوع إليه. المحتوى المحدد كما يلي
جوهر هو استخدام FFMPEG لتحويل مقاطع الفيديو. نحن لا نكتب الرمز لتحويل مقاطع الفيديو بأنفسنا ، ولكن فقط اتصل بـ FFMPEG ، مما سيساعدنا على إكمال تحويل الفيديو. الأنواع التي تدعمها FFMPEG هي: ASX ، ASF ، MPG ، WMV ، 3GP ، MP4 ، MOV ، AVI ، FLV ، إلخ. يمكن تحويل هذه الأنواع مباشرة باستخدام FFMPEG. الأنواع التي لا تدعمها FFMPEG هي: WMV9 ، RM ، RMVB ، إلخ. تحتاج هذه الأنواع إلى تحويل تنسيق AVI (FFMPEG CAN) أولاً باستخدام أدوات أخرى (Mencoder).
لن أقول الكثير من الهراء. بادئ ذي بدء ، أحتاج إلى إعداد المكتبات ومقاطع الفيديو ذات الصلة المراد تحويلها ، كما هو موضح في الشكل التالي
ما يلي هو جزء الكود
حزمة com.sino.test ؛ استيراد java.io.bufferedreader ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.inputstreamreader ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ /** * Java تنفذ تحويل تنسيق الفيديو * Author liuyazhuang * */class public changevideo {public static void main (string [] args) {changevideo.convert ("d: //myeclipse//aa.avi" ، "d: //myeclipse//bb.mp4") ؛ } / ** * param inputFile: مقاطع الفيديو التي يجب تحويلها * param outputfile: مقاطع فيديو بعد التحويل w * @return * / public static boolean convert (string inputFile ، string outputfile) {if (! العودة كاذبة } if (Process (inputFile ، OutputFile)) {system.out.println ("ok") ؛ العودة صحيح. } إرجاع خطأ ؛ } // تحقق مما إذا كان الملف موجودًا خاصًا checkFile (مسار السلسلة) {file file = ملف جديد (path) ؛ if (! file.isfile ()) {return false ؛ } إعادة صواب ؛ } / ** * param inputFile * param outputfile * return * تحويل ملف الفيديو * / private static boolean (string inputFile ، string outputfile) {int type = checkontentType (inputFile) ؛ حالة منطقية = خطأ ؛ if (type == 0) {status = processflv (inputFile ، outputFile) ؛ // تحويل avi إلى ملف flv مباشرة} آخر إذا (type == 1) {string avifilepath = processavi (type ، inputFile) ؛ إذا كان (avifilepath == null) إرجاع false ؛ // لا يحصل ملف AVI على الحالة = processflv (avifilepath ، outputFile) ؛ // تحويل AVI إلى FLV} حالة الإرجاع ؛ } int static int int int int int checkontenttype (سلسلة إدخال inputFile) {string type = inputFile.SubString (inputFile.lastIndexof (".") + 1 ، inputFile.Length ()). // التنسيقات التي يمكن لـ FFMPEG تحليلها: (ASX ، ASF ، MPG ، WMV ، 3GP ، MP4 ، MOV ، AVI ، FLV ، إلخ) if (type.equals ("avi")) {return 0 ؛ } آخر إذا (type.equals ("mpg")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } آخر إذا (type.equals ("wmv")) {return 0 ؛ } (type.equals ("3gp")) {return 0 ؛ } آخر إذا (type.equals ("mov")) {return 0 ؛ } آخر إذا (type.equals ("mp4")) {return 0 ؛ } آخر إذا (type.equals ("asf")) {return 0 ؛ } آخر إذا (type.equals ("asx")) {return 0 ؛ } آخر إذا (type.equals ("flv")) {return 0 ؛ } // تنسيقات الملفات التي لا يمكن تحليلها لتنسيق FFMPEG (WMV9 ، RM ، RMVB ، إلخ) ، // يمكنك أولاً استخدام أداة أخرى (mencoder) لتحويلها إلى تنسيق AVI (FFMPEG parsable). آخر if (type.equals ("wmv9")) {return 1 ؛ } آخر إذا (type.equals ("rm")) {return 1 ؛ } آخر إذا (type.equals ("rmvb")) {return 1 ؛ } العودة 9 ؛ } // التنسيقات التي يتم تحويل FFMPEG parsable: (ASX ، ASF ، MPG ، WMV ، 3GP ، MP4 ، MOV ، AVI ، FLV ، إلخ) مباشرة إلى مستهدفة الفيديو الخاص بالفيديو الثابت الثابت (string inputFile ، string outputfile) {if (checkfile (inputFile)) العودة كاذبة } قائمة <string> comment = new ArrayList <String> () ؛ Comment.add (Constants.ffmpegpath) ؛ Comment.add ("-i") ؛ Comment.add (inputFile) ؛ Comment.add ("-AB") ؛ Comment.add ("128") ؛ Comment.add ("-Acodec") ؛ Comment.add ("libmp3lame") ؛ Comment.add ("-AC") ؛ Comment.add ("1") ؛ Comment.add ("-AR") ؛ Comment.add ("22050") ؛ Comment.add ("-R") ؛ Comment.add ("29.97") ؛ // تعليق عالي الجودة. add ("-qscale") ؛ Comment.add ("6") ؛ // جودة منخفضة /// Cendend.add ("-B") ؛ //commend.add("512 ") ؛ Comment.add ("-y") ؛ Comment.add (outputFile) ؛ stringBuffer test = new StringBuffer () ؛ لـ (int i = 0 ؛ i <comment.size () ؛ i ++) {test.append (confend.get (i)+"") ؛ } system.out.println (test) ؛ Try {ProcessBuilder Builder = new ProcessBuilder () ؛ Builder.Command (الثناء) ؛ builder.start () ؛ العودة صحيح. } catch (استثناء e) {E.PrintStackTrace () ؛ العودة كاذبة }} // تنسيقات الملفات التي لا يمكن تحليلها لتنسيق FFMPEG (WMV9 ، RM ، RMVB ، إلخ) ، // يمكنك أولاً استخدام أدوات أخرى (mencoder) للتحويل إلى تنسيق AVI (يمكن تحليل FFMPEG). processavi processavi static static static (نوع int ، string inputFile) {file file = ملف جديد (constants.avifilePath) ؛ if (file.exists ()) file.delete () ؛ قائمة <Tring> Comment = new ArrayList <String> () ؛ Comment.add (Constants.MencoderPath) ؛ Comment.add (inputFile) ؛ Comment.add ("-OAC") ؛ Comment.add ("mp3lame") ؛ Comment.add ("-lameopts") ؛ Comment.add ("preset = 64") ؛ Comment.add ("-OVC") ؛ Comment.add ("xvid") ؛ Comment.add ("-Xvidencopts") ؛ Comment.add ("bitate = 600") ؛ Comment.add ("-of") ؛ Comment.add ("avi") ؛ Comment.add ("-O") ؛ Comment.add (Constants.AvifilePath) ؛ stringBuffer test = new StringBuffer () ؛ لـ (int i = 0 ؛ i <comment.size () ؛ i ++) {test.append (confend.get (i)+"") ؛ } system.out.println (test) ؛ Try {ProcessBuilder Builder = new ProcessBuilder () ؛ Builder.Command (الثناء) ؛ العملية p = builder.start () ؛ inputStream النهائي IS1 = p.getInputStream () ؛ InputStream النهائي IS2 = P.GeterRorStream () ؛ new Thread () {public void run () {bufferreader br = new BufferEdReader (new inputStreamReader (IS1)) ؛ حاول {String lineb = null ؛ بينما ((lineb = br.readline ())! = null) {if (lineB! = null) system.out.println (lineB) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ } } } }.يبدأ()؛ New Thread () {public void run () {bufferreader br2 = new BufferedReader (new inputStreamReader (IS2)) ؛ حاول {String linec = null ؛ بينما ((linec = br2.readline ())! = null) {if (linec! = null) system.out.println (linec) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ } } }.يبدأ()؛ // انتظر عملية Mencoder لإكمال التحويل ، ثم استدعاء عملية FFMEPG P.Waitfor () ؛ System.out.println ("من يهتم") ؛ عودة الثوابت. } catch (استثناء e) {system.err.println (e) ؛ العودة لاغية. }}} يشبه ChangeVideo بشكل أساسي ينقل تنسيقات الفيديو
حزمة com.sino.test ؛ /** * فئة ثابتة ، تضع بشكل أساسي موقع البرامج القابلة للتنفيذ ، ومكتبات الارتباطات الديناميكية ، وملفات الفيديو المؤقتة التي تم إنشاؤها أثناء عملية التحويل * Author liuyazhuang */ثوابت الفئة العامة {// المسار المخزنة بواسطة FFMPEG Public Static Final Final Ffmpegpath = "d: //myclipse//ffmpeg.exe" ؛ // المسار المخزّن بواسطة Mencoder Public Static Final String MencoderPath = "D: //myeclipse//mencoder.exe" ؛ // avi storage path تم تحويله من خلال سلسلة mencoder public static final string avifilepath = "d: //myeclipse//temp.avi" ؛ } الثوابت ، التي تضع بشكل أساسي موقع البرامج القابلة للتنفيذ ، ومكتبات الارتباطات الديناميكية ، وملفات الفيديو المؤقتة التي تم إنشاؤها أثناء عملية التحويل.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.