Android錄屏+視頻轉(zhuǎn)Gif實現(xiàn)

jerry-wang-1154193-unsplash.jpg

錄屏轉(zhuǎn)動圖

最近看見一個視頻轉(zhuǎn)GIF的開源項目:ffmpeg-commands-executor-library挽荠,有時會有手機錄屏轉(zhuǎn)成GIF動圖的需求,都是下載一個錄屏軟件錄屏圈匆,再下一個轉(zhuǎn)換軟件,一般是電腦上的軟件或者在線轉(zhuǎn)換捏雌,效果也不怎么好跃赚,就想借這個東西來做一個錄屏轉(zhuǎn)GIF合一的APP

Android錄屏

Android 5.0+ 可以利用MediaProject 在非 root 情況下實現(xiàn)屏幕錄制,具體過程就是開啟錄屏服務(wù)纬傲,設(shè)置SurfaceView去接收內(nèi)容,獲取視頻流叹括,然后通過MediaCodec來實現(xiàn)視頻的硬編碼算墨,然后保存為視頻文件

Android 5.0+ 屏幕錄制:介紹了如何進行屏幕錄制還有具體的demo
Android截屏、錄屏工具:可以快速依賴汁雷,集成錄屏功能

FFmpeg的使用

1.FFmpeg視頻轉(zhuǎn)GIF命令净嘀,我感覺應(yīng)該這應(yīng)該是是最全的命令了,時間單位為s挖藏,會根據(jù)寬度值自適應(yīng)高度

String command = "ffmpeg -i " + pathFrom + " -ss " + 跳過開頭時間 + " -t " + 轉(zhuǎn)換的時間 + " -vf scale=" + gif寬度 + ":-1 -r " + gif幀率 + " " + pathTo;
//ffmpeg-commands-executor-library中的方法

2.使用ffmpeg-commands-executor-library中的方法來執(zhí)行命令

FFmpegNativeHelper.runCommand(command);

這樣的確可以轉(zhuǎn)化成功厢漩,但是有一個bug,就是每次打開APP只能轉(zhuǎn)換一次溜嗜,第二次會失敗,看得出來作者已經(jīng)沒有維護了炸宵,這樣其實也沒什么問題,每次轉(zhuǎn)換重新打開APP就好了焙压,非常簡單抑钟,而且還有其他ffmpeg的功能也可以用。

編譯FFmpeg庫

ffmpeg這么強大的一個開源庫在塔,現(xiàn)在程序有這么大一個bug存在,那肯定是不能忍受的绰沥,可以自己去下載ffmpeg源碼然后編譯出在Android上面可以運行的庫。涉及到JNI和NDk徽曲,但其實一點都不難麸塞,我之前也沒有接觸過秃臣,不過看了幾篇教程踩了不少坑也成功了。

在Android中集成FFmpeg:我編譯的庫弧哎,可以快速依賴稚虎,集成FFmpeg,也有源碼

網(wǎng)上文章很多蠢终,但是真的有各種問題序攘,我試了不少,下面兩篇文章完全照著做其實也是不行的蜕径,但是改改還是可以搞定。

在Mac下編譯 FFmpeg 兜喻,并在Android中使用:
在Android 中使用FFmpeg命令

注意問題

  • 下載版本相同的源碼(3.3)
  • 文章里面教的復(fù)制的ffmpeg的源碼有點小問題,找不到的就先不要管帕识;
  • 在Android里面報錯找不到c++的類遂铡,我們要根據(jù)找不到的類的名字去FFmpeg里面去找肮疗,然后添加進去扒接;
  • 然后c++中有些明明同一個包下的類找不到,因為在同一個文件夾下面的類其實不用導(dǎo)入碱呼,原c++文件導(dǎo)入時候添加了當(dāng)前包名導(dǎo)致路徑出錯,可以直接刪除導(dǎo)入的代碼(就是import*什么的刪除掉就好了)
  • 其實到了文章最后愚臀,也講了之前那個二次調(diào)用失敗的問題矾利,并且給出了解決方案:
FFmpeg每次執(zhí)行完命令后會調(diào)用 ffmpeg_cleanup 函數(shù)清理內(nèi)存,并且會調(diào)用exit(0)結(jié)束當(dāng)前進程男旗,但是經(jīng)過我們的修改,exit()的代碼已經(jīng)被刪掉捧毛,而我們的App還在運行,不能殺死進程呀忧,所以有些變量的值還在內(nèi)存中,這樣就會導(dǎo)致下次執(zhí)行的時候可能會出錯而账。
打開ffmpeg.c找到剛修改的run函數(shù),然后在 return 前加上如下代碼即可:
nb_filtergraphs = 0;
     progress_avio = NULL;

     input_streams = NULL;
     nb_input_streams = 0;
     input_files = NULL;
     nb_input_files = 0;

     output_streams = NULL;
     nb_output_streams = 0;
     output_files = NULL;
     nb_output_files = 0;

完美方案

但是這個方法只解決了函數(shù)清理的問題笔横,這樣去運行命名咐吼,還是有問題程序完成后直接退出了,原因很簡單锯茄,其實就是c++完成后調(diào)用了下面這個函數(shù),是結(jié)束當(dāng)前進程肌幽,這個東西還是沒有改好

int exit_program(int ret)
{
    if (program_exit)
        program_exit(ret);
    return ret;
}

只需要改成這樣就好了:

int exit_program(int ret)
{
    return ret;
}

參考了這篇文章后面的坑點修改:
http://www.reibang.com/p/ceaa286d8aff

Android錄屏參考鏈接:
https://github.com/GLGJing/ScreenRecorder

ffmpeg命令參考鏈接:
使用 ffmpeg 實現(xiàn) MP4 與 GIF 的互轉(zhuǎn)
FFmpeg續(xù)篇:截取視頻片段轉(zhuǎn)成GIF動畫

在Android中集成FFmpeg
項目源碼:https://github.com/tyhjh/FFmpeg
最后我的APP連接:http://lc-fgtnb2h8.cn-n1.lcfile.com/eb77c867e490eba1d9ba.apk

支持錄屏后轉(zhuǎn)gif喂急,支持?jǐn)z像后轉(zhuǎn)gif,支持本地視頻轉(zhuǎn)gif以及各種參數(shù)設(shè)置(側(cè)邊欄菜單中設(shè)置)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末廊移,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冶伞,更是在濱河造成了極大的恐慌步氏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荚醒,死亡現(xiàn)場離奇詭異隆嗅,居然都是意外死亡,警方通過查閱死者的電腦和手機胖喳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较剃,“玉大人,你說我怎么就攤上這事写穴。” “怎么了偿短?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵馋没,是天一觀的道長。 經(jīng)常有香客問我篷朵,道長,這世上最難降的妖魔是什么款票? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任艾少,我火速辦了婚禮卡乾,結(jié)果婚禮上缚够,老公的妹妹穿的比我還像新娘。我一直安慰自己谍椅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布锁施。 她就那樣靜靜地躺著杖们,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摘完。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天列粪,我揣著相機與錄音,去河邊找鬼岂座。 笑死,一個胖子當(dāng)著我的面吹牛掺逼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赘那,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼氯质,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闻察?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤呢灶,失蹤者是張志新(化名)和其女友劉穎钉嘹,沒想到半個月后鸯乃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跋涣,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年奖年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沛贪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡利赋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝙眶,我是刑警寧澤褪那,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布式塌,位于F島的核電站,受9級特大地震影響峰尝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜武学,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硼补。 院中可真熱鬧熏矿,春花似錦已骇、人聲如沸票编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宛裕,卻和暖如春论泛,著一層夾襖步出監(jiān)牢的瞬間揩尸,已是汗流浹背屁奏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坟瓢,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓粒褒,卻偏偏與公主長得像诚镰,于是被迫代替她去往敵國和親奕坟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容