bytedeco/javacv

FFmpegFrameRecorder$Exception: avformat_write_header error() error -22: Could not write header (How to fix this, help)

Open

#2,125 opened on Nov 9, 2023

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Java (1,583 forks)batch import
help wantedquestion

Repository metrics

Stars
 (6,985 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

public static void video2Webp(String localVideoPath, String localWebpPath) { try(FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(localVideoPath); FFmpegFrameFilter filter = new FFmpegFrameFilter("scale=iw/2:ih/2", grabber.getImageWidth() / 2, grabber.getImageHeight() / 2)) { grabber.start(); filter.setAudioChannels(1); filter.setSampleFormat(grabber.getSampleFormat()); filter.setSampleRate(grabber.getSampleRate()); filter.start();

        FFmpegFrameRecorder recorder = FFmpegFrameRecorder.createDefault(localWebpPath, grabber.getImageWidth()/2, grabber.getImageHeight()/2);
        recorder.setFrameRate(30);
        recorder.setAudioChannels(1);
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_WEBP);
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
        recorder.setAudioOption("an", "1");
        recorder.start();
        Frame in, out;
        while ((in = grabber.grab()) != null) {
            filter.push(in);
            while ((out = filter.pull()) != null) {
                recorder.record(out);
            }
        }

        recorder.stop();
        filter.stop();
        grabber.stop();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    String inputFile = "/Users/terryzhang/IdeaProjects/code/media-morph/1.MP4"; // 输入视频文件路径
    String outputFile = "/Users/terryzhang/IdeaProjects/code/media-morph/1.webp"; // 输出GIF文件路径
    video2Webp(inputFile, outputFile);
}

while the error:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/terryzhang/IdeaProjects/code/media-morph/1.MP4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: isommp41mp42 creation_time : 2021-05-03T08:01:21.000000Z Duration: 00:00:04.84, start: 0.000000, bitrate: 1231 kb/s Stream #0:00x1: Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 960x544, 1175 kb/s, 29.14 fps, 29.97 tbr, 600 tbn (default) Metadata: creation_time : 2021-05-03T08:01:21.000000Z handler_name : Core Media Video vendor_id : [0][0][0][0] Stream #0:10x2: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 49 kb/s (default) Metadata: creation_time : 2021-05-03T08:01:21.000000Z handler_name : Core Media Audio vendor_id : [0][0][0][0] [webp @ 0x7fa083b9b0c0] Only exactly 1 stream is supported [aac @ 0x7fa082710c80] Qavg: nan org.bytedeco.javacv.FFmpegFrameRecorder$Exception: avformat_write_header error() error -22: Could not write header to '/Users/terryzhang/IdeaProjects/code/media-morph/1.webp' (For more details, make sure FFmpegLogCallback.set() has been called.) at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:969) at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:437) at com.xx.mediamorph.service.SnapService.video2Webp(SnapService.java:28) at com.xx.mediamorph.service.SnapService.main(SnapService.java:49)

Process finished with exit code 0

Contributor guide