This article mainly introduces the use and analysis of java multimedia file coding and processing tool class. The example code is very detailed in this paper. It has certain reference value for everyone's study or work. Friends who need it can refer to it.
Introduce
<dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-core</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-kafka</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>org.jcodec</groupId> <artifactId>jcodec</artifactId> <version>0.2.5</version> <scope>test</scope> </dependency> <dependency> <groupId>io.humble</groupId> <artifactId>humble-video-all</artifactId> <version>0.3.0</version> </dependency> <dependency> <groupId>org.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.9.39</version> </dependency>
Code
/*** *https://stackoverflow.com/questions/38123693/how-to-concatenate-merge-two-videos-in-a-new-video-file-in-java * @param aggregate Merge Output Files * @param segments MPEG transport stream(FFMpeg mpegts), MPEG-2 TS Video; waveform sound * @throws InterruptedException * @throws IOException */ private void merge(File aggregate, Collection<File> segments) throws InterruptedException, IOException { Muxer muxer = Muxer.make(aggregate.toString(), MuxerFormat.getFormat(96), "wav"); final MediaPacket packet = MediaPacket.make(); long dts_offset = 0; long pts_offset = 0; for (File segment : segments) { Demuxer demuxer = Demuxer.make(); //option https://ffmpeg.org/ffmpeg-formats.html demuxer.open(segment.toString(), null, false, true, null, null); if (muxer.getState() == Muxer.State.STATE_INITED) { int numStreams = demuxer.getNumStreams(); for (int s = 0; s < numStreams; s++) { DemuxerStream demuxerStream = demuxer.getStream(s); Decoder decoder = demuxerStream.getDecoder(); muxer.addNewStream(decoder); } muxer.open(null, null); } long dts_max = 0; long pts_max = 0; while (demuxer.read(packet) >= 0) { if (packet.isComplete()) { packet.setDts(packet.getDts() + dts_offset); packet.setPts(packet.getPts() + pts_offset); dts_max = packet.getDts() + 1; pts_max = packet.getPts() + 1; muxer.write(packet, false); } } dts_offset = dts_max; pts_offset = pts_max; demuxer.close(); } muxer.close(); }
test
@Test public void testFormat() { MuxerFormat format = MuxerFormat.getFormat(128); System.out.println(format); Collection<MuxerFormat> formats = MuxerFormat.getFormats(); formats.stream().forEach(this::out); } void out(MuxerFormat format) { System.out.printf("%s %sn",format.getName(),format.getMimeType()); } @Test public void test() throws IOException, InterruptedException { String directory = "C:\Users\Administrator\AppData\Local\Temp\8ad088a2-0bb3-41dc-89d9-2c57ef8414b0"; List<File> files = Files.list(Paths.get(directory)).map(path -> path.toFile()).filter(file -> file.getName().endsWith(".ts")) .collect(Collectors.toList()); File dest = new File(directory+"\dest.wav"); merge(dest,files); }
Java's multimedia file encoding, processing tools parsing content is explained here, in fact, programming is an open answer, there are different ideas or other methods can be realized in the comments below, look forward to your speech.