2016-04-23 159 views
2

我在當前需要視頻處理的項目中遇到麻煩。基本上裁剪功能(視頻應平方),裁剪(視頻不應超過30秒)和質量降低(比特率應等於713K)。
我已成功將FFmpeg嵌入到應用程序中,除了一個主要細節外,所有功能都工作得很好 - 根據我的老闆處理需要的時間太長。對於擁有52 MB大約36秒的視頻,執行所有操作需要50秒(我明顯在將視頻剪輯爲30秒前)。問題是在iOS視頻處理上的並行項目需要10-15秒才能獲得更大的文件。我認爲這與他們正在使用Apple QuickTime格式有關,事實上這是蘋果公司開發的,所以它的工作速度並不奇怪。
好吧,這是介紹,現在我的問題是:有沒有什麼辦法讓Android在10-15秒的時間內處理任何質量的視頻(現在我們可以假設所有視頻都是h264)在30秒內,正如我的老闆所說)?一些替代FFmpeg,可以更快地執行操作?我很確定在這麼短的時間內不可能完成這樣的工作,因爲我已經覺得我在互聯網上搜索思想,但我想確保沒有可能做這樣的工作。如果任何人都可以給我提供比FFmpeg更快的解決方案鏈接,或者確認沒有這樣的解決方案,我會非常樂意。Android,快速視頻處理

更新
感謝Alex Cohn我用MediaCodec解決了這個問題。過了一段時間,我在52MB視頻上進行了20秒處理,裁剪成平方並降低了比特率。對於離開這裏任何未來的Google我可以建議看看這個程序存儲庫: Many stuff about MediaCodec
多恰恰在這個文件:Extract, edit and encode again, video and audio

回答

3

如果視頻已被記錄在同一臺設備上,你有一個非常好的機會MediaCodec和原生Android media APIs將會更快(在硬件中運行解碼器和編碼器)。否則,您可以使用嘗試來使用MediaCodec對視頻進行解碼,如果失敗,可以回退到FFmpeg軟件解碼器。即便如此,如果您可以使用MediaCodec進行壓縮,僅憑這一點就可以提供令您的老闆滿意的性能。

存在一個名爲libstagefright的項目(不建議使用),該項目構建FFmpeg,並支持硬件編解碼器,並且它被設計用於API 10+。

不要忘記比較你的Android設備和iOS平臺的CPU特性(如果這是6S,它們有重要的前景)。考慮多線程編碼和解碼。

BTW:注意FFmpeg的不來與H264編碼器,和FFmpeg的+ X264的典型束是GPL,並要求所有的應用程序是開源(或支付高額許可費X264,但仍被迫遵守FFmpeg的LGPL)。

請注意,您只需操作MP4標頭就可以製作方形視頻,無需轉碼!

+0

嗯,我已經嘗試在FFmpeg上使用HW,但它失敗了。顯然,我也閱讀了MediaCodec的文檔,但沒有得到如何很好地整合這一點。從我們的項目的最小API版本是15,MediaCodec需要16,但是我認爲如果有必要,我可以說服團隊將最小的API升級到16。無論如何,我會仔細看看MediaCodec,希望能找到一些解決方案:)關於h264,是的,我們使用libx264,並且告訴我的老闆關於許可問題。他說,不要爲此煩惱,並將其留給他,正如我剛剛所做的那樣 –

+0

FFmpeg的HW支持意味着SIMD加速,即適度的漸進式改進。 MediaCodec使用硬件編碼器,它基本上受內存總線的限制。 –

+0

API 15是一個奇怪的限制,今天有2.2%的設備,並且從未成爲流行的平臺。要麼堅持薑餅,要麼轉移到果凍豆或更高。 –