encodingffmpegwebm

FFmpeg WebM AV1 Support


With FFmpeg how can I use AV1 codec in a webm container?

I get the error:

Only VP8 or VP9 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --

However Wikipedia says WebM supports AV1.

https://en.wikipedia.org/wiki/AV1

AV1 is intended to be able to be used together with the audio format Opus in a future version of the WebM container format for HTML5 web video

Or can FFmpeg simply not encode this new version?


My settings:

ffmpeg -y 

-i "C:\Users\Matt\video.mp4" 

-c:v libaom-av1 -strict experimental 
-cpu-used 1 -crf 28 
-pix_fmt yuv420p 
-map 0:v:0? -map_chapters -1 
-sn 

-c:a libopus 
-map 0:a:0? 

-map_metadata 0 

-f webm 

-threads 0 

"C:\Users\Matt\video.webm"

Solution

  • ffmpeg currently doesn't support muxing AV1 in WebM. The error you're getting comes from this code:

    if (mkv->mode == MODE_WEBM && !(par->codec_id == AV_CODEC_ID_VP8 ||
                                    par->codec_id == AV_CODEC_ID_VP9 ||
                                    par->codec_id == AV_CODEC_ID_OPUS ||
                                    par->codec_id == AV_CODEC_ID_VORBIS ||
                                    par->codec_id == AV_CODEC_ID_WEBVTT)) {
        av_log(s, AV_LOG_ERROR,
               "Only VP8 or VP9 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.\n");
        return AVERROR(EINVAL);
    }
    

    Note the lack of AV_CODEC_ID_AV1 in the expression.

    This isn't too surprising, though. AV1 in Matroska (and therefore WebM) hasn't been finalized yet. If you want to follow progress on AV1 in Matroska (and WebM), follow the discussion here on the IETF CELLAR mailing list.