- 浏览: 310869 次
- 性别:
- 来自: 山西太原
文章分类
最新评论
-
A741841403:
core-renderer-CN.jar这个包是怎么引入的啊, ...
flying saucer 中文不显示、以及中文换行的问题解决 -
A741841403:
您好,能提供下,中文字体换行包的jar文件吗
flying saucer 中文不显示、以及中文换行的问题解决 -
nightw13h:
楼主 我也遇到了这个问题 照你的套路也把问题解决了 当时没 ...
maven 单元测试 Absent Code attribute in method that is not native or abstract in cl -
devilyard:
借地请教个问题:fatal: open /dev/null o ...
msysGit 安装后的配置 -
tiancai2:
如果在action中定义不是string类型的,而是一个Per ...
Struts2 、jquery之ajaxfileupload异步上传插件
原文地址: http://www.ll19.com/log/tag/FFmpeg/#
java调用FFmpeg及mencoder转换视频为FLV并截图,需要FFmpeg及mencoder支持请自行下载,以下为相关程序:
Conver.java
java调用FFmpeg及mencoder转换视频为FLV并截图,需要FFmpeg及mencoder支持请自行下载,以下为相关程序:
Conver.java
Conver.java
package com.ll19.flv; public class Conver { public void run() { try { // 转换并截图 String filePath = "D:\\video\\old\\test.avi"; ConverVideo cv = new ConverVideo(filePath); cv.beginConver(); // 仅截图 // ProcessFlvImg pfi = new ProcessFlvImg(); // pfi.processImg("D:\\video\\old\\test.avi"); } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { Conver c = new Conver(); c.run(); }
ConverVideo.java
package com.ll19.flv; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; public class ConverVideo { private Date dt; private long begintime; private String PATH; private String filerealname; // 文件名 不包括扩展名 private String filename; // 包括扩展名 private String videofolder = "D:\\video\\other\\"; // 别的格式视频的目录 private String flvfolder = "D:\\video\\flv\\"; // flv视频的目录 private String ffmpegpath = "D:\\video\\FFmpeg\\bin\\ffmpeg.exe"; // ffmpeg.exe的目录 private String mencoderpath = "D:\\video\\mencoder\\"; // mencoder的目录 private String videoRealPath = "D:\\video\\flv\\"; // 截图的视频目录; private String imageRealPath = "D:\\video\\img\\"; // 截图的存放目录 public ConverVideo() { } public ConverVideo(String path) { PATH = path; } public String getPATH() { return PATH; } public void setPATH(String path) { PATH = path; } public boolean beginConver() { File fi = new File(PATH); filename = fi.getName(); filerealname = filename.substring(0, filename.lastIndexOf(".")) .toLowerCase(); System.out.println("----接收到文件(" + PATH + ")需要转换-------------------------- "); if (!checkfile(PATH)) { System.out.println(PATH + "文件不存在" + " "); return false; } dt = new Date(); begintime = dt.getTime(); System.out .println("----开始转文件(" + PATH + ")-------------------------- "); if (process()) { Date dt2 = new Date(); System.out.println("转换成功 "); long endtime = dt2.getTime(); long timecha = (endtime - begintime); String totaltime = sumTime(timecha); System.out.println("共用了:" + totaltime + " "); if (processImg()) { System.out.println("截图成功了 "); } else { System.out.println("截图不成功了 "); } PATH = null; return true; } else { PATH = null; return false; } } public boolean processImg() { List commend = new java.util.ArrayList(); commend.add(ffmpegpath); commend.add("-i"); commend.add(videoRealPath + filerealname + ".flv"); 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(imageRealPath + filerealname + ".jpg"); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } private boolean process() { int type = checkContentType(); boolean status = false; if (type == 0) { // status = processFLV(PATH);// 直接将文件转为flv文件 status = processFLV(PATH); } else if (type == 1) { String avifilepath = processAVI(type); if (avifilepath == null) return false; // avi文件没有得到 else { System.out.println("kaishizhuang"); status = processFLV(avifilepath);// 将avi转为flv } } return status; } private 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 boolean checkfile(String path) { File file = new File(path); if (!file.isFile()) { return false; } else { return true; } } // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. private String processAVI(int type) { List commend = new java.util.ArrayList(); commend.add(mencoderpath); commend.add(PATH); commend.add("-oac"); commend.add("mp3lame"); commend.add("-lameopts"); commend.add("preset=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(videofolder + filerealname + ".avi"); // 命令类型:mencoder 1.rmvb -oac mp3lame -lameopts preset=64 -ovc xvid // -xvidencopts bitrate=600 -of avi -o rmvb.avi try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); Process p = builder.start(); doWaitFor(p); return videofolder + filerealname + ".avi"; } catch (Exception e) { e.printStackTrace(); return null; } } // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) private boolean processFLV(String oldfilepath) { if (!checkfile(PATH)) { System.out.println(oldfilepath + " is not file"); return false; } List commend = new java.util.ArrayList(); commend.add(ffmpegpath); commend.add("-i"); commend.add(oldfilepath); commend.add("-ab"); commend.add("64"); commend.add("-acodec"); commend.add("mp3"); commend.add("-ac"); commend.add("2"); commend.add("-ar"); commend.add("22050"); commend.add("-b"); commend.add("230"); commend.add("-r"); commend.add("24"); commend.add("-y"); commend.add(flvfolder + filerealname + ".flv"); try { ProcessBuilder builder = new ProcessBuilder(); String cmd = commend.toString(); builder.command(commend); Process p = builder.start(); doWaitFor(p); p.destroy(); deleteFile(oldfilepath); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public int doWaitFor(Process p) { InputStream in = null; InputStream err = null; int exitValue = -1; // returned to caller when p is finished try { System.out.println("comeing"); in = p.getInputStream(); err = p.getErrorStream(); boolean finished = false; // Set to true when p is finished while (!finished) { try { while (in.available() > 0) { Character c = new Character((char) in.read()); System.out.print(c); } while (err.available() > 0) { Character c = new Character((char) err.read()); System.out.print(c); } exitValue = p.exitValue(); finished = true; } catch (IllegalThreadStateException e) { Thread.currentThread().sleep(500); } } } catch (Exception e) { System.err.println("doWaitFor();: unexpected exception - " + e.getMessage()); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { System.out.println(e.getMessage()); } if (err != null) { try { err.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } } return exitValue; } public void deleteFile(String filepath) { File file = new File(filepath); if (PATH.equals(filepath)) { if (file.delete()) { System.out.println("文件" + filepath + "已删除"); } } else { if (file.delete()) { System.out.println("文件" + filepath + "已删除 "); } File filedelete2 = new File(PATH); if (filedelete2.delete()) { System.out.println("文件" + PATH + "已删除"); } } } public String sumTime(long ms) { int ss = 1000; long mi = ss * 60; long hh = mi * 60; long dd = hh * 24; long day = ms / dd; long hour = (ms - day * dd) / hh; long minute = (ms - day * dd - hour * hh) / mi; long second = (ms - day * dd - hour * hh - minute * mi) / ss; long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss; String strDay = day < 10 ? "0" + day + "天" : "" + day + "天"; String strHour = hour < 10 ? "0" + hour + "小时" : "" + hour + "小时"; String strMinute = minute < 10 ? "0" + minute + "分" : "" + minute + "分"; String strSecond = second < 10 ? "0" + second + "秒" : "" + second + "秒"; String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond; strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond + "毫秒" : "" + strMilliSecond + " 毫秒"; return strDay + " " + strHour + ":" + strMinute + ":" + strSecond + " " + strMilliSecond; } }
package com.ll19.flv; import java.io.File; import java.util.List; public class ProcessFlvImg { public String ffmpegpath = "D:\\video\\FFmpeg\\bin\\ffmpeg.exe"; // ffmpeg.exe的目录 public boolean processImg(String path) { File fi = new File(path); List commend = new java.util.ArrayList(); commend.add(ffmpegpath); commend.add("-i"); commend.add(path); 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(fi.getPath() + ".jpg"); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } }
什么是FFmpeg?
-
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证质量和性能,libavcodec里很多codec都是从头开发的。FFMpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows等。
FFmpeg功能
-
ffmpeg是一个源于Linux的工具软件,是FLV视频转换器,可以轻易地实现FLV向其它格式avi、asf、 mpeg的转换或者将其它格式转换为flv。
ffmpeg基本用法如下:
-
ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile
输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。
大部分常见的格式都能够“通杀”。象常见的各种mpeg,AVI封装的DIVX和Xvid等等
具体的格式支持列表可以使用ffmpeg -formats查看或直接查阅文档。
示例:
-
ffmpeg -y -i input.mov -vcodec libxvid -s 400x240 -aspect 16:9 -r 24 -b 600k -acodec libfaac -ab 128k -ar 48000 -ac 2 -f mp4 test.mp4
参数解释:
-
-y 覆盖输出文件,即如果test.mp4文件已经存在的话,不经提示就覆盖掉了
-i "input.mov" 输入文件名,可以自己修改路径和名字
-vcodec libxvid 使用libxvid 编码压缩视频,(cvodec参数列表在 ffmpeg安装目录下通过./configure查询)
-s 400x240 输出的分辨率,注意片源一定要是16:9的不然会变形
-r 24 帧数 (一般用25就可以了)
-b 600视频数据流量,用-b xxx表示使用固定码率,数字可更改;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高(一般用800就可以了,否则文件会很大)
-acodec aac 音频编码用AAC
-ab 128 音频数据流量,一般选择32、64、96、128
-ar 48000 声音的采样频率
-ac 2 声道数1或2
-f mp4 输出mp4格式
"test.mp4" 输出文件名,也可以修改路径和名称
[b]ffmpeg参数解释--中文详细[/b]
a) 通用选项
-
-L license
-h 帮助
-fromats 显示可用的格式,编解码的,协议的...
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string 设置评论
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置,只需要输入如下的就可以了:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高质量设置
-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
b) 视频选项
-
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size –cropleft size –cropright size
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
c)高级视频选项
-
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-qscale q 使用固定的视频量化标度(VBR)
-qmin q 最小视频量化标度(VBR)
-qmax q 最大视频量化标度(VBR)
-qdiff q 量化标度间最大偏差 (VBR)
-qblur blur 视频量化标度柔化(VBR)
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
-b_qfactor factor 在p和b帧间的qp因子
-i_qfactor factor 在p和i帧间的qp因子
-b_qoffset offset 在p和b帧间的qp偏差
-i_qoffset offset 在p和i帧间的qp偏差
-rc_eq equation 设置码率控制方程 默认tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC
-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4个运动矢量 仅用于mpeg4
-part 使用数据划分 仅用于mpeg4
-bug param 绕过没有被自动监测到编码器的问题
-strict strictness 跟标准的严格性
-aic 使能高级帧内编码 h263+
-umv 使能无限运动矢量 h263+
-deinterlace 不采用交织方法
-interlace 强迫交织法编码仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大
-psnr 计算压缩帧的psnr
-vstats 输出视频编码统计到vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开
D)音频选项
-
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码
E)音频/视频捕获选项
-
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置DV1394捕获
-av device 设置音频设备 比如/dev/dsp
F)高级选项
-
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以bits为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流(只工作于图像流,用于ffserver测试)
网友使用经验:
-
1、ffmpeg对于rm的处理能力实在不敢恭维。也许是因为我主要使用二进制包安装的缘故,对于Real媒体格式只能处理老式的RV8编码的格式。而且效果不佳。
2、格式转换是一件很耗费CPU资源的事情。虽说ffmpeg已经比WinAVI啦,TmpgEnc这些win下的非专业级视频处理软件做的好些了。毕竟我们可以把ffmpeg运行的时候放到后台。
3、ffmpeg不是万能的,虽说支持的格式很多,但是如果你不是用的最新CVS出来的版本,可能碰上某些古怪的媒体文件就要郁闷。
4、ffmpeg全部是命令行操作。哪位达人写个GUI前端出来就可以让不少菜鸟脱离苦海了。还有就是不能批量处理,但是这个可以用shell帮忙解决.
5、转换速度比较:总体上ffmpeg转换的速度快于Mencoder
6、转换格式要求:rm、rmvb、rt、swf格式的文件只能用Mencoder转换。
7、纯音频格式只能用Mencoder进行转换。如何判断是否是纯音频格式可以通过使用命令 FFmpeg -i "文件的完整路径" 获得输出后就可以分析出来。
8、.mov格式的用ffmpeg转换出来的效果比较差,建议用Mencoder进行转换,wmv8用ffmpeg经常会有花屏产生建议用Mencoder。
9、视频按比率输出的问题:必须先获取源视频文件的宽度和高度(也是通过 FFmpeg -i "文件的完整路径" 获得输出后就可以分析出来)根据这个高度和宽度的比率来设定输出文件的尺寸。
10、可能的难点:因为这ffmpeg 和 Mencoder都是命令行工具(当然你也可以下载源代码自己修改成com之类的)。
ffmpeg转换技巧:
先找一个可以播放的视频文件,查看该视频的参数,如视频编码格式,音频编码格式等(在win下可以通过kmplayer播放,然后查看属性;Linux下直接通过mplayer命令播放可以看到),获得正确的参数之后再转换应该就行了。
- ffmpeg.zip (1.4 MB)
- 下载次数: 50
- drv33260.dll_drv43260.dll_ffmpeg.exe_mencoder.exe_Pncrt.dll以及java程序.rar (5.4 MB)
- 下载次数: 84
发表评论
-
java 智能格式化中文时间
2016-03-24 15:19 882public class DateUtils { ... -
线程池ExecutorService的submit和execute
2013-12-02 17:15 1116转:线程池ExecutorService的submit和e ... -
用AjaxProxyServlet 跨域ajax请求
2013-11-25 14:45 845package org.xh.Servlet; im ... -
学习~~~~~~~
2013-10-28 11:05 636学习视频地址:http://v.gotomao. ... -
java 自定义注解
2013-07-10 16:23 874Java注解是附加在代码中的一些元信息,用于一些工具在 ... -
StringUtils用法+StringUtils详细介绍
2013-05-10 13:20 1135public static void TestStr(){ ... -
Java多线程大总结
2013-03-27 10:37 1148转载:http://50vip.com/blog.php?i ... -
计算两个日期天、小时、分钟、秒
2013-02-28 19:29 887public static void dateDiff ... -
分页公式----分页 翻页 序号 序列 编号 自动增加
2013-02-26 12:36 5030分页公式:int total = (int) Math.c ... -
axis2 基础介绍
2012-11-29 18:27 21781.AXIS2 简介: Apache Axis2 项 ... -
log4j.properties配置详解
2011-10-14 18:06 892Log4J的配置文件(Configuration File)就 ... -
myeclipse svn插件安装
2011-07-25 15:07 927MyEclipse 6.X 6.x的操作比较简单,可通过官方提 ... -
关于日期常用操作工具类
2011-03-23 15:55 979public class DateUtils { ... -
项目管理-SVN-简明课程
2011-01-18 17:02 992SVN简明课程 1. 版本控制介绍 ... -
项目管理-SVN-安装手册
2011-01-18 17:01 1173如何快速建立Subversion服务器,并且在项目中使用起 ...
相关推荐
在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...
在Java中使用FFmpeg,通常会借助于一些第三方库,如JNA(Java Native Access)或jni4net,这些库允许Java代码直接调用FFmpeg的C/C++接口。例如,可以创建一个Java方法,传递FFmpeg的命令行参数,然后通过`Runtime....
要将视频转换为FLV格式,使用FFmpeg的基本命令格式如下: ```bash ffmpeg -i 输入视频文件 -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k 输出的FLV文件 ``` 这里,`-i` 参数指定输入视频文件,`-c:v ...
在视频转换过程中,需要首先将视频文件上传到服务器,然后使用FFMPEG和MENCODER将其转换成FLV格式,最后将其嵌入PHP网页中。这个过程可以自动完成,无需人工干预。 PHP网页是指使用PHP语言编写的网页程序。PHP是一...
Java使用ffmpeg和mencoder实现视频转码是指使用Java语言调用ffmpeg和mencoder这两个流行的开源多媒体处理工具来实现视频转码的过程。视频转码是将视频文件从一种格式转换为另一种格式的过程,例如从AVI转换为MP4或从...
详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:WindowsSystem32下面 这几天在写一个视频管理系统,...
例如,使用FFmpeg进行视频转码的基本步骤如下: 1. **构建命令**:根据需要设置输入文件、输出文件、编码参数等,构建FFmpeg或MEncoder的命令行字符串。 2. **执行命令**:使用`Runtime.getRuntime().exec(command)...
在视频转换场景中,FFmpeg可以轻松地将多种视频格式转换为FLV,以适应网络播放需求。使用FFmpeg进行转换的基本命令如下: ```bash ffmpeg -i input_video.mp4 -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128...
在本DEMO中,mencoder被用来将视频转换为FLV格式,这是一种广泛应用于网络流媒体的格式,因其体积小、播放流畅而受到欢迎。转换过程通常包括以下步骤: 1. 首先,确定源视频文件的位置和输出目标。 2. 使用mencoder...
1. **音视频转换**:使用`-i`参数指定输入文件,`-c:v`和`-c:a`分别指定视频和音频编码器,`output.mp4`为输出文件名。例如: ``` ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4 ``` 2. **调整视频...
压缩包内的`java调用视频转换工具ffmpeg.doc`应该包含了如何在Java代码中使用FFmpeg的具体示例。通常需要编写一个Java工具类,封装FFmpeg的命令行调用,包括设置输入输出路径、编码参数等。 4. 使用说明文档:`java...
使用FFmpeg进行视频格式转换非常简单,基本命令结构如下: ``` ffmpeg -i 输入文件 -c:v 输出编码器 -c:a 输出音频编码器 输出文件 ``` 例如,将一个MP4文件转换为WebM格式: ``` ffmpeg -i input.mp4 -c:v libvpx-...
其优势在于速度和效率,对于大批量的视频转换任务,MEncoder往往能提供更快的处理速度。 以下是FFmpeg和MEncoder的一些关键知识点: 1. **基本命令行用法**:两个工具都通过命令行接口操作,用户需要指定输入文件...
FFmpeg和mencoder是两个广泛使用的音视频转码工具,它们在数字媒体处理领域具有重要地位。FFmpeg是一个全面的开源项目,包含了多种用于处理音视频的库和工具,而mencoder则是MPlayer播放器的一部分,专为视频转码...
要将RM或RMVB转换为FLV,首先你需要下载并安装FFmpeg和MEncoder。在这个压缩包中,"ffmpeg.zip"包含FFmpeg的源代码或预编译版本,而"MPlayer-mingw32-1.0rc2.zip"可能是MPlayer的Windows版本,其中也包含了MEncoder...
Java调用FFmpeg实现视频转换涉及到Java编程语言和FFmpeg多媒体处理工具的使用。FFmpeg是一个非常强大的命令行工具,支持几乎所有的视频文件格式转换。在Java中调用FFmpeg,通常使用Runtime或者ProcessBuilder类来...
- `processFLV(String path)`:使用FFmpeg将文件转换为flv格式。 #### 三、注意事项 - **异常处理:** - 在实际应用中,需要考虑文件不存在、转换失败等异常情况,并添加相应的异常处理逻辑。 - **性能优化:**...
例如,如果你需要将一个MP4视频转换为WebM格式,你可以使用以下命令: ``` ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 1M -c:a libvorbis output.webm ``` 在这个命令中,`-i`指定输入文件,`-c:v libvpx-vp...
对于将视频文件转换为`.flv`,使用ffmpeg的命令如下: ```bash ffmpeg -i input_video_file -c:v flv -c:a libmp3lame -b:a 64k output.flv ``` 这里的`-i input_video_file`是输入文件,`-c:v flv`指定视频编码器...
在Java中使用FFmpeg,通常需要借助于一个Java库,如JAVE(Java Audio Video Encoder),它封装了FFmpeg的命令行操作,提供了一个友好的Java API。首先,你需要将FFmpeg添加到你的系统路径中,然后通过JAVE调用相应的...