



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發技術】如何在Android中壓縮視頻
如何在Android中壓縮視頻?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面在下將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。使用方法基本原理:將android環境下可執行文件ffmpeg存放在本地,代碼執行ffmpeg的壓縮命令。//將開源庫中asset目錄的ffmpeg可執行文件,拷貝到
app的data/data/files目錄
FFmpeg.getInstance(this).loadBinary(null);執行ffmpeg的一個命令:比如查看ffmpeg的當前版本:./ffmpeg-version接著就可以在代碼中,使用ffmpeg的各種命令了:把命令寫入String[],然后調用fFmpeg.execute即可獲取視頻文件的信息String[]
command
=
new
String[]{"-i",
arg.filePath};
try
{
fFmpeg.execute(commands,
new
ExecuteBinaryResponseHandler(){
@Override
public
void
onStart()
{}
@Override
public
void
onProgress(String
message)
{
Log.e("dml",
"onProgress:
message
is
"
+
message);
}
@Override
public
void
onFailure(String
message)
{
Log.e("dml",
"onFailure:
message
is
"
+
message);
}
@Override
public
void
onSuccess(String
message)
{
Log.e("dml",
"onSuccess:
message
is
"
+
message);
}
@Override
public
void
onFinish()
{
Log.e("dml",
"onFinish:
");
}
});
}
catch
(FFmpegCommandAlreadyRunningException
e)
{
e.printStackTrace();
}壓縮視頻:String[]
commands
=
new
String[]{"-threads","1","-i",
arg.filePath,
"-c:v",
"libx264","-crf","30","-preset",
"superfast"
,"-y",
"-acodec","libmp3lame",arg.thumbVideoPath};
fFmpeg.execute(commands,
new
ExecuteBinaryResponseHandler(){});參數解釋:-threads:執行線程數,傳入1單線程壓縮-i:input路徑,傳入視頻文件的路徑-c:v:編碼格式,一般都是指定libx264-crf:編碼質量,取值范圍是0-51,默認值為23,數字越小輸出視頻的質量越高。這里的30是我們經過測試得到的經驗值-preset:轉碼速度,ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。ultrafast編碼速度最快,但壓縮率低,生成的文件更大,placebo則正好相反。x264所取的默認值為medium。需要說明的是,preset主要是影響編碼的速度,并不會很大的影響編碼出來的結果的質量。-acodec:音頻編碼,一般采用libmp3lamearg.thumbVideoPath:最后傳入的是視頻壓縮后保存的路徑-y:輸出時覆蓋輸出目錄已存在的同名文件(如果不加此參數,就不會覆蓋)問題解決此開源庫用于視頻壓縮在實際開發中存在不少問題,下面一一解決1.壓縮進度反饋執行轉碼命令后,onProgress只是不停輸出字符串,而且文本很長需要正則表達式從中截取轉碼進度反饋:@Override
public
void
onProgress(String
s)
{
Pattern
timePattern
=
Ppile("(?<=time=)[\\d:.]*");
Scanner
sc
=
new
Scanner(s);
String
match
=
sc.findWithinHorizon(timePattern,
0);
if
(match
!=
null)
{
String[]
matchSplit
=
match.split(":");
if
(duration!=
0)
{
float
progress
=
(Integer.parseInt(matchSplit[0])
*
3600
+
Integer.parseInt(matchSplit[1])
*
60
+
Float.parseFloat(matchSplit[2]))
/
duration;
int
showProgress
=
(int)
(progress
*
100);
if(showProgress>100){
showProgress
=
100;
}
pressProgress(getTag(),showProgress);
}
}
}2.低碼率視頻壓縮會變大實際中發現有些原質量較差的視頻壓縮后,體積反而變大。處理方法:壓縮前先執行對視頻提取信息的命令,小于1024kb/s的視頻不壓縮:@Override
public
void
onProgress(String
s)
{
//Log.d("dml","pre
onProgress
=
"
+
s);
if(s.contains("Stream
#0:0")){
String
tem
=
s.substring(0,
s.indexOf("kb/s"));
String
type
;
int
pos
=
tem.lastIndexOf(",");
if
(pos
!=
-1)
{
type
=
tem.substring(pos
+
1,tem.length()).trim();
try
{
Integer
integer
=
Integer.parseInt(type);
if(integer
>
1024){
pressV(fFmpeg);//執行壓縮
}else
{
//放棄壓縮,直接使用原文件
}
}catch
(Exception
e){
}
}
}
}并且在壓縮成功后,檢查壓縮后的文件和原文件大小,如果變大了,直接使用原文件。3.多線程壓縮多個視頻開源庫中執行ffmpeg的命令是在AsycTask執行的:ffmpegExecuteAsyncTask
=
new
FFmpegExecuteAsyncTask(command
,
timeout,
ffmpegExecuteResponseHandler);
f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國離子刻蝕機市場分析及競爭策略研究報告
- 2025至2030年中國電子鎮流器多點溫度巡檢儀市場分析及競爭策略研究報告
- 2025至2030年中國油壓熱壓整形機市場分析及競爭策略研究報告
- 2025至2030年中國枸杞提取物市場分析及競爭策略研究報告
- 2025至2030年中國射流式深井自動泵市場分析及競爭策略研究報告
- 2025至2030年中國衛生消毒用品市場分析及競爭策略研究報告
- 2025至2030年中國乳品加工罐市場分析及競爭策略研究報告
- 機電專業培訓
- 幼兒園消毒液培訓
- 角膜白斑護理查房
- 新生兒吸入性肺炎的觀察與護理
- 深度學習數據增強
- 醫院布草洗滌服務方案(技術方案)
- 操盤手內部培訓資料
- 七年級上冊地理總復習(星球地圖版)
- 嬰幼兒輔食添加課件
- 參加科級干部培訓班心得體會
- 2023年鍍層和化學覆蓋層技術要求規范(鋁合金化學導電氧化)
- 南寧市信息化大樓工程建設項目可行性研究報告
- 單片機課程設計之超聲波測距-電子工程系單片機課程設計報告
- 管 制 刀 具課件
評論
0/150
提交評論