JavaCV實(shí)現(xiàn)多個MP4視頻的合并
使用javacv和ffmpeg框架簡單快速的合并mp4文件的視頻和音頻
1.依賴
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.1</version>
</dependency>
<!-- 視頻處理包 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.1.3-1.5.1</version>
</dependency>
2.測試類
可以根據(jù)自己的需要進(jìn)行封裝
package com.test.demo;
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;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.FrameRecorder;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
import static org.bytedeco.ffmpeg.global.avutil.AV_LOG_ERROR;
@SpringBootTest
public class MP4Test {
public static void main(String[] args) throws FrameRecorder.Exception, FrameGrabber.Exception {
List<String> file = new ArrayList<>();
// 添加需要合并的mp4文件
file.add("C:\Users\Administrator\Desktop\1\source\1.mp4");
file.add("C:\Users\Administrator\Desktop\1\source\2.mp4");
long start = System.currentTimeMillis();
// 合并
videoMerge(file, "C:\Users\Administrator\Desktop\1\1\5.mp4");
// 統(tǒng)計耗時
System.out.println("耗時" + (System.currentTimeMillis() - start) + "毫秒");
}
/**
* 多個視頻的合并
*
* @param videoList 地址集合
* @param output 合并后的視頻輸出地址
*/
public static void videoMerge(List<String> videoList, String output) throws FrameRecorder.Exception, FrameGrabber.Exception {
// 幀抓取器 以第一個視頻為藍(lán)本開始抓取
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.setAudioCodec(avcodec.AV_CODEC_ID_AAC); // 設(shè)置音頻編解碼器
// 單通道
recorder.setAudioChannels(1);
recorder.setInterleaved(true);
// 輸出流封裝格式
recorder.setFormat("mp4");
// 視頻幀率
recorder.setFrameRate(grabber.getFrameRate());
// 設(shè)置日志輸出(error)
avutil.av_log_set_level(AV_LOG_ERROR);
// 設(shè)置分辨率格式 yuv420p
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
// 設(shè)置視頻比特率
recorder.setVideoBitrate(grabber.getVideoBitrate());
// 音頻比特率
recorder.setAudioBitrate(grabber.getAudioBitrate()); // 設(shè)置音頻比特率
// 開始編碼
recorder.start();
// 循環(huán)設(shè)置
for (String videoPath : videoList) {
try (FFmpegFrameGrabber grabberTemp = new FFmpegFrameGrabber(videoPath)) {
grabberTemp.start();
//設(shè)置幀
Frame frame;
while ((frame = grabberTemp.grabFrame()) != null) {
recorder.record(frame);
}
// 處理音頻幀
Frame audioFrame;
while ((audioFrame = grabberTemp.grabSamples()) != null) {
recorder.record(audioFrame);
}
} catch (FrameGrabber.Exception e) {
System.err.println("Error grabbing frames from video: " + videoPath);
e.printStackTrace();
}
}
// 關(guān)閉幀編解碼器
recorder.close();
grabber.close();
}
}
到此這篇關(guān)于JavaCV實(shí)現(xiàn)多個MP4視頻的合并的文章就介紹到這了,更多相關(guān)JavaCV視頻合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java結(jié)合redis實(shí)現(xiàn)接口防重復(fù)提交
本文主要介紹了Java結(jié)合redis實(shí)現(xiàn)接口防重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Spring Validation方法實(shí)現(xiàn)原理分析
這篇文章主要介紹了Spring Validation實(shí)現(xiàn)原理分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
Spring Boot+Drools規(guī)則引擎整合詳解
本篇文章主要介紹了Spring Boot+Drools規(guī)則引擎整合,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
Java基于ArrayList實(shí)現(xiàn)群主發(fā)紅包功能
這篇文章主要介紹了Java基于ArrayList實(shí)現(xiàn)群主發(fā)紅包功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
基于springboot實(shí)現(xiàn)數(shù)據(jù)可視化的示例代碼
本文主要介紹了基于springboot實(shí)現(xiàn)數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2022-07-07
解決SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper報錯問題
這篇文章主要介紹了解決SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
IDEA創(chuàng)建Java項(xiàng)目保姆級教程(超詳細(xì)!)
這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java項(xiàng)目保姆級教程的相關(guān)資料,Java是一種廣泛使用的編程語言,廣泛用于Web應(yīng)用程序和客戶端應(yīng)用程序的開發(fā),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09

