javaffmpeg
『壹』 java调取ffmpeg总是弹出命令窗口,我部署到服务器上应该怎么做
也得弹出一个控制台窗口,因为这是JAVA
『贰』 linux 上java调用ffmpeg转码只有几秒长
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;
public class Test {
public static void main(String[] args) {
List<String> commend = new ArrayList<String>();
commend.add("/usr/local/ffmpeg2/bin/./ffmpeg");
commend.add("-i");
commend.add("/opt/spzh/yysp.avi");
commend.add("-ab");
commend.add("128");
commend.add("-acodec");
commend.add("libfaac");
commend.add("-ac");
commend.add("1");
commend.add("-ar");
commend.add("22050");
commend.add("-r");
commend.add("24");
commend.add("-y");
commend.add("/opt/spzh/out/yysp18.flv");
StringBuffer test=new StringBuffer();
for(int i=0;i<commend.size();i++)
test.append(commend.get(i)+" ");
System.out.println(test);
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(test.toString());
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("视频转换成功");
}
}
『叁』 java 调用 ffmpeg 进行视频截取
ffmpeg -y -i SF160114692.flv -vcodec -acodec -ss 00:02:00.000
-t 0:5:30 -f flv 3.flv
(1)用-ss指定开始时间,用hh:mm:ss[.ms]格式,或者换算成用秒计。
(2)用-t指定时间长度,和-ss的格式一样,用hh:mm:ss[.ms]格式,或者换算成用秒计。
java中可以使用ProcessBuilder调用命令行
『肆』 java使用ffmpeg进行视频截图,不成功,程序也没报错!
我用的是基于C++的ffmpeg开发,ffmpeg原本是针对linux下的GCC编译器,当然通过MinGW也可以在win下进行编译,但是需要安装额外的编译环境,你可以上chinavideo上去看看,那上面说的很清楚,的你所说的问题也不是很难,多看看开发文档就可以解决了。
『伍』 如何用java调用ffmpeg进行视频转码
举个例子:原视频有7M,直接在Linux下执行装换命令是正常的,而用该Java代码执行该命令时视频只能转换1M;而且转换成MP4的时候,视频无法播放。
『陆』 Java利用ffmpeg对视频逐帧保存,截取的帧太多近万张,如何设置帧间隔大些,使一定时间内的帧数变少
我给出正解:
ffmpeg -i /mnt/11m夜店_H264.vod /mnt/h264/ffmpeg-0.5.1/picture/1m%04d.jpg -vcodec mjpeg -ss 0:1:2 -t 0:0:1
以上将视频 1分02秒 处开始,持续1秒长的视频输出为jpg的序列
-ss 起始时间
-t 持续时间。
如果你要从片头开始,转换前2分钟为图片序列,则是:
ffmpeg -i /mnt/11m夜店_H264.vod /mnt/h264/ffmpeg-0.5.1/picture/1m%04d.jpg -vcodec mjpeg -ss 0:0:0 -t 0:2:0
另外告诉你,输出的图片数量是25/s的
『柒』 怎么用java读取ffmpeg输出流
public static void main(String[] args) {
String result = processFLV("E:\\test\\京视传媒\\体育类\\xiao.flv");
PatternCompiler compiler =new Perl5Compiler();
try {
String regexDuration ="Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
String regexVideo ="Video: (.*?), (.*?), (.*?)[,\\s]";
String regexAudio ="Audio: (\\w*), (\\d*) Hz";
Pattern patternDuration = compiler.compile(regexDuration,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherDuration = new Perl5Matcher();
if(matcherDuration.contains(result, patternDuration)){
MatchResult re = matcherDuration.getMatch();
System.out.println("提取出播放时间 ===" +re.group(1));
System.out.println("开始时间 =====" +re.group(2));
System.out.println("bitrate 码率 单位 kb==" +re.group(3));
}
Pattern patternVideo = compiler.compile(regexVideo,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherVideo = new Perl5Matcher();
if(matcherVideo.contains(result, patternVideo)){
MatchResult re = matcherVideo.getMatch();
System.out.println("编码格式 ===" +re.group(1));
System.out.println("视频格式 ===" +re.group(2));
System.out.println(" 分辨率 == =" +re.group(3));
}
Pattern patternAudio = compiler.compile(regexAudio,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherAudio = new Perl5Matcher();
if(matcherAudio.contains(result, patternAudio)){
MatchResult re = matcherAudio.getMatch();
System.out.println("音频编码 ===" +re.group(1));
System.out.println("音频采样频率 ===" +re.group(2));
}
} catch (MalformedPatternException e) {
e.printStackTrace();
}
}
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
private static String processFLV(String inputPath) {
/*
if (!checkfile(inputPath)){
_log.warn(inputPath+" is not file");
return false;
}
*/
List<String> commend=new java.util.ArrayList<String>();
// commend.add("e:\\videoconver\\ffmpeg\\ffmpeg ");//可以设置环境变量从而省去这行
commend.add("ffmpeg");
commend.add("-i");
commend.add(inputPath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
builder.redirectErrorStream(true);
Process p= builder.start();
//1. start
BufferedReader buf = null; // 保存ffmpeg的输出结果流
String line = null;
//read the standard output
buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb= new StringBuffer();
while ((line = buf.readLine()) != null) {
System.out.println(line);
sb.append(line);
continue;
}
int ret = p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
//1. end
return sb.toString();
} catch (Exception e) {
// System.out.println(e);
return null;
}
}
『捌』 有人在Eclipse下 用过ffmpeg-java.jar这个包吗
Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot locate library avformat-51
at com.sun.jna.NativeLibrary.<init>(NativeLibrary.java:73)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:94)
at com.sun.jna.Library$Handler.<init>(Library.java:104)
at com.sun.jna.Native.loadLibrary(Native.java:156)
at com.sun.jna.Native.loadLibrary(Native.java:139)
at net.sf.ffmpeg_java.AVFormatLibrary.<clinit>(AVFormatLibrary.java:18)
at AVcodeSample.main(AVcodeSample.java:38)
『玖』 java怎么调用ffmpeg进行音频转码
Runtime.exec 执行命令行。。。。。。。。。。也可以写成.bat/.cmd批处理文件(linux下.sh),再执行