项目中需要对各种视频格式转码为mp4格式,试了好多办法,最后使用ffmpeg 工具完美转码,ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)

链接:https://pan.baidu.com/s/1qDcHqCLa3eKgJX2gGtsoNg
提取码:4bdc

package com.dragonsoft.slxf.utils;

import cn.hutool.system.OsInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class ConvertVideoUtils { private static Logger logger = LoggerFactory.getLogger(ConvertVideoUtils.class); private String inputPath; private String outputPath; private String ffmpegPath; private String fileName; public ConvertVideoUtils(String inputPath, String outputPath, String ffmpegPath, String fileName) {
this.inputPath = inputPath;
this.outputPath = outputPath;
this.ffmpegPath = ffmpegPath;
this.fileName = fileName;
} public Boolean setVoidInfos() {
if (!checkfile(inputPath)) {
logger.info(inputPath + " is not file");
return false;
}
if (process(inputPath, ffmpegPath, outputPath, fileName)) {
logger.info("ok");
return true;
}
return false;
} public static boolean process(String inputPath, String ffmpegPath, String outputPath, String fileName) {
int type = checkContentType(inputPath);
boolean status = false;
logger.info("直接转成mp4格式");
status = processMp4(inputPath, ffmpegPath, outputPath, fileName);// 直接转成mp4格式
return status;
} private static int checkContentType(String inputPath) {
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 inputPath) {
File file = new File(inputPath);
if (!file.isFile()) {
return false;
}
return true;
} private static boolean processMp4(String oldfilepath, String ffmpegPath, String outputPath, String fileName) {
if (!checkfile(oldfilepath)) {
logger.info(oldfilepath + " is not file");
return false;
}
List<String> command = new ArrayList<>();
command.add(ffmpegPath);
command.add("-i");
command.add(oldfilepath);
command.add("-c:v");
command.add("libx264");
command.add("-mbd");
command.add("0");
command.add("-c:a");
command.add("aac");
command.add("-strict");
command.add("-2");
command.add("-pix_fmt");
command.add("yuv420p");
command.add("-movflags");
command.add("faststart");
command.add(outputPath + fileName + ".mp4");
try {
if (OSinfo.isWindows()) {
Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
new PrintStream(videoProcess.getErrorStream()).start();
new PrintStream(videoProcess.getInputStream()).start();
videoProcess.waitFor();
} else {
logger.info("linux开始");
StringBuilder test = new StringBuilder();
for (String s : command) test.append(s).append(" ");
logger.info(test.toString());
// 执行命令
Process p = Runtime.getRuntime().exec(test.toString());
// 取得命令结果的输出流
InputStream fis = p.getInputStream();
// 用一个读输出流类去读
InputStreamReader isr = new InputStreamReader(fis);
// 用缓冲器读行
BufferedReader br = new BufferedReader(isr);
String line = null;
// 直到读完为止
while ((line = br.readLine()) != null) {
logger.info("视频转换:{}",line);
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} public static void main(String[] args) {
String ffmpegPath = "D:/upload/";
String outputPath = "D:/upload/ffmpeg/ffmpeg.exe";
String inputPath = "D:/upload/8ab0c280f0f149c78c3b205d905898c7@111111.avi";
String fileName = "22222";
ConvertVideoUtils convertVideoUtils = new ConvertVideoUtils(inputPath, outputPath, ffmpegPath, fileName);
convertVideoUtils.setVoidInfos();
} }

java视频格式转换的更多相关文章

  1. java视频格式转换代码

    http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ...

  2. C#使用FFmpeg 将视频格式转换成Gif图片示例

    根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...

  3. Ubuntu18.04下使用Blender进行视频格式转换

    Ubuntu下可以使用Blender的Video Editing功能进行视频格式转换, 具体步骤: 打开Blender后, 在顶层菜单栏中, 将Choose Screen Layout修改为Video ...

  4. Java日期格式转换

    Java时间格式转换大全 import java.text.*;import java.util.Calendar;public class VeDate {/**   * 获取现在时间   *    ...

  5. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...

  6. 视频格式转换.ZC资料

    1.20191013: ZC:这些都是 2015年做的尝试,之前貌似没有记录下来,现在 再次用到,把用到的记录下来: ZC: (1) 使用的视频格式转换工具是 "??/XiGua Yings ...

  7. iSkysoft iMedia Converter Deluxe Mac如何制作视频?视频格式转换工具制作动图的方法

    使用iSkysoft iMedia Converter Deluxe Mac如何制作视频?使用视频格式转换工具,你可以轻松进行动图或视频的制作,也可以把你喜欢的视频的某一段提取出来,制作成你自己风格的 ...

  8. C#使用FFmpeg 将视频格式转换成MP4示例

    一.常用视频格式分辨率 640x480p 720p格式,分辨率为1280×720p / 60Hz,行频为45kHz 1080p格式,分辨率为1920×1080逐行扫描,专业格式 二.FFmpeg部分参 ...

  9. Java时间格式转换工具类

    把当前时间修改成指定时间 //把当前时间修改成指定时间 public String dateUtil(Integer seconds, String dateFormatPattern){ Date ...

随机推荐

  1. 实验3ss

    1.实验任务1 #include <math.h> #include <stdio.h> int main() { float a,b,c,x1,x2; float delta ...

  2. mybatis foreach collection

    原文传递:https://blog.csdn.net/qq_24084925/article/details/53790287 foreach元素的属性主要有 item,index,collectio ...

  3. CephFS cache tier实践

    这是一篇分享文,作者因为最近想深入研究下ceph的cache pool,作者写的文章非常的好,这里先直接翻译这篇文章,然后再加入我自己的相关数据 blog原文 作者想启动blog写下自己的Openst ...

  4. java 打包压缩包下载文件

    1. 下载压缩包zip方法 @Override public void downloadZip(HttpServletResponse servletResponse) { String nowTim ...

  5. Python网络编程_抓取百度首页代码(注释详细)

    1 #coding=utf-8 2 #网络编程 3 4 #客户端建立socket套接字 5 #引入socket模块 6 import socket 7 #实例化一个套接字,2个参数分别是: IPV4. ...

  6. git-关联远程git仓库详细步骤-2

    1.打开git bash,在控制台中输入以下命令:ssh-keygen -t rsa -C "邮箱地址" 结果: fanxi@AT8350 MINGW64 ~$ ssh-keyge ...

  7. Mac系统使用Parallels Desktop安装Win10

    1.Parallels Desktop破解版下载 2.原版Windows 10 2004 X64位 (原版安装)2020 11 Windows 系统镜像必须为原版,ghost版不行.亲测ghost版本 ...

  8. git 最新笔记,工作中的必会技能

    1.状态查看: git status 可以查看工作区,暂存区的状态 untracked 在暂存区没有该文件 modified 修改过 staged 使用git add 暂存过 2.添加操作: git ...

  9. 巧妙利用Camtasia制作网课

    随着互联网的快速发展,网络学习变得非常流行.这种躺在床上就可以获取知识的方法让大家渐渐地都喜欢上了学习,那么我们是否想要了解一下网课的幕后制作呢. 今天我给大家带来的便是巧妙利用Camtasia进行网 ...

  10. 思维导图哪款好用?怎么借助MindManager 做旅游计划

    世界那么大,想不想去看看!想不想来一场说走就走的旅行?尤其是在新冠的笼罩下, 2020年已经过去四分之三,国内疫情已经基本得到了控制,接下来的日子里你想出门好好玩玩吗? 说走就走的旅游虽然美好,但是你 ...