Android 使用 mp4parser 做视频拼接合并 您所在的位置:网站首页 视频文件合并工具安卓 Android 使用 mp4parser 做视频拼接合并

Android 使用 mp4parser 做视频拼接合并

2023-07-13 06:27| 来源: 网络整理| 查看: 265

做短视频拍摄时,在分段录制结束需要将多个视频片段拼接成一个视频文件,然后进入预览界面播放。 有两种方案: 方案一:使用 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: [email protected] */ 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 inputVideos, String outputPath) throws IOException { List inputMovies = new ArrayList(); for (String input : inputVideos) { inputMovies.add(MovieCreator.build(input)); } List videoTracks = new LinkedList(); List 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 做视频裁剪》;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有