日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

gif android. 耗资源,Android MP4转GIF

發(fā)布時(shí)間:2025/4/5 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gif android. 耗资源,Android MP4转GIF 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[Java] 純文本查看 復(fù)制代碼/**

* [url=home.php?mod=space&uid=952169]@Param[/url] gifPath gif圖片的存儲(chǔ)路徑

* @param begin 開始時(shí)間

* @param end 結(jié)束時(shí)間

* @param fps

* @param speed

* @param gifWidth gif的導(dǎo)出寬度

* @param gifHeight gif的導(dǎo)出長(zhǎng)度

* @param videoState 視頻是橫屏還是豎屏的

* @param needRoate 是否需要旋轉(zhuǎn)

* @param rotateAngle 旋轉(zhuǎn)角度

*/

public void encoder(final String gifPath, final long begin, final long end, final int fps,

final int speed, final int gifWidth, final int gifHeight, final int videoState, final boolean needRoate, final int rotateAngle) {

if (begin > duration) {

// throw new RuntimeException("開始時(shí)間不能大于視頻時(shí)長(zhǎng)");

callBack.erroCallBack("開始時(shí)間不能大于視頻時(shí)長(zhǎng)");

return;

}

if (end <= begin) {

// throw new RuntimeException("開始時(shí)間大于結(jié)束時(shí)間");

callBack.erroCallBack("開始時(shí)間大于結(jié)束時(shí)間");

return;

}

Thread thread = new Thread() {

@Override

public void run() {

super.run();

long endTime = duration;

if (end < duration) {

endTime = end;

}

long time1 = System.currentTimeMillis();

videoExtractor.seekTo(begin * 1000, trackIndex); // 精確定位到指定幀(定位到指定開始時(shí)間幀)

FastYUVtoRGB fastYUVtoRGB = new FastYUVtoRGB(context);

String mime = format.getString(MediaFormat.KEY_MIME);

MediaCodec videoDecoder = null;

try {

videoDecoder = MediaCodec.createDecoderByType(mime);

} catch (IOException e) {

e.printStackTrace();

}

format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible);

int width = format.getInteger(MediaFormat.KEY_WIDTH);

int height = format.getInteger(MediaFormat.KEY_HEIGHT);

videoDecoder.configure(format, null, null, 0);

videoDecoder.start();

GIFEncoder encoder = null;

MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();

int f = fps;

if (f <= 0) {

f = 15;

}

int s = speed;

if (s <= 0) {

s = f;

}

long frameTime = 1000 / f;

long startTime = begin;

while (true) {

int run = extractorVideoInputBuffer(videoExtractor, videoDecoder);

if (run == 1) {

int outIndex = videoDecoder.dequeueOutputBuffer(info, 500000);

if (outIndex >= 0) {

long time = info.presentationTimeUs / 1000;

if (time >= begin && time <= endTime) {

if (time >= startTime) {

Image image = videoDecoder.getOutputImage(outIndex); // 輸出

Bitmap bitmap = fastYUVtoRGB.convertYUVtoRGB(getDataFromImage(image), width, height);

int videoImageState = MImageUtil.getPicDirection(image.getHeight(), image.getWidth());

if (needRoate) { // 是否需要旋轉(zhuǎn),解決自動(dòng)旋轉(zhuǎn)錯(cuò)誤的問題

bitmap = PhotoBitmapUtils.rotateBitmap(bitmap, rotateAngle);

} else {

// LogUtil.i("視頻導(dǎo)出圖片:" + videoImageState);

// LogUtil.i("原視頻圖片:" + videoState);

if (videoImageState != videoState) { // 橫豎屏不一致,默認(rèn)自動(dòng)旋轉(zhuǎn)90°

bitmap = PhotoBitmapUtils.rotateBitmap(bitmap, 90);

}

}

if (gifWidth != -1 && gifHeight != -1) { // 創(chuàng)建新的位圖

bitmap = Bitmap.createScaledBitmap(bitmap, gifWidth, gifHeight, true);

} else {

bitmap = Bitmap.createScaledBitmap(bitmap, width / 4, height / 4, true);

}

if (encoder == null) {

encoder = new GIFEncoder();

encoder.setFrameRate(s);

encoder.init(bitmap);

encoder.start(gifPath);

} else {

encoder.addFrame(bitmap);

}

int p = (int) ((startTime - begin) * 100 / (endTime - begin));

LogUtil.d("p = " + p);//進(jìn)度

if (callBack != null) {

callBack.currentProgress(p);

}

startTime += frameTime;

}

}

videoDecoder.releaseOutputBuffer(outIndex, true /* Surface init */);

if (time >= endTime) {

break;

}

}

} else if (run == -1) {

break;

}

}

if (encoder != null) {

encoder.finish();

}

LogUtil.d("encoder->time = " + (System.currentTimeMillis() - time1));

LogUtil.d("over");

LogUtil.d("gif_path:" + gifPath);

if (callBack != null) {

callBack.onSuccess(System.currentTimeMillis() - time1, gifPath);

}

videoDecoder.stop();

videoDecoder.release();

MFileUtil.clearAllCache(context); // 清除緩存

}

};

thread.start();

}

總結(jié)

以上是生活随笔為你收集整理的gif android. 耗资源,Android MP4转GIF的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 艳妇乳肉豪妇荡乳 | 老熟女高潮一区二区三区 | 国产黄色免费 | 欧美日韩成人免费 | 日本黄区免费视频观看 | 2021毛片 | 国产又黄又粗又猛又爽的视频 | 国产精品麻豆欧美日韩ww | 久久桃色 | 污视频免费在线观看 | 国产精品嫩草69影院 | 欧美日韩久久精品 | 97精品久久人人爽人人爽 | 四虎黄网| 久久五月天综合 | 日本一区二区三区免费看 | 清清草在线视频 | 日韩一区二区三区精 | 久久精品伦理 | 天天色天天操天天 | 婷婷五月综合缴情在线视频 | 日韩性av | 日韩在线观看免费网站 | 国产一区黄色 | 成人免费毛片糖心 | 噼里啪啦动漫高清在线观看 | 在线观看日本中文字幕 | 日韩精品一区二区亚洲av | 久久艹免费视频 | 青青草好吊色 | 后进极品美女圆润翘臀 | 久久久久久亚洲中文字幕无码 | 国产精品成人3p一区二区三区 | 日本国产在线视频 | 热久久影院 | 国产一级在线免费观看 | 舐め犯し波多野结衣在线观看 | 欧美三级黄色 | 日韩国产欧美在线观看 | 亚洲五月六月 | 97自拍网 | 中国在线观看免费视频 | 精品一区二区三区久久 | 91蜜桃在线 | 亚洲理论片 | 中国丰满老妇xxxxx交性 | 日韩一中文字幕 | 草草视频在线播放 | 毛片视频观看 | 少妇精品在线 | 久久精品国产77777蜜臀 | 国产乱子伦农村叉叉叉 | 神马久久香蕉 | 日韩在线免费看 | 521av在线| 不用播放器看av | 成年人小视频 | 一炮成瘾1v1高h | 国产精品一区二区亚洲 | аⅴ天堂中文在线网 | 美女扒开腿让人桶爽原神 | 亚洲一区二区电影网 | 国产精品久久久久久久午夜 | 成年人拍拍视频 | 久久男人的天堂 | 免费观看成年人网站 | 日韩一级色| 一二三四区在线 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 亚洲一区二区三区免费视频 | 在线观看成年人视频 | 免费看欧美黄色片 | 亚洲天堂久 | 午夜私人福利 | ass日本寡妇pics | 欧美色偷偷 | 人成亚洲 | 久久久久久久久一区 | 天天射日日干 | 日韩女优在线观看 | 亚洲国产一二三区 | 美国三级视频 | 三点尽露的大尺度国产 | 草草地址线路①屁屁影院成人 | 国产成人一区二区三区电影 | 清纯粉嫩极品夜夜嗨av | 春意影院福利社 | 久久99这里只有精品 | www欧美| 九九免费在线视频 | 日韩成人免费观看 | 88福利视频 | 日本美女黄网站 | 少妇特黄a一区二区三区 | 久久精品欧美一区二区三区不卡 | 超碰碰碰碰 | 人体毛片| 国产特级黄色录像 | 日韩一区二区三区不卡视频 |