javacv将webm视频转换为mp4格式

1,616 阅读1分钟
**Mavean**
<dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacv</artifactId>
        <version>1.4.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacpp</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>flycapture</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libdc1394</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libfreenect</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libfreenect2</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>librealsense</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>videoinput</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>tesseract</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>leptonica</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>flandmark</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>artoolkitplus</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacv-platform</artifactId>
        <version>1.4.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacv</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>flycapture-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libdc1394-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libfreenect-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>libfreenect2-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>librealsense-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>videoinput-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>tesseract-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>leptonica-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>flandmark-platform</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>artoolkitplus-platform</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.bytedeco.javacpp-presets</groupId>
        <artifactId>ffmpeg</artifactId>
        <version>4.0.2-1.4.3</version>
    </dependency>

JAVA代码

import org.bytedeco.javacpp.avcodec;

import org.bytedeco.javacv.FFmpegFrameGrabber;

import org.bytedeco.javacv.FFmpegFrameRecorder;

import org.bytedeco.javacv.Frame;

import java.io.File;

public class WebmToMp4 {

public static String convertToMp4(File file) {
    FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file);
    String fileName = null;
    Frame captured_frame = null;
    FFmpegFrameRecorder recorder = null;
    try {
        frameGrabber.start();
        fileName = file.getAbsolutePath().replace(".webm",".mp4");

        recorder = new FFmpegFrameRecorder(fileName, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        recorder.setFormat("mp4");
        recorder.setFrameRate(frameGrabber.getFrameRate());
        recorder.setSampleRate(frameGrabber.getSampleRate());

        recorder.setAudioChannels(frameGrabber.getAudioChannels());
        recorder.setFrameRate(frameGrabber.getFrameRate());
        recorder.start();
        while ((captured_frame = frameGrabber.grabFrame()) != null) {
            try {
                recorder.record(captured_frame);
            } catch (Exception e) {
                System.out.println(e);
            }
        }
        recorder.stop();
        recorder.release();
        frameGrabber.stop();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return fileName;
}

}

转载:www.jianshu.com/p/38718f2e3…