需要进行简单的音视频编程,如果不是特别数据C/C++,那么JavaCV应该是比较好的选择,下面记录一下使用JavaCV 分离AAC视频数据(转封装的方式,不需要转码)的方法。
使用硬件加速编码,需要使用VideoCodecName的方式设置编码器
1. 实现代码
这里需要注意的是编码器设置成h264_qsv
,另外格式不能是YUV420,qsv要求必须是AV_PIX_FMT_NV12。
public class Sample11 {
public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("E:\\lpl.mp4");
grabber.setVideoCodecName("h264_qsv");
grabber.start();
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(new File("E:\\lpl.h264"), grabber.getImageWidth(), grabber.getImageHeight());
recorder.setVideoCodecName("h264_qsv");
recorder.setPixelFormat(avutil.AV_PIX_FMT_NV12);
recorder.setFormat("h264");
recorder.start();
Frame frame = null;
while ((frame = grabber.grab()) != null) {
if (frame.image != null) {
recorder.record(frame);
}
}
recorder.close();
grabber.close();
}
}
可以通过下面命令查看支持的硬件加速方法:
ffmpeg -hwaccels
如:
Hardware acceleration methods:
dxva2
qsv
标签:转码,h264,音视频,grabber,qsv,JavaCV,硬件加速,recorder
From: https://www.cnblogs.com/michong2022/p/17016400.html