㈠ 請教大神,java調用ffmpeg,將兩段.wav音頻,拼接成一段.wav音頻,怎麼做
ffmpeg是c實現的來,java想調它的自api,起碼要寫一層jni出來,直接在jni層調用ffmpeg的api,然拋到java層去invoke.
當然還有一種,直接用命令實現,首先你需要編譯出可以在你當前環境上運行的ffmpeg,然後配置好拼接音頻的參數,使用Runtime的exec來執行這個命令,這種方法雖然簡單,但是一旦換個執行環境可能就沒有辦法使用你本機編譯的ffmpeg了,所以不推薦。
㈡ 怎麼用java讀取ffmpeg輸出流
public static void main(String[] args) {
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;
}
}
㈢ ffmpeg 基本用法
1、libavformat:用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能,包含demuxers和muxer庫;
2、libavcodec:用於各種類型聲音/圖像編解碼;
3、libavutil:包含一些公共的工具函數;
4、libswscale:用於視頻場景比例縮放、色彩映射轉換;
5、libpostproc:用於後期效果處理;
6、ffmpeg:是一個命令行工具,用來對視頻文件轉換格式,也支持對電視卡實時編碼;
7、ffsever:是一個HTTP多媒體實時廣播流伺服器,支持時光平移;
8、ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;
在這組成部分中,需要熟悉基礎概念有
容器(Container)
容器就是一種文件格式,比如flv,mkv等。包含下面5種流以及文件頭信息。
流(Stream)
是一種視頻數據信息的傳輸方式,5種流:音頻,視頻,字幕,附件,數據。
幀(Frame)
幀代表一幅靜止的圖像,分為I幀,P幀,B幀。
編解碼器(Codec)
是對視頻進行壓縮或者解壓縮,CODEC =COde (編碼) +DECode(解碼)
復用/解復用(mux/demux)
把不同的流按照某種容器的規則放入容器,這種行為叫做復用(mux)
把不同的流從某種容器中解析出來,這種行為叫做解復用(demux)
1、FFmpeg程序把-i參數指定的若干文件內容讀入到內存,按照輸入的參數或者程序默認的參數來處理並且把結果寫入到若乾的文件中。輸入和輸出文件可以是計算機文件、管道、網路流、捕獲設備等。
2、FFmpeg用libavformat包調用解復用器(demuxers)來讀取輸入文件中被編碼的數據包(packets),如果有多個輸入文件,FFmpeg以有效輸入流的最小時間戳來同步,
3、然後解碼器(decoder)從已編碼的數據包中產生未被壓縮的幀(frame),在那之後調用可選的過濾器。
4、這些幀被傳遞到編碼器,編碼器會產生新的編碼包
5、把新的編碼包傳遞給復用器(muxer)處理並且把結果寫入到輸出文件中。
在多媒體處理中,filter的意思是被編碼到輸出文件之前用來修改輸入文件內容的一個軟體工具。如:視頻翻轉,旋轉,縮放等。
語法:[input_link_label1]… filter_name=parameters [output_link_label1]…
1、視頻過濾器 -vf
如input.mp4視頻按順時針方向旋轉90度
ffplay -i input.mp4 -vf transpose=1
如input.mp4視頻水平翻轉(左右翻轉)
ffplay -i input.mp4 -vf hflip
2、音頻過濾器 -af
實現慢速播放,聲音速度是原始速度的50%
offplay input.mp3 -af atempo=0.5
過濾器鏈(Filterchain)
Filterchain = 逗號分隔的一組filter
語法:「filter1,filter2,filter3,…filterN-2,filterN-1,filterN」
順時針旋轉90度並水平翻轉
ffplay -i input.mp4 -vf transpose=1,hflip
過濾器圖(Filtergraph)
第一步: 源視頻寬度擴大兩倍。
ffmpeg -i ji.mp4 -t 10 -vf pad=2*iw output.mp4
第二步:源視頻水平翻轉
ffmpeg -i ji.mp4 -t 10 -vf hflip output2.mp4
第三步:水平翻轉視頻覆蓋output.mp4
ffmpeg -i output.mp4 -i output2.mp4 -filter_complex overlay=w compare.mp4
是不是很復雜?
用帶有鏈接標記的過濾器圖(Filtergraph)只需一條命令
基本語法
Filtergraph = 分號分隔的一組filterchain
「filterchain1;filterchain2;…filterchainN-1;filterchainN」
Filtergraph的分類
1、簡單(simple) 一對一
2、復雜(complex)多對一, 多對多
簡單過濾器圖處理流程:
復雜過濾器圖處理流程:
對於剛才用三步處理的方式,用過濾器圖可以這樣做:
ffplay -f lavfi -i testsrc -vf split[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=w
F1: split過濾器創建兩個輸入文件的拷貝並標記為[a],[b]
F2: [a]作為pad過濾器的輸入,pad過濾器產生2倍寬度並輸出到[1].
F3: [b]作為hflip過濾器的輸入,vflip過濾器水平翻轉視頻並輸出到[2].
F4: 用overlay過濾器把 [2]覆蓋到[1]的旁邊.
一些多媒體容器比如AVI,mkv,mp4等,可以包含不同種類的多個流,如何從容器中抽取各種流呢?
語法:
-map file_number[:stream_type][:stream_number]
這有一些特別流符號的說明:
1、-map 0 選擇第一個文件的所有流
2、-map i:v 從文件序號i(index)中獲取所有視頻流, -map i:a 獲取所有音頻流,-map i:s 獲取所有字幕流等等。
3、特殊參數-an,-vn,-sn分別排除所有的音頻,視頻,字幕流
tip:對比上面的圖,可以知道,假設有兩個文件ffmpeg -i fist.mp4 -i second.mp4 ..output.mp4
如果想去兩個文件的音視頻流 ffmpeg -i fist.mp4 -i second.mp4 map:0 -map 1 output.mp4
如果想去第一個文件的視頻流,第二個文件的音頻流ffmpeg -i fist.mp4 -i second.mp4 -map:v:0 -map:a:0 output.mp4
可用的bit流 :ffmpeg –bsfs
可用的編解碼器:ffmpeg –codecs
可用的解碼器:ffmpeg –decoders
可用的編碼器:ffmpeg –encoders
可用的過濾器:ffmpeg –filters
可用的視頻格式:ffmpeg –formats
可用的聲道布局:ffmpeg –layouts
可用的license:ffmpeg –L
可用的像素格式:ffmpeg –pix_fmts
可用的協議:ffmpeg -protocals
碼率和幀率是視頻文件的最重要的基本特徵,對於他們的特有設置會決定視頻質量。如果我們知道碼率和時長那麼可以很容易計算出輸出文件的大小。
幀率:幀率也叫幀頻率,幀率是視頻文件中每一秒的幀數,肉眼想看到連續移動圖像至少需要15幀。
碼率:比特率(也叫碼率,數據率)是一個確定整體視頻/音頻質量的參數,秒為單位處理的位元組數,碼率和視頻質量成正比,在視頻文件中中比特率用bps來表達。
設置幀率
1、用 -r 參數設置幀率
ffmpeg –i input.mp4 –r fps output.mp4
2、用fps filter設置幀率
ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm
設置碼率 –b 參數
-b
ffmpeg -i film.avi -b 1.5M film.mp4
音頻:-b:a 視頻: - b:v
設置視頻碼率為1500kbps
ffmpeg -i input.avi -b:v 1500k output.mp4
控制輸出文件大小
-fs (file size首字母縮寫)
ffmpeg -i input.avi -fs 1024K output.mp4
計算輸出文件大小
(視頻碼率+音頻碼率) * 時長 /8 = 文件大小K
用-s參數設置視頻解析度,參數值wxh,w寬度單位是像素,h高度單位是像素
ffmpeg -i input_file -s 320x240 output_file
2、預定義的視頻尺寸
下面兩條命令有相同效果
ffmpeg -i input.avi -s 640x480 output.avi
ffmpeg -i input.avi -s vga output.avi
下表列出了所有的預定義尺寸
Scale filter調整解析度
Scale filter的優點是可以使用一些額外的參數
語法:
Scale=width:height[:interl={1|-1}]
下表列出了常用的額外參數
下面兩條命令有相同效果
ffmpeg -i input.mpg -s 320x240 output.mp4
ffmpeg -i input.mpg -vf scale=320:240 output.mp4
對輸入視頻成比例縮放
改變為源視頻一半大小
ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4
改變為原視頻的90%大小:
ffmpeg -i input.mpg -vf scale=iw 0.9:ih 0.9 output.mp4
在未知視頻的解析度時,保證調整的解析度與源視頻有相同的橫縱比。
寬度固定400,高度成比例:
ffmpeg -i input.avi -vf scale=400:400/a
ffmpeg -i input.avi -vf scale=400:-1
相反地,高度固定300,寬度成比例:
ffmpeg -i input.avi -vf scale=-1:300
ffmpeg -i input.avi -vf scale=300*a:300
從輸入文件中選取你想要的矩形區域到輸出文件中,常見用來去視頻黑邊。
語法:crop:ow[:oh[:x[:y:[:keep_aspect]]]]
裁剪輸入視頻的左三分之一,中間三分之一,右三分之一:
ffmpeg -i input -vf crop=iw/3:ih :0:0 output
ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output
ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output
裁剪幀的中心
當我們想裁剪區域在幀的中間時,裁剪filter可以跳過輸入x和y值,他們的默認值是
Xdefault = ( input width - output width)/2
Ydefault = ( input height - output height)/2
ffmpeg -i input_file -v crop=w:h output_file
裁剪中間一半區域:
ffmpeg -i input.avi -vf crop=iw/2:ih/2 output.avi
比較裁剪後的視頻和源視頻比較
ffplay -i ji.mp4 -vf split[a][b];[a]drawbox=x=(iw-300)/2:(ih-300)/2:w=300:h=300:c=yellow[A];[A]pad=2 iw[C];[b]crop=300:300:(iw-300)/2:(ih-300)/2[B];[C][B]overlay=w 2.4:40
自動檢測裁剪區域�
cropdetect filter 自動檢測黑邊區域
ffplay ji.mp4 -vf cropdetect
填充視頻(pad)
在視頻幀上增加一快額外額區域,經常用在播放的時候顯示不同的橫縱比
語法:pad=width[:height:[:x[:y:[:color]]]]
創建一個30個像素的粉色寬度來包圍一個SVGA尺寸的圖片:
ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg
同理可以製作input.mp4視頻用30個像素粉色包圍視頻
ffplay -i input.mp4 -vf pad=iw+60:ih+60:30:30:pink
4:3到16:9
一些設備只能播放16:9的橫縱比,4:3的橫縱比必須在水平方向的兩邊填充成16:9,
高度被保持,寬度等於高度乘以16/9,x(輸入文件水平位移)值由表達式(output_width - input_width)/2來計算。
4:3到16:9的通用命令是:
ffmpeg -i input.mp4 -vf pad=ih 16/9:ih :(ow-iw)/2:0:color output.mp4
eg:ffplay -f input.mp4 -vf pad=ih 16/9:ih:(ow-iw)/2:0:pink
16:9到4:3
為了用4:3的橫縱比來顯示16:9的橫縱比,填充輸入文件的垂直兩邊,寬度保持不變,高度是寬度的3/4,y值(輸入文件的垂直偏移量)是由一個表達式(output_height-input_height)/2計算出來的。
16:9到4:3的通用命令:
ffmpeg -i input.mp4-vf pad=iw :iw 3/4:0:(oh-ih)/2:color output.mp4
eg:ffplay -i input.mp4 =size=320x180 -vf pad=iw:iw 3/4:0:(oh-ih)/2:pink
水平翻轉語法: -vf hflip
ffplay -f lavfi -i testsrc -vf hflip
垂直翻轉語法:-vf vflip
ffplay -f lavfi -i testsrc -vf vflip
語法:transpose={0,1,2,3}
0:逆時針旋轉90°然後垂直翻轉
1:順時針旋轉90°
2:逆時針旋轉90°
3:順時針旋轉90°然後水平翻轉
模糊
語法:boxblur=luma_r:luma_p[:chroma_r:chram_p[:alpha_r:alpha_p]]
ffplay -f lavfi -i testsrc -vf boxblur=1:10:4:10
注意:luma_r和alpha_r半徑取值范圍是0~min(w,h)/2, chroma_r半徑的取值范圍是0~min(cw/ch)/2
銳化
語法:-vf unsharp=l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount
所有的參數是可選的,默認值是5:5:1.0:5:5:0.0
l_msize_x:水平亮度矩陣,取值范圍3-13,默認值為5
l_msize_y:垂直亮度矩陣,取值范圍3-13,默認值為5
l_amount:亮度強度,取值范圍-2.0-5.0,負數為模糊效果,默認值1.0
c_msize_x:水平色彩矩陣,取值范圍3-13,默認值5
c_msize_y:垂直色彩矩陣,取值范圍3-13,默認值5
c_amount:色彩強度,取值范圍-2.0-5.0,負數為模糊效果,默認值0.0
eg:
使用默認值,亮度矩陣為5x5和亮度值為1.0
ffmpeg -i input.mp4 -vf unsharp output.mp4
高斯模糊效果(比較強的模糊):
ffplay -i input.mp4 -vf unsharp=13:13:-2
語法:overlay[=x[:y]
所有的參數都是可選,默認值都是0
Logo在左上角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
右上角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
左下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
右下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
刪除logo
語法:-vf delogo=x:y:w:h[:t[:show]]
x:y 離左上角的坐標
w:h logo的寬和高
t: 矩形邊緣的厚度默認值4
show:若設置為1有一個綠色的矩形,默認值0.
ffplay -i ji.mp4 -vf delogo=50:51:60:60:100:0
語法:
drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[…]]]
常用的參數值
x:離左上角的橫坐標
y: 離左上角的縱坐標
fontcolor:字體顏色
fontsize:字體大小
text:文本內容
textfile:文本文件
t:時間戳,單位秒
n:幀數開始位置為0
draw/enable:控制文件顯示,若值為0不顯示,1顯示,可以使用函數
1、在左上角添加Welcome文字
ffplay -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcom
2、在中央添加Good day
ffplay -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Goodday':x=(w-tw)/2:y=(h-th)/2"
3、設置字體顏色和大小
ffplay -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=30"
動態文本
用 t (時間秒)變數實現動態文本
1、頂部水平滾動
ffplay -i ji.mp4 -vf drawtext="fontfile=arial.ttf:text='Dynamic RTL text':x=w-t 50:fontcolor=darkorange:fontsize=30"
2、底部水平滾動
ffplay -i ji.mp4 -vf drawtext="fontfile=arial.ttf:textfile=textfile.txt:x=w-t 50:y=h-th:fontcolor=darkorange:fontsize=30"
3、垂直從下往上滾動
ffplay ji.mp4 -vf drawtext="textfile=textfile:fontfile=arial.ttf:x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30「
在右上角顯示當前時間 localtime
ffplay ji.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime:%H:%M:%S}'「
每隔3秒顯示一次當前時間
ffplay ji.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime:%H:%M:%S}':enable=lt(mod(t,3),1)"
FFmpeg支持絕大多數圖片處理, 除LJPEG(無損JPEG)之外,其他都能被解碼,除了EXR,PIC,PTX之外,所有的都能被編碼。
截取一張圖片使用 –ss(seek from start)參數.
ffmpeg -ss 01:23:45 -i ji.mp4 image.jpg
從視頻中生成GIF圖片
ffmpeg -i ji.mp4 -t 10 -pix_fmt rgb24 ji.gif
轉換視頻為圖片(每幀一張圖)
ffmpeg -i clip.avi frame%4d.jpg
圖片轉換為視頻
ffmpeg -f image2 -i img%4d.jpg -r 25 video.mp4
和視頻一樣,圖片也可以被裁剪和填充
裁剪
ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rg.png
填充
ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg
和視頻一樣圖片同樣能翻轉,旋轉和覆蓋
翻轉
ffmpeg -i orange.jpg -vf hflip orange_hfilp.jpg
ffmpeg -i orange.jpg -vf vflip orange_vfilp.jpg
旋轉
ffmpeg -i -vf transpose=1 image_rotated.png
覆蓋
ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb .png
ffmpeg -f lavfi -i smptebars smpte.png
ffmpeg -i rgb .png -i smpte.png -filter_complex overlay= (W-w)/2:(H-h)/2 rgb_smpte.png
屏幕錄像
顯示設備名稱
ffmpeg -list_devices 1 -f dshow -i mmy
調用攝像頭
ffplay -f dshow -i video="Integrated Camera"
保存為文件
ffmpeg -y -f dshow -s 320x240 -r 25 -i video="Integrated Camera" -b:v 800K -vcodec mpeg4 new.mp4
添加字幕subtitles
語法 –vf subtitles=file
ffmpeg -i ji.mp4 -vf subtitles=rgb.srt output.mp4
視頻顫抖、色彩平衡
視頻顫抖
ffplay –i ji.mp4 -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2) sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2) sin(n/7)
色彩平衡
ffplay -i ji.mp4 -vf curves=vintage
色彩變幻
ffplay -i ji.mp4 -vf hue="H=2 PI t: s=sin(2 PI t)+1「
彩色轉換黑白
ffplay -i ji.mp4 -vf lutyuv="u=128:v=128"
設置音頻視頻播放速度
3倍視頻播放視頻
ffplay -i ji.mp4 -vf setpts=PTS/3
¾速度播放視頻
ffplay -i ji.mp4 -vf setpts=PTS/(3/4)
2倍速度播放音頻
ffplay -i speech.mp3 -af atempo=2
截圖
每隔一秒截一張圖
ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png
每隔20秒截一張圖
ffmpeg -i input.flv -f image2 -vf fps=fps=1/20 out%d.png
注意:ffmpeg version N-57961-gec8e68c版本最多可以每隔20s截一張圖。
多張截圖合並到一個文件里(2x3) 每隔一千幀(秒數=1000/fps25)即40s截一張圖
ffmpeg -i ji.mp4 -frames 3 -vf "select=not(mod(n,1000)),scale=320:240,tile=2x3" out.png
本篇文章主要記錄ffmpeg的一些基礎指令操作,該資料的來源是源於網上的一個ppt文檔,感謝文檔的總結。
㈣ FFMPEG進階系列03-ffmpeg轉碼專題(中)x264參數詳解
更多音視頻知識請點擊 : 專注音視頻開發
x264編碼參數簡介
x264.exe --fullhelp 列印
用於簡化命令行而設計的系統。各預設模板所對應的參數設定,詳見幫助:x264.exe --fullhelp.
21. frame-packing
默認: 20
根據給定的半徑對量化曲線進行高斯模糊(gaussian blur)。分配給各幀的量化值在時間方向上與相鄰幾幀相模糊,以限制量化值波動。
當mb-tree開啟時,cplxblur無效。
參見: --qcomp, --qblur, --no-mbtree
手動忽略標准碼率控制。選擇一個文件,強制指定某些幀的量化值和幀類型。格式為「幀號 幀類型 量化值」。例子:
也叫--subme
默認: 未設定
這些選項在輸出流中設定標志,可以被解碼工具讀取並做相應處理。值得注意的是,大多數選項在大多數情境下都是無意義 的,所以通常都被解碼軟體所忽略。
參見: Gamma Correction
推薦值: 默認,除非你知道源用的是哪種
'auto'會自動根據輸出文件的文件名來挑選。
㈤ ffmpeg # 視頻同步參數 -vsync & -aresample
0, passthrough: 時間戳不做任何改變,demuxer中是什麼,直接傳給muxer。
1, cfr: 為了達到固定的幀率,中間可能會丟棄一些幀。
最好使用字元串,如cfr來指定模式。
可以使用數字是為了兼容。
-vsync auto是默認的視頻同步模式。根據muxer的處理能力選擇0(passthrough)或1(cfr) 。
需要注意的是,在後續的處理過程中,時間戳還可能被修改。
比如啟用了avoid_negative_ts參數時。
利用-map,你可以選擇採用哪路流的時間戳。
可以保持視頻或音頻不變,然後其它流同步到不變的那路流。
ffmpeg.h中的相關宏定義:
ffmpeg_opt.c中
由 .func_arg = opt_vsync 看出處理函數為opt_vsync:
傳入的參數值,被保存在video_sync_method中。
可以查詢video_sync_method的默認值:
這個參數已經廢棄 。請使用sresample audio filter。
aresample 是一個音頻的filter 。
該參數調用libswresample庫,對輸入的音頻按照指定參數進行重采樣。
The filter accepts the syntax
sample_rate表示采樣率。
resampler_options 是key=value 對的list, 用 ":"來分割.
參數參見: https://ffmpeg.org/ffmpeg-resampler.html#Resampler-Options
https://ffmpeg.org/ffmpeg-all.html
㈥ 求ffmpeg的轉換參數
ffmpeg -re -i creaze.flv -vcodec -acodec -f mp4 creaze.mp4
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
具體參數可以參看 ffmpeg --help
㈦ FFmpeg 編譯參數簡單整理
以下參數使用--enable-foo啟用或使用--disable-foo禁用時使用--e/d-代替。
其他的可更改優化方案:AltiVec、3DNow! 、MMX、MMX2、SSE、SSE3、armv5te、armv6、armv6t2、ARM VFP、iwmmxt、MMI、neon、VIS
使用--enable-foo啟用或使用--disable-foo禁用需要的功能插件,使用--e/d-代替。某些部件(如decoder)enable時需要明確指明,例:--enable-decoder=libdavs2。
註:打開與啟用非等同
其他默認開啟但可以關閉的部分:ffmpeg、ffprobe、ffplay、ffserver、avdevice、avcodec、avcore、avformat、swscale、特定部件(如某個編解碼器等)
可選擇禁用的編碼:AAN DCT、DCT、Golomb、FFT、Golomb、LPC、MDCT、RDFT、VAAPI、VDPAU、DXVA2
㈧ ffmpeg.exe的參數
ffmpeg.exe -i F:閃客之家閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:11.flv
ffmpeg -i F: 1.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f: est.flv
使用-ss參數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如:
轉換文件格式的同時抓縮微圖:
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
對已有flv抓圖:
ffmpeg -i test.flv -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss後跟的時間單位為秒
Ffmpeg轉換命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500
-ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp
ffmpeg參數設定解說
-bitexact 使用標准比特率
-vcodec xvid 使用xvid壓縮
-s 320x240 指定解析度
-r 29.97 楨速率(可以改,確認非標准楨率會導致音畫不同步,所以只能設定為15或者29.97)
畫面部分,選其一
-b <比特率> 指定壓縮比特率,似乎ffmpeg是自動VBR的,指定了就大概是平均比特率,比如768,1500這樣的
就是原來默認項目中有的
-qscale <數值> 以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31
-sameq 使用和源同樣的質量
聲音部分
-acodec aac 設定聲音編碼
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質
的DVDrip就可以用2
-ar <采樣率> 設定聲音采樣率,PSP只認24000
-ab <比特率> 設定聲音比特率,前面-ac設為立體聲時要以一半比特率來設置,比如192kbps的就設成96,轉換
君默認比特率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍
這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定比特率,而用VBR參數讓程序自己去
判斷,而音質參數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整
例子:ffmpeg -y -i 1.avi -title Test -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 1.***
解釋:以上命令可以在Dos命令行中輸入,也可以創建到批處理文件中運行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。
參數:
-y(覆蓋輸出文件,即如果1.***文件已經存在的話,不經提示就覆蓋掉了)
-i 1.avi(輸入文件是和ffmpeg在同一目錄下的1.avi文件,可以自己加路徑,改名字)
-title Test(在PSP中顯示的影片的標題)
-vcodec xvid(使用XVID編碼壓縮視頻,不能改的)
-s 368x208(輸出的解析度為368x208,注意片源一定要是16:9的不然會變形)
-r 29.97(幀數,一般就用這個吧)
-b 1500(視頻數據流量,用-b xxxx的指令則使用固定碼率,數字隨便改,1500以上沒效果;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高)
-acodec aac(音頻編碼用AAC)
-ac 2(聲道數1或2)
-ar 24000(聲音的采樣頻率,好像PSP只能支持24000Hz)
-ab 128(音頻數據流量,一般選擇32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(輸出psp專用格式)
-muxvb 768(好像是給PSP機器識別的碼率,一般選擇384、512和768,我改成1500,PSP就說文件損壞了)
1.***(輸出文件名,也可以加路徑改文件名)
機器強勁的話,可以多開幾個批處理文件,讓它們並行處理。
E:ffmpeg.exe -i I:1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:2.flv
㈨ ffmpeg如何使用,請專家支招詳細參數(就這么點分了,全貢獻了)
基本選項: -formats 輸出所有可用格式 -f fmt 指定格式(音頻或視頻格式) -i filename 指定輸入文件名,在linux下當然也能指定:0.0(屏幕錄制)或攝像頭 -y 覆蓋已有文件 -t ration 記錄時長為t -fs limit_size 設置文件大小上限 -ss time_off 從指定的時間(s)開始, [-]hh:mm:ss[.xxx]的格式也支持 -itsoffset time_off 設置時間偏移(s),該選項影響所有後面的輸入文件。該偏移被加到輸入文件的時戳,定義一個正偏移意味著相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持 -title string 標題 -timestamp time 時間戳 -author string 作者 -right string 版權信息 -comment string 評論 -album string album名 -v verbose 與log相關的 -target type 設置目標文件類型("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...) -dframes number 設置要記錄的幀數 視頻選項: -b 指定比特率(bits/s),似乎ffmpeg是自動VBR的,指定了就大概是平均比特率 -vb 指定視頻比特率(bits/s) -vframes number 設置轉換多少楨(frame)的視頻 -r rate 楨速率(fps) -s size 解析度 -aspect aspect 設置視頻長寬比(4:3, 16:9 or 1.3333, 1.7777) -croptop size 設置頂部切除尺寸(in pixels) -cropbottom size 設置底部切除尺寸(in pixels) -cropleft size 設置左切除尺寸 (in pixels) -cropright size 設置右切除尺寸 (in pixels) -padtop size 設置頂部補齊尺寸(in pixels) -padbottom size 底補齊(in pixels) -padleft size 左補齊(in pixels) -padright size 右補齊(in pixels) -padcolor color 補齊帶顏色(000000-FFFFFF) -vn 取消視頻 -vcodec codec 強制使用codec編解碼方式('' to stream) -sameq 使用同樣視頻質量作為源(VBR) -pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計信息,第二遍生成精確的請求的碼率 -passlogfile file 選擇兩遍的紀錄文件名為file -newvideo 在現在的視頻流後面加入新的視頻流 高級視頻選項 -pix_fmt format set pixel format, 'list' as argument shows all the pixel formats supported -intra 僅適用幀內編碼 -qscale q 以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好 -loop_input 設置輸入流的循環數(目前只對圖像有效) -loop_output 設置輸出視頻的循環數,比如輸出gif時設為0表示無限循環 -g int 設置圖像組大小 -cutoff int 設置截止頻率 -qmin int 設定最小質量 -qmax int 設定最大質量 -qdiff int 量化標度間最大偏差 (VBR) -bf int 使用frames B 幀,支持mpeg1,mpeg2,mpeg4 音頻選項: -ab 設置比特率(單位:bit/s,也許老版是kb/s) -aframes number 設置轉換多少楨(frame)的音頻 -aq quality 設置音頻質量 (指定編碼) -ar rate 設置音頻采樣率 (單位:Hz) -ac channels 設置聲道數 -an 取消音頻 -acodec codec 指定音頻編碼('' to stream) -vol volume 設置錄制音量大小(默認為256) -newaudio 在現在的音頻流後面加入新的音頻流 字幕選項: -sn 取消字幕 -scodec codec 設置字幕編碼('' to stream) -newsubtitle 在當前字幕後新增 -slang code 設置字幕所用的ISO 639編碼(3個字母) Audio/Video 抓取選項: -vc channel 設置視頻捕獲通道(只對DV1394) -tvstd standard 設置電視標准 NTSC PAL(SECAM)
㈩ 如何使用ffmpeg.exe。雙擊是一閃而過,怎麼輸入參數啊
1、首先把要分割的視頻放到D:aab目錄下,路徑可以隨意更改。