java mp4分割_Android(java方法)上实现mp4的分割和拼接 (二)

这节谈一下如何在android上实现mp4文件的高效率切割。

业务需求举例:把一段2分钟的mp4文件切割出00:42 至 01:16这段时间的视频,要求足够短的执行时间和尽量少的误差。

分析:mp4Parser只能在关键帧切割,比如,在00:40和00:45分别存在一个可切割关键帧,那么切割视频的头和尾,都应该选择短切割。然后获取到误差的视频短,如果这个误差大于0.5S,用FFmpeg进行一帧一帧编解码切割文件。这样最多会有三段mp4文件,再次将这三段mp4拼接起来就可以了。

下面直接上关键代码,这些代码在PC上新建一个java工程也可以实现。

1.切割文件方法:

/**

需要使用isoviewer-1.0-RC-27包

返回值是目标mp4的开头和结尾时刻

**/

public static double[] startTrim(File src, File dst, int startMs, int endMs) throws IOException {

Movie movie = MovieCreator.build(src.getAbsolutePath());

List tracks = movie.getTracks();

movie.setTracks(new LinkedList());

double startTime = startMs/1000;

double endTime = endMs/1000;

boolean timeCorrected = false;

// Here we try to find a track that has sync samples. Since we can only start decoding

// at such a sample we SHOULD make sure that the start of the new fragment is exactly

// such a frame

for (Track track : tracks) {

if (track.getSyncSamples() != null && track.getSyncSamples().length > 0) {

if (timeCorrected) {

throw new RuntimeException("The startTime has already been corrected by another track with SyncSample. Not Supported.");

}

//true,false表示短截取;false,true表示长截取

startTime = correctTimeToSyncSample(track, startTime, true);

endTime = c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值