需要进行简单的音视频编程,如果不是特别熟悉C/C++,那么JavaCV应该是比较好的选择,下面记录一下JavaCV视频转码(非硬件加速)的方法。

这里是将mkv转化成mp4,其他方式也是可以的

1. 实现代码

使用FFmpegFrameGrabber读取需要转码的音视频帧,将音视频帧交给FFmpegFrameRecorder转码并写出。

public class Sample34 {
    public static void main(String[] args) throws IOException {
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("E:\\lpl.mkv");
        grabber.start();
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("E:\\lpl.mp4", grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());
        recorder.setFormat("mp4");
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        recorder.setFrameRate(grabber.getFrameRate());
        recorder.setVideoBitrate(grabber.getVideoBitrate());
        recorder.setAspectRatio(grabber.getAspectRatio());
        recorder.setAudioOptions(grabber.getAudioOptions());
        recorder.setSampleRate(grabber.getSampleRate());
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
        recorder.start();
        Frame frame;
        while (true) {
            frame = grabber.grabFrame();
            if (frame != null) {
                recorder.record(frame);
            } else {
                break;
            }
        }
        recorder.close();
        grabber.close();
    }
}

2. 效果展示

可以使用VLC播放转码后的mp4文件(转码后的mp4大小要比原始的mkv小得多):

使用mediainfo查看视频信息:

posted on 2022-12-31 10:08  $$X$$  阅读(476)  评论(0)    收藏  举报