2013-09-28 130 views
1

我正嘗試使用在Android這個ffmpeg的命令行:FFmpeg的命令行

ffmpeg -i /sdcard/DCIM/video.mp4 -s 480x320 /sdcard/output.mp4 

我的ffmpeg的可執行文件(這條路徑上:/數據/本地的/ tmp /的ffmpeg /使用chmod 751),和我讀,我正嘗試使用調用它:

Runtime.getRuntime().exec("/data/local/tmp/ffmpeg -i /sdcard/DCIM/video.mp4 -s 480x320 /sdcard/output.mp4"); 

但我可不是得到任何結果這個電話之後,所以我嘗試相同的命令,但使用Android的終端和我確信ffmpeg的作品,因爲我得到了許多輸出,如視頻數據。但doesn't做我想做的動作,I'm得到這個消息:

Unable to find a suitable output format for '/sdcard/output.mp4' 

我不有什麼它可以是問題的任何想法... 感謝您的幫助!

+0

目前尚不清楚:那你當你運行'從亞行外殼或終端仿真程序或文件/數據/本地的/ tmp/ffmpeg'完成任務還不在嗎?什麼是寫入控制檯? –

+0

我很抱歉...當我使用adb shell,終端模擬器或直接從我的應用程序調用該命令時,我沒有得到文件轉換(我的ffmpeg命令應該轉換視頻並將其導出)。我知道ffmpeg二進制文件/可執行文件的工作原理是因爲一些視頻數據被寫入到控制檯,但我沒有得到輸出視頻文件,因爲我說的錯誤(無法找到合適的輸出格式) –

+0

您究竟得到了什麼安慰?也許,你的ffmpeg沒有配置爲mp4輸出? –

回答

1

它可能不應該工作,因爲ffmpeg將引用/ usr/lib在哪裏將查找已安裝的庫。但是這是android這種方法將無法正常工作。

也許你應該將ffmpeg編譯成像libffmpeg.so這樣的單個庫並編寫c-wrapper,它將從你的應用程序位置加載它,比如/data/data/com.myapp/lib/libffmpeg.so並將params傳遞給這個庫。

所以:你將通過jni加載你的包裝並傳遞ffmpeg參數,然後wrapper將加載實際的ffmpeg並將params傳遞給它。

我曾經在一個項目中嘗試了這一點,它的工作原理

+0

感謝您的回答!我一直在嘗試這種方式,因爲我認爲這很容易。我知道你在引用的方式,但我不認爲我能夠編寫C文件來調用我想要的命令。我該如何解決我的問題,使用可執行文件?因爲我不知道如何使用JNI和C文件來調用我想要的命令(您說的方式)......我不介意使用哪種方式,但我不知道如何調用我的命令用你的方式... –

+0

ffmpeg「將引用/ usr/lib在哪裏查找已安裝的庫」 - 只有在構建爲* shared *的情況下。但情況並非如此:可執行文件的啓動將失敗。 –

+0

嗨,@AlexCohn,我確定我已經安裝了libs,因爲我正在嘗試一個命令,並且我得到了一段視頻文件的音頻。但我不知道爲什麼我的命令失敗時,我想轉換一個視頻文件...任何想法?它可能是與輸出編解碼器有關的東西嗎? –