『壹』 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),再執行