java实现压缩mp4视频适应网页播放

1,安装ffmpeg

2,java代码:摘自  https://blog.csdn.net/javaer_lee/article/details/79425201

package test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class ConvertVideo {

private static String inputPath = "";

private static String outputPath = "";

private static String ffmpegPath = "";

public static void main(String args[]) throws IOException {

getPath();

if (!checkfile(inputPath)) {
System.out.println(inputPath + " is not file");
return;
}
if (process()) {
System.out.println("ok");
}
}

private static void getPath() { // 先获取当前项目路径,在获得源文件、目标文件、转换器的路径
File diretory = new File("");
try {
String currPath = diretory.getAbsolutePath();
inputPath = "E:\\1.mp4";
outputPath = "E:\\6.mp4";
ffmpegPath = "C:\\Users\\chenwei\\Desktop\\ffmpeg-20190104-b9523f2-win64-static\\bin\\";
System.out.println(currPath);
}
catch (Exception e) {
System.out.println("getPath出错");
}
}

private static boolean process() {
int type = checkContentType();
boolean status = false;
if (type == 0) {
System.out.println("直接转成flv格式");
status = processFLV(inputPath);// 直接转成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 = inputPath.substring(inputPath.lastIndexOf(".") + 1, inputPath.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(ffmpegPath + "mencoder");
commend.add(inputPath);
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=1000");
commend.add("-of");
commend.add("mp4");
commend.add("-o");
commend.add(outputPath + "a.mp4");
try {
ProcessBuilder builder = new ProcessBuilder();
Process process = builder.command(commend).redirectErrorStream(true).start();
new PrintStream(process.getInputStream());
new PrintStream(process.getErrorStream());
process.waitFor();
return outputPath + "a.mp4";
} 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(inputPath)) {
System.out.println(oldfilepath + " is not file");
return false;
}

List<String> command = new ArrayList<String>();
command.add(ffmpegPath + "ffmpeg");
command.add("-i");
command.add(oldfilepath);
command.add("-ab");
command.add("56");
command.add("-ar");
command.add("22050");
command.add("-qscale");
command.add("8");
command.add("-r");
command.add("15");
command.add("-s");
command.add("600x500");
command.add(outputPath + "a.mp4");

try {

// 方案1
Process videoProcess = Runtime.getRuntime().exec(ffmpegPath + "ffmpeg -i " + oldfilepath
+ " -vcodec libx264 -r 29.97 -b 768k -ar 24000 -ab 64k -s 1280x720 "
+ outputPath + "a.mp4");

// 方案2
// Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
//
// new PrintStream(videoProcess.getErrorStream()).start();
//
// new PrintStream(videoProcess.getInputStream()).start();
//
// videoProcess.waitFor();

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

class PrintStream extends Thread
{
java.io.InputStream __is = null;
public PrintStream(java.io.InputStream is)
{
__is = is;
}

public void run()
{
try
{
while(this != null)
{
int _ch = __is.read();
if(_ch != -1)
System.out.print((char)_ch);
else break;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

原文地址:https://www.cnblogs.com/cw828/p/10224750.html

时间: 2024-08-08 18:31:00

java实现压缩mp4视频适应网页播放的相关文章

教你一招轻松压缩MP4视频到最小

有一种工作是经常要接触视频的,视频运营,每天要制作很多视频用来推广,视频完善好之后,就要往各个平台上发布,目前很多的视频平台对视频的要求还是很高的,有一个上传视频大小的限制,超过这个大小的视频无法正常进行发布,过大的视频需要压缩变小,下面介绍具体的压缩方法,可以来学习如何压缩MP4视频!方法如下:第一种方法:利用在线压缩网站1:打开在线压缩的网站,点击页面中的在线视频压缩下面的立即使用的按钮,会进入压缩视频的操作界面.2:添加需要进行压缩的视频,点击或者拖拽进行文件的选择.3:选择一个压缩的选项

解决mp4视频在网页中不能快速播放

H.264是一个伟大的专为网页设计的MP4格式,是所有MP4变种.MP4是的QuickTime的一部分和Flash的一部分.我们遇到的问题经常像这样,市面上存在很多视频的编辑器和转换器,像索尼Vegas 和Adobe Premier,但是它们所产生的MP4文件不能很好的在网页上工作.它们不支持流(Stream)字节播放.而是需要等到整个视频下载完的时候,才开始播放.

mp4网页播放代码,有声音无图像的解决办法~

mp4网页播放代码,有声音无图像的解决办法~ 关于网页播放mp4格式的视频,找了一些插件,这里推荐一下video.js 官方网址:http://www.videojs.com/ github :https://github.com/videojs/video.js/ demo:http://www.videojs.com/downloads/video-js-4.12.5.zip 使用方法: ①引入文件:指派flash播放的swf文件 <link href="//example.com/p

2017年05月10日记一次微项目投产 | 安卓版微信内置浏览器不能解析gzip压缩过的mp4视频的问题

前言 今天投产了一个小项目,一个很简单的H5,有播放视频功能,使用了videojs插件. 之前也做过数个视频播放,视频的转压都按照既定流程进行,文件放到FTP后,iphone和安卓机测试下来都没有问题. 于是给链接,业务组直接在微信公众号里投放了.那个企业号有不少关注的人,推送发出去1分钟就有近千阅读量. 但是我在点击链接后,发现项目打不开了,而且该企业官网的主站也挂了,在经过pc端和手机4G下测试发现问题依然存在后,赶紧报bug给其他同事. 通过询问FTP管理员得知,那个"大"企业的

html5播放mp4视频代码

1.nginx支持flv和mp4格式播放 默认yum安装nginx centos7安装nginx时候应该是默认安装nginx_mod_h264_streaming模块的 # nginx -V查看是否安装nginx_mod_h264_streaming模块 nginx在新版本中已经支持了--with-http_mp4_module --with-http_flv_module这2个模块即可 # vi /etc/nginx/nginx.conf server { listen       80 de

Java使用OpenCV3.2实现视频读取与播放

Java使用OpenCV3.2实现视频读取与播放 OpenCV从3.x版本开始其JAVA语言的SDK支持视频文件读写,这样就极大的方便了广大Java语言开发者学习与使用OpenCV,通过摄像头或者视频文件读取帧的内容与播放,完成视频内容分析与对象跟踪等各种应用开发任务.可以说OpenCV C++ SDK可以做到绝大多数事情,在OpenCV3.x版本上用Java都可以完成,这样就为很多Java开发者学习OpenCV打开了方便之门. 实现思路 首先用OpenCV相关API读取视频流或者视频文件的每一

cocos2d-x 3.0 播放MP4视频

猴子原创,欢迎转载. 转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢. 原文地址: http://www.cocos2dev.com/?p=545 非常久曾经写的一个2dx播放MP4视频的教材.有网友反映已经不能用了,今天晚上写了个简单的2dx播放视频类.使用的是cocos2dx 3.0. 类说明:LHVideoPlayerImplCpp.h/mm // cocos2dx中使用的播放MP4接口LHVideoPlayerImpl.h/m // videoPlayer的o

推荐下:开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !

视频播放, 原本是想h5 自带视频播放,使用很简单,结果现实很骨感. <video controls="controls" preload="auto" height="500" width="700"> <!-- Firefox --> <source src="mv.ogg" type="video/ogg" /> <!-- Safari/C

怎么把MP4视频进行压缩

视频有很多种的格式,MP4格式的视频只是其中的一种,那么想要对这个格式的视频进行压缩的话,有哪些方法呢?下面的介绍会告诉你怎么把MP4视频进行压缩,有需要的朋友可以来学习一下!在线压缩视频文件1:浏览器上搜索在线视频压缩的网站,打开之后点击页面中的在线视频压缩就会进入对应的操作界面. 2:添加需要进行压缩的视频,点击或者拖拽就可以添加. 3:最后可以开始压缩视频,点击开始压缩的按钮,之后等待几秒钟就可以完成压缩了. 借助压缩软件压缩的方法1:打开电脑上安装的视频压缩软件,有三个压缩的功能,点击视