合并多个视频的JavaCV教程
最编程
2024-08-03 18:31:31
...
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.bytedeco.ffmpeg.avcodec.AVPacket;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
/**
* 多个视频的合并
* @param videoAddrSet 地址集合
* @param output 合并后的视频输出地址
*/
public static void videoMerge(Set<String> videoAddrSet, String output)
throws org.bytedeco.javacv.FrameRecorder.Exception, org.bytedeco.javacv.FrameGrabber.Exception {
List<String> videoList=new ArrayList<>(videoAddrSet);
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoList.get(0));
grabber.start();
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, grabber.getImageWidth(),
grabber.getImageHeight(), 0);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
// recorder.setAudioChannels(1);
// recorder.setInterleaved(true);
recorder.setFormat("mp4");
recorder.setFrameRate(grabber.getFrameRate());
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // yuv420p
int bitrate = grabber.getVideoBitrate();
if (bitrate == 0) {
bitrate = grabber.getAudioBitrate();
}
recorder.setVideoBitrate(bitrate);
recorder.start();
Frame frame = null;
for (; (frame = grabber.grabImage()) != null;) {
// 封装/复用
recorder.record(frame);
}
for(int i=1;i<videoList.size();i++) {
FFmpegFrameGrabber grabberTemp = new FFmpegFrameGrabber(videoList.get(i));
grabberTemp.start();
for (; (frame = grabberTemp.grabImage()) != null;) {
// 封装/复用
recorder.record(frame);
}
grabberTemp.close();
}
recorder.close();
grabber.close();
}
推荐阅读
-
基于 FFmpeg 的 YouTube 音频/视频批量合并功能
-
基于 SSM 的微信小程序教辅管理系统(研究 1)(源代码 + sql 脚本 + 视频导入教程 + 文档)
-
基于SSM+微信小程序的校园二手数字交易平台系统(二手3)(源码+sql脚本+视频导入教程+文档)
-
不容错过的Linux学习资源推荐:视频教程、论坛与资料一手掌握!
-
试试这个免费且开源的视频剪辑工具 - Shotcut!附上详细安装指南和中文设置教程
-
Max 3D美术教程:将多个Bip动画文件导入并合并为一个动画
-
轻松使用TortoiseGit小乌龟合并代码和处理冲突的图文教程
-
合并多条提交记录到一个新提交:使用TortoiseGit(小乌龟软件)的简单教程
-
打造你的专属微信!跟着教程一步一步制作私信和群聊 Android App(附带源码和演示视频,超详细讲解)
-
合并多个时间区间,获取一个或多个合并后的时间段(使用JS)