日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java 合并多個(gè)MP4視頻文件

瀏覽:27日期:2022-08-20 18:37:06

局限性

只支持MP4文件經(jīng)過嘗試對(duì)于一些MP4文件分割不了

依賴

<!-- mp4文件操作jar --><!-- https://mvnrepository.com/artifact/com.googlecode.mp4parser/isoparser --><dependency><groupId>com.googlecode.mp4parser</groupId><artifactId>isoparser</artifactId><version>1.1.22</version></dependency>

工具類

package com.example.demo;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 com.googlecode.mp4parser.authoring.tracks.CroppedTrack;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;public class Mp4ParserUtils { /** * 合并視頻 * * @param videoList: 所有視頻地址集合 * @param mergeVideoFile: 目標(biāo)文件 * @return */ public static String mergeVideo(List<String> videoList, File mergeVideoFile) { FileOutputStream fos = null; FileChannel fc = null; try { List<Movie> sourceMovies = new ArrayList<>(); for (String video : videoList) { sourceMovies.add(MovieCreator.build(video)); } List<Track> videoTracks = new LinkedList<>(); List<Track> audioTracks = new LinkedList<>(); for (Movie movie : sourceMovies) { for (Track track : movie.getTracks()) { if ('soun'.equals(track.getHandler())) { audioTracks.add(track); } if ('vide'.equals(track.getHandler())) { videoTracks.add(track); } } } Movie mergeMovie = new Movie(); if (audioTracks.size() > 0) { mergeMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); } if (videoTracks.size() > 0) { mergeMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); } Container out = new DefaultMp4Builder().build(mergeMovie); fos = new FileOutputStream(mergeVideoFile); fc = fos.getChannel(); out.writeContainer(fc); fc.close(); fos.close(); return mergeVideoFile.getAbsolutePath(); } catch (Exception e) { e.printStackTrace(); } finally { if (fc != null) { try { fc.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * 剪切視頻 * @param srcVideoPath * @param dstVideoPath * @param times * @throws IOException */ public static void cutVideo(String srcVideoPath, String dstVideoPath, double[] times) throws IOException { int dstVideoNumber = times.length / 2; String[] dstVideoPathes = new String[dstVideoNumber]; for (int i = 0; i < dstVideoNumber; i++) { dstVideoPathes[i] = dstVideoPath + 'cutOutput-' + i + '.mp4'; } int timesCount = 0; for (int idst = 0; idst < dstVideoPathes.length; idst++) { //Movie movie = new MovieCreator().build(new RandomAccessFile('/home/sannies/suckerpunch-distantplanet_h1080p/suckerpunch-distantplanet_h1080p.mov', 'r').getChannel()); Movie movie = MovieCreator.build(srcVideoPath); List<Track> tracks = movie.getTracks(); movie.setTracks(new LinkedList<Track>()); // remove all tracks we will create new tracks from the old double startTime1 = times[timesCount]; double endTime1 = times[timesCount + 1]; timesCount = timesCount + 2; 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) { // This exception here could be a false positive in case we have multiple tracks // with sync samples at exactly the same positions. E.g. a single movie containing // multiple qualities of the same video (Microsoft Smooth Streaming file) throw new RuntimeException('The startTime has already been corrected by another track with SyncSample. Not Supported.'); } startTime1 = correctTimeToSyncSample(track, startTime1, false); endTime1 = correctTimeToSyncSample(track, endTime1, true); timeCorrected = true; } } for (Track track : tracks) { long currentSample = 0; double currentTime = 0; double lastTime = -1; long startSample1 = -1; long endSample1 = -1; for (int i = 0; i < track.getSampleDurations().length; i++) { long delta = track.getSampleDurations()[i]; if (currentTime > lastTime && currentTime <= startTime1) { // current sample is still before the new starttime startSample1 = currentSample; } if (currentTime > lastTime && currentTime <= endTime1) { // current sample is after the new start time and still before the new endtime endSample1 = currentSample; } lastTime = currentTime; currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); currentSample++; } //movie.addTrack(new AppendTrack(new ClippedTrack(track, startSample1, endSample1), new ClippedTrack(track, startSample2, endSample2))); movie.addTrack(new CroppedTrack(track, startSample1, endSample1)); } long start1 = System.currentTimeMillis(); Container out = new DefaultMp4Builder().build(movie); long start2 = System.currentTimeMillis(); FileOutputStream fos = new FileOutputStream(String.format(dstVideoPathes[idst])); FileChannel fc = fos.getChannel(); out.writeContainer(fc); fc.close(); fos.close(); long start3 = System.currentTimeMillis(); } } private static double correctTimeToSyncSample(Track track, double cutHere, boolean next) { double[] timeOfSyncSamples = new double[track.getSyncSamples().length]; long currentSample = 0; double currentTime = 0; for (int i = 0; i < track.getSampleDurations().length; i++) { long delta = track.getSampleDurations()[i]; if (Arrays.binarySearch(track.getSyncSamples(), currentSample + 1) >= 0) { // samples always start with 1 but we start with zero therefore +1 timeOfSyncSamples[Arrays.binarySearch(track.getSyncSamples(), currentSample + 1)] = currentTime; } currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); currentSample++; } double previous = 0; for (double timeOfSyncSample : timeOfSyncSamples) { if (timeOfSyncSample > cutHere) { if (next) { return timeOfSyncSample; } else { return previous; } } previous = timeOfSyncSample; } return timeOfSyncSamples[timeOfSyncSamples.length - 1]; }}

以上就是Java 合并多個(gè)MP4視頻文件的詳細(xì)內(nèi)容,更多關(guān)于Java 合并視頻的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99影视| 久久精品国产一区二区| 高清av不卡| 成人精品视频| 美女一区网站| 亚洲91视频| 在线天堂中文资源最新版| 日韩欧美三级| 亚洲二区视频| 乱人伦精品视频在线观看| 日韩中文字幕不卡| 日韩中出av| 国产精品a久久久久| 精品女同一区二区三区在线观看| 精品久久国产一区| 欧美aa在线观看| 在线成人直播| 色综合视频一区二区三区日韩 | 人人爱人人干婷婷丁香亚洲| 日韩一区精品| 国产精品亚洲欧美| 最新中文字幕在线播放| 99久久久国产精品美女| 丝瓜av网站精品一区二区| 青草国产精品| 正在播放日韩精品| 亚洲一卡久久| 国产精品一在线观看| 久久久久久夜| 亚洲激情二区| 欧美一区91| 日韩不卡视频在线观看| 久久高清免费观看| 欧美黄色一区| 国产一区日韩一区| 欧美日韩va| 美女网站视频一区| 喷白浆一区二区| 国产精品毛片aⅴ一区二区三区| 天堂8中文在线最新版在线| 伊人精品视频| 国产精品一级| 亚洲一区日本| 亚洲国产一区二区在线观看 | 日韩制服丝袜先锋影音| 国产精品一区二区三区av麻 | 亚洲激情黄色| 国产精品网在线观看| а√天堂中文在线资源8| 视频一区中文字幕国产| 久久99青青| av不卡在线| 久久精品欧洲| 久久高清免费观看| 麻豆国产精品777777在线| 欧美~级网站不卡| 日韩精品一区二区三区av| 亚洲国产欧美日本视频| 亚洲一区有码| 中文在线中文资源| 日本亚洲最大的色成网站www| 91视频一区| 奇米狠狠一区二区三区| 美女少妇全过程你懂的久久| 国产毛片一区二区三区| 不卡一区2区| 精品免费视频| 亚州欧美在线| 亚洲二区精品| 国产第一亚洲| 91精品视频一区二区| 久久中文视频| 欧美激情视频一区二区三区免费 | 国产精品chinese| 国产亚洲综合精品| 波多野结衣久久精品| 日韩高清国产一区在线| 伊人久久婷婷| 九九精品调教| 国产精品网站在线看| 免费观看在线综合色| 久久激情中文| 国产一区三区在线播放| 日韩国产欧美在线播放| 欧美日韩国产亚洲一区| 樱桃视频成人在线观看| 麻豆国产精品视频| 日本h片久久| 六月丁香综合| 亚洲欧美一区在线| 日本不良网站在线观看| 欧美激情 亚洲a∨综合| 日本免费一区二区视频| 男女性色大片免费观看一区二区| 91精品一区二区三区综合| 欧美极品中文字幕| 国产精品一区三区在线观看| 一区二区三区国产在线| 在线午夜精品| 欧美日韩少妇| 欧美精品一区二区三区精品| 神马午夜在线视频| 国产一区二区三区四区五区传媒| 欧美午夜三级| 91精品麻豆| 日本午夜免费一区二区| 日本亚洲最大的色成网站www| 日韩影院免费视频| 丝袜美腿亚洲色图| 精品1区2区3区4区| 国产精品av一区二区| 91精品久久久久久久久久不卡| 国产精品久久久久久久免费观看| 精品久久久网| 精品美女在线视频| 久久精品福利| 精品中国亚洲| 国产一区三区在线播放| 韩国一区二区三区视频| 精品免费视频| 日韩av二区在线播放| 久久精品99久久久| 精品国产黄a∨片高清在线| 一本大道色婷婷在线| 色天使综合视频| 久久高清国产| 国产精品入口久久| 日韩在线中文| 丝袜脚交一区二区| 国产精品久久久久9999高清| 久久久亚洲欧洲日产| 亚洲最新无码中文字幕久久| 性欧美69xoxoxoxo| 日本vs亚洲vs韩国一区三区二区| 国产精品香蕉| 天堂资源在线亚洲| 日韩精选在线| 亚洲欧洲高清| 亚洲精品高潮| 韩国一区二区三区视频| 中国女人久久久| 国产精品成人**免费视频| 欧美成人基地| 日韩一二三区在线观看| 午夜av不卡| 综合视频一区| 日韩电影免费网址| 日韩一二三区在线观看| 午夜欧美巨大性欧美巨大| 亚洲精品字幕| 欧美亚洲日本精品| 日韩综合一区二区| 青青久久av| 国产亚洲精品美女久久| 91精品国产调教在线观看| 亚洲欧美网站在线观看| 国产精品毛片一区二区在线看| 国产精品日韩久久久| 欧美成人aaa| 欧美特黄视频| 久久精品网址| 美女精品在线观看| 高清久久精品| 亚洲另类av| 婷婷激情一区| 欧美亚洲福利| 在线一区电影| 久久成人福利| 国产精品免费看| 97精品国产福利一区二区三区| 日韩精品一二三| 婷婷综合六月| 国产日本亚洲| 亚洲欧美日韩精品一区二区 | 国产乱子精品一区二区在线观看 | 国产毛片久久久| 米奇777超碰欧美日韩亚洲| 美腿丝袜亚洲三区| 蜜臀国产一区二区三区在线播放| 97精品中文字幕| 久久国产免费看| 99视频在线精品国自产拍免费观看| 精品国产黄a∨片高清在线| 视频一区日韩精品| 欧美特黄a级高清免费大片a级| 国产videos久久| 久久精品999| 中文字幕亚洲在线观看| 免费av一区| 午夜影院一区| 久久99高清| 婷婷亚洲精品| 亚洲精品网址| 久久久久.com| 精品久久精品| 欧美aa在线视频| 日本va欧美va精品发布| 久久先锋影音| 婷婷六月综合| 91精品久久久久久久久久不卡|