这篇文章将为大家详细讲解有关java多媒体文件编码处理工具类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
召陵网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联公司自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
引入
org.apache.storm storm-core 1.1.0 org.apache.storm storm-kafka 1.0.4 org.jcodec jcodec 0.2.5 test io.humble humble-video-all 0.3.0 org.mp4parser isoparser 1.9.39
代码
/*** *https://stackoverflow.com/questions/38123693/how-to-concatenate-merge-two-videos-in-a-new-video-file-in-java * @param aggregate 合并待输出文件 * @param segments MPEG transport stream(FFMpeg mpegts)、 MPEG-2 TS视频;波形声音 * @throws InterruptedException * @throws IOException */ private void merge(File aggregate, Collectionsegments) 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 public void testFormat() { MuxerFormat format = MuxerFormat.getFormat(128); System.out.println(format); Collectionformats = MuxerFormat.getFormats(); formats.stream().forEach(this::out); } void out(MuxerFormat format) { System.out.printf("%s %s\n",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 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多媒体文件编码处理工具类的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。