HumbleVideo是Java界比较活跃的多媒体处理库
<dependency>
<groupId>io.humble</groupId>
<artifactId>humble-video-all</artifactId>
<version>0.3.0</version>
</dependency>
package bj;
import io.humble.video.Demuxer;
import io.humble.video.DemuxerFormat;
import io.humble.video.MediaPacket;
import org.junit.Test;
import java.io.IOException;
/**
* Created by BaiJiFeiLong@gmail.com at 2018/12/4 下午4:33
*/
public class HumbleTest {
@Test
public void testAlpha() throws IOException, InterruptedException {
Demuxer demuxer = Demuxer.make();
demuxer.open("hello.flv", DemuxerFormat.findFormat("flv"), false, true, null, null);
// 获取容器格式
DemuxerFormat format = demuxer.getFormat();
System.out.println(format);
System.out.println(demuxer.getURL());
// 打印容器元数据
demuxer.getMetaData().getKeys().forEach($ ->
System.out.println(String.format("%s: %s", $, demuxer.getMetaData().getValue($))));
/// 读取媒体文件
MediaPacket mediaPacket = MediaPacket.make();
int read = demuxer.read(mediaPacket);
assert read != 0;
}
}
21:01:30.425 [main] ERROR org.ffmpeg - Invalid UE golomb code
21:01:30.495 [main] ERROR org.ffmpeg - Invalid UE golomb code
io.humble.video.DemuxerFormat@401960608[name:flv;description:FLV (Flash Video);]
hello.flv
server: Red5
canSeekToEnd: true
recordeddate: 2018-12-04T08:54:36.843Z
noaudiocodec: 0
java.lang.AssertionError
at bj.HumbleTest.testAlpha(HumbleTest.java:27)
作为Java最活跃的多媒体库,读取文件信息和文件内容都报不明所以的异常,所以用Java处理多媒体不太容易
ffmpeg-cli-wrapper是对系统ffmpeg
命令的封装,可以调用系统安装的ffmpeg
处理多媒体文件
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.6.2</version>
</dependency>
package bj;
import net.bramp.ffmpeg.FFmpeg;
import net.bramp.ffmpeg.FFmpegExecutor;
import net.bramp.ffmpeg.builder.FFmpegBuilder;
import org.junit.Test;
import java.io.IOException;
/**
* Created by BaiJiFeiLong@gmail.com at 2018/12/4 下午5:57
*/
public class FFMpegTest {
@Test
public void testAlpha() throws IOException {
/// FFmpeg命令构建器
// 示例: 合并视频文件
FFmpegBuilder builder = new FFmpegBuilder()
.setInput("concat:0.ts|1.ts|2.ts")
.overrideOutputFiles(true)
.addOutput("three.ts")
.done();
System.out.println("Command: " + String.join("", builder.build()));
// 使用系统FFmpeg的安装路径构造FFmpegExecutor
FFmpegExecutor executor = new FFmpegExecutor(new FFmpeg("/usr/local/bin/ffmpeg"));
// 执行转码任务,并打印执行进度
executor.createJob(builder, progress -> System.out.println("Progress: " + progress)).run();
}
}
Command: -y -v error -i concat:0.ts|1.ts|2.ts three.ts
21:18:29.246 [main] INFO net.bramp.ffmpeg.RunProcessFunction - /usr/local/bin/ffmpeg -version
21:18:29.665 [main] INFO net.bramp.ffmpeg.RunProcessFunction - /usr/local/bin/ffmpeg -y -v error -progress tcp://127.0.0.1:62492 -i concat:0.ts|1.ts|2.ts three.ts
21:18:30.407 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 440011
Progress: Progress{frame=14, fps=0/1, bitrate=4766100, total_size=262144, out_time_ns=440011000, dup_frames=0, drop_frames=0, speed=0.877, status=continue}
21:18:30.943 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 1360011
Progress: Progress{frame=37, fps=3621/100, bitrate=3084000, total_size=524288, out_time_ns=1360011000, dup_frames=0, drop_frames=0, speed=1.33, status=continue}
21:18:31.444 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 1960011
Progress: Progress{frame=52, fps=841/25, bitrate=2139900, total_size=524288, out_time_ns=1960011000, dup_frames=0, drop_frames=0, speed=1.27, status=continue}
21:18:31.976 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 2920011
Progress: Progress{frame=76, fps=3671/100, bitrate=2154600, total_size=786432, out_time_ns=2920011000, dup_frames=0, drop_frames=0, speed=1.41, status=continue}
21:18:32.482 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 3960011
Progress: Progress{frame=102, fps=1973/50, bitrate=1588700, total_size=786432, out_time_ns=3960011000, dup_frames=0, drop_frames=0, speed=1.53, status=continue}
21:18:32.992 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 5080011
Progress: Progress{frame=130, fps=2101/50, bitrate=1651300, total_size=1048576, out_time_ns=5080011000, dup_frames=0, drop_frames=0, speed=1.64, status=continue}
21:18:33.514 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 6160011
Progress: Progress{frame=157, fps=4353/100, bitrate=1702200, total_size=1310720, out_time_ns=6160011000, dup_frames=0, drop_frames=0, speed=1.71, status=continue}
21:18:34.029 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 6880011
Progress: Progress{frame=175, fps=2121/50, bitrate=1524100, total_size=1310720, out_time_ns=6880011000, dup_frames=0, drop_frames=0, speed=1.67, status=continue}
21:18:34.520 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 8000011
Progress: Progress{frame=203, fps=877/20, bitrate=1572900, total_size=1572864, out_time_ns=8000011000, dup_frames=0, drop_frames=0, speed=1.73, status=continue}
21:18:35.030 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 9760011
Progress: Progress{frame=247, fps=481/10, bitrate=1504100, total_size=1835008, out_time_ns=9760011000, dup_frames=0, drop_frames=0, speed=1.9, status=continue}
21:18:35.544 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 11240011
Progress: Progress{frame=284, fps=5031/100, bitrate=1492600, total_size=2097152, out_time_ns=11240011000, dup_frames=0, drop_frames=0, speed=1.99, status=continue}
21:18:35.733 [TcpProgressParser(tcp://127.0.0.1:62492)] WARN net.bramp.ffmpeg.progress.Progress - skipping unhandled key: out_time_us = 11920011
Progress: Progress{frame=300, fps=5127/100, bitrate=1557500, total_size=2320672, out_time_ns=11920011000, dup_frames=0, drop_frames=0, speed=2.04, status=end}