- lichen0921
- 等级: 初级会员

- 性别:
 - 文章: 15
- 积分: 50
- 来自: 天津

|
flv格式转换--第一步
不定期更新...
首先要安装MediaCoder
安装目录假设为D:\flv\MediaCoder
在D:\flv\MediaCoder\codecs目录下有一些要用到的,如ffmpeg.exe , mencoder.exe还有一些dll
ConvertVideo.java
package com.lichen.test;
import java.io.File; import java.util.List;
public class ConvertVideo {
private final static String PATH = "d:\\test\\a.mpg";
public static void main(String[] args) { if (!checkfile(PATH)) { System.out.println(PATH + " is not file"); return; } if (process()) { System.out.println("ok"); } }
private static boolean process() { int type = checkContentType(); boolean status = false; if (type == 0) { // status = processFLV(PATH);// 直接将文件转为flv文件 status=processImg(); processFLV(PATH); } else if (type == 1) { String avifilepath = processAVI(type); if (avifilepath == null) return false;// avi文件没有得到 status = processFLV(avifilepath);// 将avi转为flv } return status; }
private static int checkContentType() { String type = PATH.substring(PATH.lastIndexOf(".") + 1, PATH.length()) .toLowerCase(); // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) if (type.equals("avi")) { return 0; } else if (type.equals("mpg")) { return 0; } else if (type.equals("wmv")) { return 0; } else if (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; } // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. else if (type.equals("wmv9")) { return 1; } else if (type.equals("rm")) { return 1; } else if (type.equals("rmvb")) { return 1; } return 9; }
private static boolean checkfile(String path) { File file = new File(path); if (!file.isFile()) { return false; } return true; }
// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. private static String processAVI(int type) { List<String> commend = new java.util.ArrayList<String>(); // commend.add("e:\\mencoder"); // D:\flv\MediaCoder\codecs commend.add("d:\\flv\\MediaCoder\\codecs"); commend.add(PATH); commend.add("-oac"); commend.add("lavc"); commend.add("-lavcopts"); commend.add("acodec=mp3:abitrate=64"); commend.add("-ovc"); commend.add("xvid"); commend.add("-xvidencopts"); commend.add("bitrate=600"); commend.add("-of"); commend.add("avi"); commend.add("-o"); commend.add("d:\\test\\a.avi"); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return "c:\\home\\a.avi"; } catch (Exception e) { e.printStackTrace(); return null; } } // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) private static boolean processFLV(String oldfilepath) {
if (!checkfile(PATH)) { System.out.println(oldfilepath + " is not file"); return false; } List<String> commend = new java.util.ArrayList<String>(); commend.add("d:\\flv\\MediaCoder\\codecs\\ffmpeg.exe"); commend.add("-i"); commend.add(oldfilepath); commend.add("-ab"); commend.add("64"); // commend.add(" -acodec "); // commend.add("codec"); commend.add("-ac"); commend.add("2"); commend.add("-ar"); commend.add("22050"); commend.add("-b"); commend.add("230"); // commend.add("-s"); // commend.add("350x240"); commend.add("-r"); commend.add("29.97"); commend.add("-y"); commend.add("d:\\test\\b.flv"); System.out.println(commend); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
// 生成图片 参数String newfilename, String newimg public static boolean processImg() { // System.out.println(newfilename + "->" + newimg); List<String> commend = new java.util.ArrayList<String>(); commend.add("d:\\flv\\MediaCoder\\codecs\\ffmpeg.exe"); commend.add("-i"); commend.add("d:\\test\\a.mpg"); commend.add("-y"); commend.add("-f"); commend.add("image2"); commend.add("-ss"); commend.add("38"); commend.add("-t"); commend.add("0.001"); commend.add("-s"); commend.add("320x240"); commend.add("d:\\test\\b.jpg"); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
}
会在指定目录下D:\test生成b.flv和b.jpg这两个文件.
|
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- taupo
- 等级: 初级会员

- 性别:
 - 文章: 617
- 积分: 10
- 来自: 重庆

|
晕,调用外部程序来完成啊?
|
返回顶楼 |
|
|
- night_stalker
- 等级:


- 性别:
 - 文章: 1366
- 积分: 780
- 来自: 杭州

|
发表时间:2009-06-17
最后修改:2009-06-17
这一大坨的 if else …… 用正则表达式多好 ……
另外这种小工具用脚本语言写会爽得多 ……
|
返回顶楼 |
|
|
- 桦树雨夏
- 等级: 初级会员

- 性别:
 - 文章: 2
- 积分: 0
- 来自: 济南

|
发表时间:2010-01-07
最后修改:2010-01-07
我最近在学这个视频格式转换,我看了下你的这些代码,
我测试了下,虽然能够转换成功,可是转换的效率非常低,
我将一个22mb的avi格式的视频 转换成一个flv的格式的视频大小变成200多mb,
这个转换时间也比较慢10分钟。
我个人认为你如果能够显示转换的进度,那样的给人的感觉会好很多!
|
返回顶楼 |
|
|
- kksss118
- 等级: 初级会员

- 性别:
 - 文章: 3
- 积分: 30
- 来自: 上海

|
桦树雨夏 写道 我最近在学这个视频格式转换,我看了下你的这些代码,
我测试了下,虽然能够转换成功,可是转换的效率非常低,
我将一个22mb的avi格式的视频 转换成一个flv的格式的视频大小变成200多mb,
这个转换时间也比较慢10分钟。
我个人认为你如果能够显示转换的进度,那样的给人的感觉会好很多!
虽然没有测试过,但以前做过一些转换。
如果22M转成200M的话应该是转换时参数设置问题,建议网上查找ffmpeg参数设置,资料还是满多的。
|
返回顶楼 |
|
|
- lyh20081984
- 等级: 初级会员

- 性别:
 - 文章: 13
- 积分: 50
- 来自: 成都

|
慢...而且不知道什么时候能转换完,我本想在转换完之后就删除原文件,可是无从下手
|
返回顶楼 |
|
|