最近发现抖音特效里有视频倒播,看起来比较酷。于是自己用FFmpeg在Android平台做了一遍,现在方案是先用FFmpeg把视频反序,再进行视频倒放。最终效果长这样:

主要用到的是FFmpeg的filter_complex来实现,拼接命令行:

    /*** 视频反序倒播* @param inputFile 输入文件* @param targetFile 反序文件** @return 视频反序的命令行*/public static  String[] reverseVideo(String inputFile, String targetFile){String reverseVideo = "ffmpeg -i %s -filter_complex [0:v]reverse[v] -map [v] %s";reverseVideo = String.format(reverseVideo, inputFile, targetFile);return reverseVideo.split(" ");}

执行FFmpeg命令行:

    /*** 执行ffmpeg命令行* @param commandLine commandLine*/private void executeFFmpegCmd(final String[] commandLine){if(commandLine == null){return;}FFmpegCmd.execute(commandLine, new FFmpegCmd.OnHandleListener() {@Overridepublic void onBegin() {Log.i(TAG, "handle video onBegin...");}@Overridepublic void onEnd(int result) {Log.i(TAG, "handle video onEnd...");mHandler.sendEmptyMessage(MSG_PLAY);}});}

开启子线程在JNI层执行FFmpeg命令行:

    //开子线程调用native方法进行音视频处理public static void execute(final String[] commands, final OnHandleListener onHandleListener){new Thread(new Runnable() {@Overridepublic void run() {if(onHandleListener != null){onHandleListener.onBegin();}//调用ffmpeg进行处理int result = handle(commands);if(onHandleListener != null){onHandleListener.onEnd(result);}}}).start();}private native static int handle(String[] commands);

最终是在JNI层调用ffmpeg.c源码执行FFmpeg命令行:

JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_FFmpegCmd_handle
(JNIEnv *env, jclass obj, jobjectArray commands){int argc = (*env)->GetArrayLength(env, commands);char **argv = (char**)malloc(argc * sizeof(char*));int i;int result;for (i = 0; i < argc; i++) {jstring jstr = (jstring) (*env)->GetObjectArrayElement(env, commands, i);char* temp = (char*) (*env)->GetStringUTFChars(env, jstr, 0);argv[i] = malloc(1024);strcpy(argv[i], temp);(*env)->ReleaseStringUTFChars(env, jstr, temp);}//执行ffmpeg命令result =  run(argc, argv);//释放内存for (i = 0; i < argc; i++) {free(argv[i]);}free(argv);return result;
}

等待视频反序处理完毕,使用VideoView开始播放。不够完美的是需要等待,如果能做到在线倒播那就好了。视频的在线倒播就是从最后一帧反序播放,需要解决的问题是I帧、P帧解码时间,甚至还有B帧。后续有待研究......

相关源码Git地址:https://github.com/xufuji456/FFmpegAndroid

采用FFmpeg实现视频倒播相关推荐

  1. 采用FFmpeg从视频中提取音频(声音)保存为mp3文件

    采用FFmpeg从视频中提取音频(声音)保存为mp3文件 作者:雨水,日期:2016年1月9日 CSDN博客:http://blog.csdn.net/gobitan 摘要:看到好的视频文件,如果想把 ...

  2. 使用ffmpeg实现视频倒放

    使用ffmpeg实现视频倒放 一个简单的demo: 使用ffmpeg实现流畅的视频倒放.跳转.对ffmpeg新手友好 做课设的时候发现, 这方面的代码比较少,所以分享一下. 如果帮到了你,可以star ...

  3. android端采用FFmpeg进行视频剪切、转码与添加水印

    前两篇文章介绍过FFmpeg进行音频处理.音视频处理:android端采用FFmpeg进行音频混合与拼接剪切, android端采用FFmpeg进行音视频合成与分离.关于FFmpeg涉及文件导入以及c ...

  4. FFmpeg实现视频倒放: reverse/areverse滤镜

    文章目录 前言 使用滤镜 reverse/areverse实现音视频倒放 前言 看完诺兰新片<信条>预告片,感觉十分新奇,因为里面穿插了大量的倒放的音频或者视频.很自然地,我就很想把这些片 ...

  5. 基于FFMPEG实现视频倒放功能(实时倒放)

    一.环境介绍 操作系统: win10 64位 QT版本:  QT5.12.6 编译器:  MinGW 32 FFMPEG版本: 4.2.2 win32下使用FFMPEG 4.2.2库下载地址:Wind ...

  6. ffmpeg音视频文件音视频流抽取,初步尝试人声分离

    文章目录 ffmpeg抽取音视频文件中的音频流 音频流类型 AAC与m4a的区别 AAC与mp3的区别 用ffmpeg查看视频的信息 用ffmpeg抽取AAC音频流 从AAC文件中获取音轨 音轨是什么 ...

  7. android端采用FFmpeg进行音视频合成与分离

    上一篇文章谈到音频剪切.混音.拼接与转码,也详细介绍cMake配置与涉及FFmpeg文件的导入: android端采用FFmpeg进行音频混合与拼接剪切 .现在接着探讨音视频的合成与分离. 1.音频提 ...

  8. 采用ffmpeg转换flv视频到mp4格式时报错的解决方案

    1. ffmpeg支持如下格式转换视频 $ffmpeg -i 源文件  目标文件 如: $ffmpeg -i hello.flv hello.mpeg $ffmpeg -i hello.flv hel ...

  9. 使用Swiper插件实现视频轮播,怎么实现切换自动播放视频?

    一.需求分析 这两天讨论了一个项目需求,刚开始是希望:轮播图中嵌入视频,轮播到视频自动播放,播放完毕切换下一张轮播,手动切换时暂停播放视频.后面因为自动播放没有声音,便暂时放弃了这个想法(有知道或了解 ...

最新文章

  1. tomcat在服务器上改了8080的端口之后所带来的问题
  2. 并发编程-02并发基础CPU多级缓存和Java内存模型JMM
  3. linux 系统安装 升级glibc库2.14
  4. html css3模拟心的跳动
  5. 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
  6. 撸一款Flutter版『微信』
  7. NodeJs妹子图爬虫
  8. 元胞自动机生命游戏C语言并行实现
  9. [教程] 中断闪存或备份后如何修复 MTK 或 SPD 变砖
  10. java简历编写及面试技巧
  11. 气象报告是什么计算机领域,计算机辅助翻译系统在亚运气象服务方面地应用报告.pdf...
  12. Java实时获取基金收益项目源码分享
  13. 司马相如——草根逆袭凭借千古情诗赢得白富美,从此走向人生巅峰
  14. 洛谷 - P3403 跳楼机(同余最短路)
  15. MATLAB中clc命令详解
  16. MySQL主主从复制+TomCat高可用实践案例
  17. 身为UI设计师,如何应对失业的恐慌
  18. QNX铁路安全软件--QNX在铁路系统领域应用
  19. 试题 基础练习 字母图形
  20. 用RGBD投影激光雷达数据:depthimage_to_laserscan

热门文章

  1. FPGA设计显示电压值
  2. 摩拜单车项目05-Redis集群
  3. 如何禁止手工输入但允许扫码器输入
  4. SC16IS762 在RK3288 上的应用
  5. 在注册表中把服务删除了,为什么还会存在?
  6. 大连鸿蒙刺青怎么样,宋雨琦有多叛逆?“纹身”的位置曝光后,网友:心脏顶不住!...
  7. 字符串截取前几位数,截取小数点之前的数字
  8. 去除《简-书》页面右边《热门故事》,直达《全部评论》《推荐阅读》
  9. windows无法连接到打印机,操作失败,错误为0x0000011b,解决办法之一。
  10. 大揭秘:各种牛叉的立体停车场的原理!