急急急!!!java 用ffmpeg将上传的视频转成 .mp4 .ogg .webm 3种格式的视频,没思路,麻烦大神给点思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急急急!!!java 用ffmpeg将上传的视频转成 .mp4 .ogg .webm 3种格式的视频,没思路,麻烦大神给点思路相关的知识,希望对你有一定的参考价值。

import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class ConvertVideo

private final static String PATH = "c:\\ffmpeg\\input\\c.mp4";

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)
System.out.println("直接将文件转为flv文件");
status = processFLV(PATH);// 直接将文件转为flv文件
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 ArrayList<String>();
commend.add("c:\\ffmpeg\\mencoder");
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("c:\\ffmpeg\\output\\a.avi");
try
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
builder.start();
return "c:\\ffmpeg\\output\\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;


// 文件命名
Calendar c = Calendar.getInstance();
String savename = String.valueOf(c.getTimeInMillis())+ Math.round(Math.random() * 100000);
List<String> commend = new ArrayList<String>();
commend.add("c:\\ffmpeg\\ffmpeg");
commend.add("-i");
commend.add(oldfilepath);
commend.add("-ab");
commend.add("56");
commend.add("-ar");
commend.add("22050");
commend.add("-qscale");
commend.add("8");
commend.add("-r");
commend.add("15");
commend.add("-s");
commend.add("600x500");
commend.add("c:\\ffmpeg\\output\\a.flv");

try
Runtime runtime = Runtime.getRuntime();
Process proce = null;
String cmd = "";
String cut = " c:\\ffmpeg\\ffmpeg.exe -i "
+ oldfilepath
+ " -y -f image2 -ss 8 -t 0.001 -s 600x500 c:\\ffmpeg\\output\\"
+ "a.jpg";
String cutCmd = cmd + cut;
proce = runtime.exec(cutCmd);
ProcessBuilder builder = new ProcessBuilder(commend);
builder.command(commend);
builder.start();

return true;
catch (Exception e)
e.printStackTrace();
return false;


追问

上面的代码只是将视频转为flv格式的,我是想 转成 .mp4 .ogg .webm 的

参考技术A 1、 先写一个线程,建个队列。(把要转码的视频放到队列)

2、(最好用linux)在linux上安装ffmpeg转码工具
3、用java执行linxu命令,例:cmdString = "ffmpeg -y -i 0 -ar 44100 -vcodec libx264 1";(0是要转码的视频,1是转码后的)。

实现起来也不是很简单,加油吧。

补充一下:至于转码前的视频类型,最好要做限制,如果不限制的话,还需要调用mencoder或者其他转码工具,mencoder我用过,比较难用,而且特慢。本回答被提问者采纳

急急急|最后6小时,ipad免费送!

急急急|最后6小时,ipad免费送!

日盼夜盼的国庆小长假终于来了

开心、兴奋、想大叫


急急急|最后6小时,ipad免费送!


先等等

有件紧急的事情要通知大家

急急急|最后6小时,ipad免费送!

想拿ipad、iWatch、扫地机器人的看过来

最后6小时!最后6小时!

万达“寻找最美小嫦娥”征集活动将在

9月30日23:59结束

赶快抓住这最后的机会


点击“小嫦娥”菜单栏

上传人物照

报名成功

急急急|最后6小时,ipad免费送!


奖品设置

一等奖:IPad

二等奖:Iwatch

三等奖:扫地机器人

参与奖:定制手持电风扇

急急急|最后6小时,ipad免费送!

(奖品以实物为准)


投票将在10月1日00:00启动

到时候大家可以给自己喜爱的选手投票

参赛人员也可以向亲戚好友拉票

投票将在10月3日12:00截止

所以大家要抓紧时间哦



投票方式

点击“小嫦娥”菜单栏

或输入关键词“投票”

然后浏览作品

给选手投票

每人每天仅有一次投票机会

(详情可查看“活动规则”)



想拿大奖的

哦,还有

国庆节嘛,八天小长假

只一个“寻找最美小嫦娥”怎么能够尽兴呢



来来来

你想要的活动都在下面

急急急|最后6小时,ipad免费送!

首届国际甜品节

海南万达广场南洋里金街

200多款美食等你来吃

急急急|最后6小时,ipad免费送!


首届南洋里美食节开幕式暨海南最强音演唱会

10月1日晚7点

海口万达广场

海南最强音一强哥+最强歌后一吴晓芸+最强嘻哈一火山老爹
带来一场最强海南味的演唱会

急急急|最后6小时,ipad免费送!

(图文无关)


万达首届购车节

海口万达广场

百款靓车集中亮相

还有购车好礼大放送

急急急|最后6小时,ipad免费送!

(图文无关)


玩爆假期赢大奖

海口万达广场营销中心

玩游戏,集齐4枚印章

就有机会获得万达大礼包、精美月饼等丰厚大奖

急急急|最后6小时,ipad免费送!


急急急|最后6小时,ipad免费送!


明天

海口万达广场

不见不散

祝大家国庆节玩得愉快





南洋里商业街招商:刘先生15289768799


建筑面积约35—130㎡南洋里七彩商铺全城发售中


    商圈渐成,区域价值爆发

    在万达的强大品牌号召之下,众多开发商齐聚城南,区域价值迅速提升,各开发商纷纷加快抢占万达开业所带来的区域福利,碧桂园、恩祥新城等开发商环绕,万达商圈初具雏形,未来可期。

    龙头万达,商气人气汇聚

    海口万达广场凭借全业态、全龄层、一站式的商业平台,自2016年12月23日开业至今,短短数月,业已改变海口市民消费及生活习惯,成为吃、喝、玩、乐、购的首选消费地。

    数千商家争相进驻

    作为万达商圈核心的万达广场,拥有全国6000余品牌商家资源,多数无法进驻购物中心的品牌,将选择室外街,共享购物中心人潮,与购物中心形成有效互补。

    每日数万稳定客流

    海口万达广场开业至今,日均客流5万人次以上,逢节假日客流成倍增长。随着6月万达住宅交房、周边小区的持续入住,万达广场将迎来更多稳定客流。有稳定客流,即有稳定现金流。

    专业商业运营团队

    万达商管集团是亚洲最大的商业运营公司,专业室外街服务式招商运营团队,保障室外街共享购物中心每日数万客流,为整座万达广场的稳场旺场经营提供有力保障。

    全天候经营,繁华不落幕

    万达室外街,没有购物中心早10点营业晚10点打烊的营业时间限制,可实现全天候经营,满足了更多经营业态的要求,与大商业形成有效互补,可谓24小时繁华不落幕。

    临近购物中心,最佳区位

    本期商铺正处海榆中线与白水塘路交汇路口,拥有万达广场最优展示面,具有绝佳的昭示性,同时是本项目及周边居民通往万达购物中心的必经之地,是真正意义上的黄金走廊。



点击图片有惊喜哦~

游丹寨 就是扶贫

本广告相关面积均为建筑面积,最终计算面积以房管局测绘面积为准。

本宣传资料对周边环境、政府规划、商业配套、教育配套、投资前景的介绍仅为提供相关信息,并不意味着对此作出任何承诺,买卖双方的权利义务以双方签订的《商品房买卖合同》为准。

以上是关于急急急!!!java 用ffmpeg将上传的视频转成 .mp4 .ogg .webm 3种格式的视频,没思路,麻烦大神给点思路的主要内容,如果未能解决你的问题,请参考以下文章

用JAVA调用ffmpeg实现将各种视频格式转为flv时,怎样做出简单操作的界面?

IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题,这个怎么解决?急急急

PHP+ffmpeg+nginx的配置实现视频转码(转)

急急急 用java 怎么写lotus 的domino数据库多条件查询 包含时间段查询 在线等

急急急!!!! 怎样用Java读取EXCEl

Java实现视频网站的视频上传视频转码视频关键帧抽图, 及视频播放功能