Changes between Version 4 and Version 5 of Encode/VP9


Ignore:
Timestamp:
Jun 21, 2017, 4:04:19 PM (5 months ago)
Author:
slhck
Comment:

add new way to specify rate / quality

Legend:

Unmodified
Added
Removed
Modified
  • Encode/VP9

    v4 v5  
    11libvpx-vp9 is the VP9 video encoder for [http://www.webmproject.org/about/ WebM], an open, royalty-free media file format. This guide is an attempt to summarize the most important options for creating video with libvpx-vp9. 
    22 
    3 To install FFmpeg with support for libvpx-vp9, look at the [https://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide Compilation Guides] and compile FFmpeg with the {{{--enable-libvpx}}} option. 
     3To install FFmpeg with support for libvpx-vp9, look at the [https://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide Compilation Guides] and compile FFmpeg with the {{{--enable-libvpx}}} option. Note that for 10-bit encoding, you need to set the `--enable-vp9-highbitdepth` configuration option. 
    44 
    55Note that in the below examples, the libvorbis audio encoder is used. Make sure your FFmpeg version also includes libvorbis (check with {{{ffmpeg -codecs}}}), as the native Vorbis encoder from FFmpeg does not provide comparable quality. 
     
    77== Variable Bitrate ==#variableb 
    88 
    9 libvpx-vp9 offers a variable bitrate mode by default. In this mode, it will simply try to reach the specified bit rate on average, e.g. 1 MBit/s. This is the "target bitrate". 
     9libvpx-vp9 offers a variable bitrate (VBR) mode by default. In this mode, it will simply try to reach the specified bit rate on average, e.g. 2 MBit/s. This is the "target bitrate". 
    1010 
    1111{{{ 
    12 ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -c:a libvorbis output.webm 
     12ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M -c:a libvorbis output.webm 
    1313}}} 
    1414 
     
    1717=== Constant Quality ===#constantq 
    1818 
    19 In addition to the "default" VBR mode, there's a constant quality mode (like in the x264 encoder) that will ensure that every frame gets the number of bits it deserves to achieve a certain (perceptual) quality level, rather than forcing the stream to have an average bit rate. This results in better overall quality and should be your method of choice when you encode video with libvpx-vp9. 
     19In addition to the "default" VBR mode, there's a constant quality (CQ) mode (like in the x264 encoder) that will ensure that every frame gets the number of bits it deserves to achieve a certain (perceptual) quality level, rather than forcing the stream to have an average bit rate. This results in better overall quality and should be your method of choice when you encode video with libvpx-vp9. 
     20 
    2021To trigger this mode, you must use a combination of `-crf` and `-b:v` 0. `-b:v` '''MUST''' be 0.  
    2122 
    2223{{{ 
    23 ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 10 -b:v 0 -c:a libvorbis output.webm 
     24ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libvorbis output.webm 
    2425}}} 
    2526 
    26 The CRF value can be from 0–63. Lower values mean better quality.  
     27The CRF value can be from 0–63. Lower values mean better quality. Recommended values range from 15–35, with 31 being recommended for 1080p HD video. See [https://developers.google.com/media/vp9/settings/vod/ this guide] for more info. 
    2728 
    2829=== Constrained Quality ===#constrainedq 
    2930 
    30 libvpx-vp9 also has a constrained quality mode that will ensure that a constant (perceptual) quality is reached while keeping the bitrate below a specified upper bound. Useful for bulk encoding videos in a generally consistent fashion. 
     31libvpx-vp9 also has a constrained quality (CQ) mode that will ensure that a constant (perceptual) quality is reached while keeping the bitrate below a specified upper bound or within a certain bound. This method is useful for bulk encoding videos in a generally consistent fashion. 
    3132 
    3233{{{ 
    33 ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 10 -b:v 1000k -c:a libvorbis output.webm 
     34ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 2000k -c:a libvorbis output.webm 
    3435}}} 
    3536 
    3637The quality is determined by the `-crf`, and the bitrate limit by the `-b:v` where the bitrate '''MUST''' be non-zero. Note: for videos that are "easy" to encode this mode behaves exactly like the [#constantq Constant Quality] mode and actual bitrate may be lower than specified bitrate while for videos that are "hard" to encode the quality will be bounded by the maximum bitrate and will behave like the [#variableb Variable Bitrate] mode. 
    3738 
     39You can also specify a minimum and maximum bitrate instead of a quality target: 
     40 
     41{{{ 
     42ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 500k -b:v 2000k -maxrate 2500k -c:a libvorbis output.webm 
     43}}} 
     44 
    3845== Constant Bitrate == 
    3946 
    40 Like most other encoders, libvpx offers a constant bitrate encoding mode as well, which tries to encode the video in such a way that an average bitrate is reached. This doesn't mean that every frame is encoded with the same amount of bits (since it would harm quality), but the bitrate will be very constrained. You should use constant bitrate encoding if you need your video files to have a certain size, or if you're streaming the videos over a channel that only allows a certain bit rate. 
     47Like most other encoders, libvpx offers a constant bitrate (CBR) encoding mode as well, which tries to encode the video in such a way that an average bitrate is reached. This doesn't mean that every frame is encoded with the same amount of bits (since it would harm quality), but the bitrate will be very constrained. You should use constant bitrate encoding if you need your video files to have a certain size, or if you're streaming the videos over a channel that only allows a certain bit rate. 
    4148 
    4249The syntax for setting a constant bit rate is: