Android ffmpeg 使用命令視頻轉碼

說明見雷神:https://blog.csdn.net/leixiaohua1020/article/details/47056365

哪個太老了,我用 Android studio 重新編譯了一下;

下載鏈接:https://download.csdn.net/download/q610098308/12471080

ffmpeg 命令整理如下,未測試:

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化爲流的開源計算機程序。採用LGPL或GPL許可證。它提供了錄製、轉換以及流化音視頻的完整解決方案。
它包含了非常先進的音頻/視頻編解碼庫libavcodec,爲了保證高可移植性和編解碼質量,libavcodec裏很多code都是從頭開發的。


命令集
ffmpeg -formats  //查看ffmpeg支持什麼格式
ffmpeg -i num.mp4 example.%d.jpg  //將視頻分解成幀 我們項目裏的幀是.liao格式,識別不了
ffmpeg -i D:\FFdemo\num1.mp4 -r 1 -ss 0:0:10 -t 0:0:5 D:\FFdemo\frame1\aa_%d.jpg //將視頻分解成幀 -ss 開始時間,-t 持續時間 -r 設定幀速率,默認爲25
ffmpeg -i D:\FFdemo\num1.mp4 -ss 0:0:10 -t 0:0:5 D:\FFdemo\kk.mp4 //將視頻截取
ffmpeg -i example.%d.jpg num.mp4   //將幀合成視頻
ffmpeg -i D:\FFdemo\num1.mp4 -ss 8 -t 0.001 D:\FFdemo\asdf.jpg //保存一幀圖片

ffmpeg -i num.mp4 -i bgm.m4a video.mp4   //將視頻跟音頻合成新的視頻
ffmpeg -i example.%d.jpg -s 1920*1080 num.mp4   //將幀合成視頻並設置分辨率 -s 分辨率
ffmpeg -i num.mp4 -vcodec copy -an noaudio.mp4 //分離視頻流,去除聲音  -vcodec 設定視頻編解碼器。 如果用copy表示原始編解碼數據必須被拷貝。 -an: 去掉音頻
ffmpeg -i num.mp4 -acodec copy -vn novideo.m4a    //分離音頻流,去除視頻  -acodec 設定音頻編解碼器,未設定時則使用與輸入流相同的編解碼器 -vn:去掉視頻


//ffmpeg裁剪  vf 參數用於指定視頻濾鏡 crop 表示裁剪 crop=width:height:x:y  x:y偏移量 y = (1920-1080)/2 = 480
ffmpeg -i D:\FFdemo\num1.mp4 -vf crop=1080:1080:0:480 D:\FFdemo\aa.mp4


//ffmpeg縮放視頻 -vf scale=853:480 vf 參數用於指定視頻濾鏡,其中 scale 表示縮放,後面的數字表示縮放至 853×480 px,其中的 853px 是計算而得,
因爲原始視頻的寬高比爲 16:9,所以爲了讓目標視頻的高度爲 480px,則寬度 = 480 x 9 / 16 = 853
當中的寬度和高度實際應用場景中通常只需指定一個,。即參數可以寫爲:scale=-1:480,當然也可以 scale=480:-1
-acodec aac 指定音頻使用 aac 編碼。-vcodec h264 指定視頻使用 h264 編碼。注:目前手機一般視頻拍攝音頻編碼都是 aac,視頻都是 h264。
ffmpeg -i D:\FFdemo\num1.mp4 -vf scale=853:480 -acodec aac -vcodec h264 D:\FFdemo\qq.mp4


//H264視頻轉ts視頻流
ffmpeg -i /storage/emulated/0/11hl/test.h264 -vcodec copy -f mpegts test.ts //-f 設定輸出格式
//H264視頻轉mp4
ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4
//ts視頻轉mp4
ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4
//合成視頻
ffmpeg -i "concat:test1.ts|test2.ts" -vcodec copy -f mp4 out12.mp4
//合成視頻
ffmpeg -y -i resource1.mp4 -t 7 -i resource2.mp4 -t 10 -i bgm.m4a -filter_complex '[0:v][1:v]concat=n=2:v=1:a=0[v]' -map '[v]' -map 2 output.mp4
//合成視頻
這種方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先創建一個文本文件filelist.txt:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'
然後:
ffmpeg -f concat -i filelist.txt -i /storage/emulated/0/11hl/bgm.m4a -c copy output.mp4
如果要添加音頻
-y -f concat -i /storage/emulated/0/11hl/ff.txt -i /storage/emulated/0/11hl/bgm.m4a -c copy /storage/emulated/0/11hl/output.mp4
-y -f concat -i /storage/emulated/0/11hl/ff.txt -i /storage/emulated/0/11hl/bgm.m4a -ss 0:0:10 -t 0:0:10 -c copy /storage/emulated/0/11hl/output.mp4 //截取10s 從第10s開始


//壓縮視頻
ffmpeg.exe -i "C:\test.mp4" -r 10 -b:a 32k "C:\test_mod.mp4"
//把視頻的前30幀轉換成一個Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
//加水印 -filter_complex 參數是表示使用混合濾鏡把圖片疊加到視頻上。 [1:v]表示第二個輸入文件 scale=100:200[s] 表示裁剪,把這個操作設爲[s]
//[0:v] 表示第一個輸入文件,overlay=0:0 表示遮蓋物的位置 [0:v][s] 表示把操作[s]覆蓋到[0,v]上面去  t*20 時間參數,表示向右平移 if(條件,條件爲true時的值,條件爲false時的值)
//gte(x,y) 如果x大於等於y則表達式的值爲true,反之爲false。lte(x,y)則相反
ffmpeg -y -i D:\FFdemo\num1.mp4 -i D:\FFdemo\pic1.jpg -filter_complex [1:v]scale=100:200[s];[0:v][s]overlay=‘if(gte(t,2),t*20,NAN)’:0 D:\FFdemo\df.mp4
//加動畫水印 gif要在整個視頻播放階段循環的話就請使用-ignore_loop參數。這個參數的值爲1則忽略gif文件本身的循環設置,爲0的話則使用文件本身的設置。
ffmpeg -y -i D:\FFdemo\num1.mp4 -ignore_loop 0 -i D:\FFdemo\a.gif -ss 0:0:1 -t 0:0:5 -filter_complex [1:v]scale=100:200[s];[0:v][s]overlay=0:0 D:\FFdemo\df.mp4
//添加字幕流(得進入MP4的文件夾下面,用相對路徑,暫時不知道原因)
ffmpeg -i num1.mp4 -vf ass=cc1.ass myout.mp4
//添加字幕流成功,但是MP4文件顯示不出,不知道怎麼回事
ffmpeg -y -i D:\FFdemo\cc1.ass -i D:\FFdemo\num1.mp4 -c:s mov_text D:\FFdemo\klm1.mp4


ffmpeg -h full //幫助


主要參數:
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
視頻參數:
-b 設定視頻流量,默認爲200Kbit/s
-r 設定幀速率,默認爲25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器


-an: 去掉音頻
-acodec: 音頻選項, 一般後面加copy表示拷貝
-vcodec:視頻選項,一般後面加copy表示拷貝


音頻參數:
-ar 設定採樣率
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻
-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測試
 
原文鏈接:https://blog.csdn.net/yanmantian/article/details/78420359

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章