Android 使用 mp4parser 做视频拼接合并
做短视频拍摄时,在分段录制结束需要将多个视频片段拼接成一个视频文件,然后进入预览界面播放。
有两种方案:
方案一:使用 FFMpeg 进行视频拼接,命令如下:
// inputListFilePath 为需要合并的文件列表文件,每行一个文件路径
String cmd = "ffmpeg -y -f concat -safe 0 -i " + inputListFilePath + " -c copy " + outputFilePath;
方案二:使用开源库 mp4parser 做多视频片段拼接
本文主要介绍方案二。
使用时先在 gradle 中配置依赖:
compile 'com.googlecode.mp4parser:isoparser:1.1.21'
将 mp4parser 封装成音视频合并工具类,合并函数如下:
package com.alanwang.aav.alvideoeditor.core;import com.coremedia.iso.boxes.Container;
import com.googlecode.mp4parser.authoring.Movie;
import com.googlecode.mp4parser.authoring.Track;
import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
import com.googlecode.mp4parser.authoring.tracks.AppendTrack;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;/*** Author: AlanWang4523.* Date: 19/4/15 01:46.* Mail: alanwang4523@gmail.com*/
public class AWMp4ParserHelper {private final static String PREFIX_VIDEO_HANDLER = "vide";private final static String PREFIX_AUDIO_HANDLER = "soun";/*** 合并视频* @param inputVideos* @param outputPath* @throws IOException*/public static void mergeVideos(List<String> inputVideos, String outputPath) throws IOException {List<Movie> inputMovies = new ArrayList<>();for (String input : inputVideos) {inputMovies.add(MovieCreator.build(input));}List<Track> videoTracks = new LinkedList<>();List<Track> audioTracks = new LinkedList<>();for (Movie m : inputMovies) {for (Track t : m.getTracks()) {if (PREFIX_AUDIO_HANDLER.equals(t.getHandler())) {audioTracks.add(t);}if (PREFIX_VIDEO_HANDLER.equals(t.getHandler())) {videoTracks.add(t);}}}Movie outputMovie = new Movie();if (audioTracks.size() > 0) {outputMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));}if (videoTracks.size() > 0) {outputMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));}Container out = new DefaultMp4Builder().build(outputMovie);FileChannel fc = new RandomAccessFile(outputPath, "rw").getChannel();out.writeContainer(fc);fc.close();}
}
使用 Mp4Parser 进行视频裁剪请见我的另外一篇博客 《 Android 使用 mp4parser 做视频裁剪》;
Android 使用 mp4parser 做视频拼接合并相关推荐
- Android 使用 mp4parser 做视频裁剪
做音视频时我们很多时候需要做音视频裁剪,本文介绍使用开源库 mp4parser 做裁剪. 视频合并请见我的另外一篇博客<Android 使用 mp4parser 做视频拼接合并> 使用时先 ...
- 怎么做视频拼接?借助这款软件事半功倍
怎么做视频拼接?利用软件,可以快速实现,其实可以拼接视频的软件还是蛮多的,感觉万兴喵影操作起来比较方便. 第一步:在官网下载并安装万兴喵影,打开万兴喵影,点击"文件"选择需要拼接的 ...
- Android 使用mp4parser进行视频的分割与合并
mp4parser 是一个优秀的视频处理框架,下面就教大家使用mp4parser在android上进行视频的分割与合并. 2017年4月10日更新: 我发现该框架还有诸多问题和BUG,比如无法合并不同 ...
- python做视频拼接
需求:将两个视频上下or左右拼接,用来做直观对比 应该可以读入视频,遍历帧,每帧当做np对象直接concate,加padding的,不过已经有现成的包了,实现应该更加高效,就不造轮子了 用到的包:mo ...
- FFmpeg命令行实现两路/多路视频拼接 合并 合成 同时播放
首先放一个两路视频合并的例子 ffmpeg -pix_fmt rgb24 -s 960x960 -i bag_level_7_renderSize_1_960x960_8bits_rgb24i.rgb ...
- Android mp4parser 视频拼接
最近项目里面要用到视频拼接,参考网上的资料决定采用mp4parser进行视频拼接,github上有mp4parser的源码.mp4parser项目很大,这里只用到了视频拼接的部分.这里我封装了一个My ...
- 3d怎么把两个面拼接在一起_视频拼接怎么做?如何将多段视频拼接在一起?
视频拼接是一项比较简单的视频剪辑操作,最近同事艾琳娜来问我怎么把视频拼接在一起,才发现其实百度搜索到的方法都比较麻烦,要么就是需要付费,所以今天给大家介绍一个免费的视频拼接软件,大家可以试试用呀! 视 ...
- 想要将多个视频拼接在一起?如何把三个视频合成一个视频
从事短视频创作行业以来,总是存在着各种挑战.最开始,因为主要负责视频素材的搜集,所以每天虽忙但充实,最近逐步开始学习视频的剪辑工作,可把我难到了!想要将多个视频拼接在一起?如何把三个视频合成一个视频? ...
- 音频剪辑合成 php,教你如何剪辑多个视频合并成一个 视频剪辑合并软件
小编总是在网上看到很多搞笑的视频片段的合集,然后就心想怎样截取多个视频的片段,然后把多个视频片段都合并成一个视频呢.于是今天就用最近很红的宋小宝的雨露均沾来做视频剪辑合并的教程,也就是说把一个视频中需 ...
最新文章
- 神策数据创始人桑文锋:AARRR模型如何应用到产品各个阶段
- java学习(21):移位运算符
- 多个虚拟主机服务器,Windows多个虚拟主机服务器
- Python2和Python3正则匹配中文时的编码问题
- 网络安装centos5.4
- 失败原因【object object】_使用前端框架Vue的原因!
- dtree树形结构异步传输
- arcgis 接口转换与.Net框架
- mysql零碎问题合集
- 2.UML2 软件建模入门与提高 --- UML入门基础
- RPi 2B Raspbian system install
- oa服务器日常维护,OA系统的日常维护工作有哪些
- APK的几种安装方式
- Java传输文件使用Base64优化传输速率。
- 微信小程序实现下拉框功能
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
- DIY 大型FDM 3D打印机中遇到的问题和经验分享(1)
- 基于ESP32的智能家居控制系统-微信小程序
- 重新注册系统所有dll文件
- 头歌 DNS协议分析 第4关 NS 类型的 DNS 解析报文分析