添加依賴:
implementation 'com.arthenica:mobile-ffmpeg-full:4.4.LTS'
代碼實現:?
fun cropMiddleThird(inputPath: String, outputPath: String) {val cmd = arrayOf("-y", // 覆蓋輸出文件"-i", inputPath,"-filter:v", "crop=iw:ih/3:0:ih/3", // 裁剪中間1/3"-c:a", "copy", // 復制音頻流outputPath)FFmpeg.executeAsync(cmd) { executionId, returnCode ->if (returnCode == RETURN_CODE_SUCCESS) {Log.i(TAG, "Video crop completed successfully")} else {Log.e(TAG, "Video crop failed with return code $returnCode")}}}
這段 FFmpeg 命令中的參數含義如下:
-filter:v
?參數解析
-
完整形式:
-filter:v
?是?-filter_complex
?的簡化形式,專門用于視頻濾鏡 -
含義:表示后面跟隨的是視頻濾鏡(video filter)設置
-
等價寫法:也可以簡寫為?
-vf
(兩者完全等效)
crop=iw:ih/3:0:ih/3
?濾鏡參數解析
這是一個視頻裁剪(crop)濾鏡,各部分的含義為:
-
iw
:-
表示 input width(輸入視頻的原始寬度)
-
這里保持原始寬度不變
-
-
ih/3
:-
ih
?表示 input height(輸入視頻的原始高度) -
ih/3
?表示將高度裁剪為原始高度的 1/3
-
-
0
:-
表示裁剪區域從水平方向(X軸)的 0 位置開始(即最左側)
-
-
ih/3
:-
表示裁剪區域從垂直方向(Y軸)的 1/3 高度處開始
-
這樣組合起來就是從視頻垂直方向的中間 1/3 區域裁剪
-
完整命令含義
ffmpeg -y -i input.mp4 -filter:v "crop=iw:ih/3:0:ih/3" -c:a copy output.mp4
表示:
-
-y
:覆蓋輸出文件不提示 -
-i input.mp4
:指定輸入文件 -
-filter:v "crop=iw:ih/3:0:ih/3"
:-
裁剪視頻,保持原始寬度
-
高度取原始高度的 1/3
-
從垂直方向 1/3 處開始裁剪(最終得到的是視頻中間的 1/3 部分)
-
-
-c:a copy
:音頻流直接復制不重新編碼 -
output.mp4
:輸出文件路徑
其他常見表達式
表達式 | 含義 |
---|---|
iw | 輸入視頻寬度 |
ih | 輸入視頻高度 |
ow | 輸出視頻寬度 |
oh | 輸出視頻高度 |
dar | 顯示寬高比 |
sar | 樣本寬高比 |
n | 當前幀序號 |
t | 當前時間戳(秒) |
實際應用示例
如果想裁剪視頻頂部 1/3(而不是中間):
crop=iw:ih/3:0:0
如果想裁剪視頻右側 1/3:
crop=iw/3:ih:iw*2/3:0