gstreamer 中 vp8enc 的实时视频可以使用哪些设置?

What settings can be used for live video for vp8enc in gstreamer?

我正在研究使用此元素对实时视频进行编码,在大多数情况下,输入视频相对简单时,效果很好。然而,对于我们的一些场景,编码器落后了。 (特别是我们有一个测试场景,里面有一群鸟,使编码器适合。)

查看输出,我相信这是因为该元素似乎没有针对复杂场景调整 QP。不过,我没有看到 "live" 视频的具体调整。有人有什么建议吗?

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "vp8enc0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  end-usage           : Rate control mode
                        flags: readable, writable
                        Enum "GstVPXEncEndUsage" Default: 0, "vbr"
                           (0): vbr              - Variable Bit Rate (VBR) mode
                           (1): cbr              - Constant Bit Rate (CBR) mode
                           (2): cq               - Constant Quality Mode (CQ) mode
  target-bitrate      : Target bitrate (in bits/sec)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 256000 
  min-quantizer       : Minimum Quantizer (best)
                        flags: readable, writable
                        Integer. Range: 0 - 63 Default: 4 
  max-quantizer       : Maximum Quantizer (worst)
                        flags: readable, writable
                        Integer. Range: 0 - 63 Default: 63 
  dropframe-threshold : Temporal resampling threshold (buf %)
                        flags: readable, writable
                        Integer. Range: 0 - 100 Default: 0 
  resize-allowed      : Allow spatial resampling
                        flags: readable, writable
                        Boolean. Default: false
  resize-up-threshold : Upscale threshold (buf %)
                        flags: readable, writable
                        Integer. Range: 0 - 100 Default: 60 
  resize-down-threshold: Downscale threshold (buf %)
                        flags: readable, writable
                        Integer. Range: 0 - 100 Default: 30 
  undershoot          : Datarate undershoot (min) target (%)
                        flags: readable, writable
                        Integer. Range: 0 - 1000 Default: 100 
  overshoot           : Datarate overshoot (max) target (%)
                        flags: readable, writable
                        Integer. Range: 0 - 1000 Default: 100 
  buffer-size         : Client buffer size (ms)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 6000 
  buffer-initial-size : Initial client buffer size (ms)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 4000 
  buffer-optimal-size : Optimal client buffer size (ms)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 5000 
  twopass-vbr-bias    : CBR/VBR bias (0=CBR, 100=VBR)
                        flags: readable, writable
                        Integer. Range: 0 - 100 Default: 50 
  twopass-vbr-minsection: GOP minimum bitrate (% target)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 0 
  twopass-vbr-maxsection: GOP maximum bitrate (% target)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 400 
  keyframe-mode       : Keyframe placement
                        flags: readable, writable
                        Enum "GstVPXEncKfMode" Default: 1, "auto"
                           (1): auto             - Determine optimal placement automatically
                           (0): disabled         - Don't automatically place keyframes
  keyframe-max-dist   : Maximum distance between keyframes (number of frames)
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 128 
  temporal-scalability-number-layers: Number of coding layers to use
                        flags: readable, writable
                        Integer. Range: 1 - 5 Default: 1 
  temporal-scalability-target-bitrate: Target bitrates for coding layers (one per layer, decreasing)
                        flags: readable, writable
                        Array of GValues of type "gint"
  temporal-scalability-rate-decimator: Rate decimation factors for each layer
                        flags: readable, writable
                        Array of GValues of type "gint"
  temporal-scalability-periodicity: Length of sequence that defines layer membership periodicity
                        flags: readable, writable
                        Integer. Range: 0 - 16 Default: 0 
  temporal-scalability-layer-id: Sequence defining coding layer membership
                        flags: readable, writable
                        Array of GValues of type "gint"
  multipass-mode      : Multipass encode mode
                        flags: readable, writable
                        Enum "GstVPXEncMultipassMode" Default: 0, "one-pass"
                           (0): one-pass         - One pass encoding (default)
                           (1): first-pass       - First pass of multipass encoding
                           (2): last-pass        - Last pass of multipass encoding
  multipass-cache-file: Multipass cache file. If stream caps reinited, multiple files will be created: file, file.1, file.2, ... and so on.
                        flags: readable, writable
                        String. Default: "multipass.cache"
  error-resilient     : Error resilience flags
                        flags: readable, writable
                        Flags "GstVPXEncErFlags" Default: 0x00000000, "(none)"
                           (0x00000001): default          - Default error resilience
                           (0x00000002): partitions       - Allow partitions to be decoded independently
  lag-in-frames       : Maximum number of frames to lag
                        flags: readable, writable
                        Integer. Range: 0 - 25 Default: 0 
  threads             : Number of threads to use
                        flags: readable, writable
                        Integer. Range: 0 - 64 Default: 0 
  deadline            : Deadline per frame (usec, 0=disabled)
                        flags: readable, writable
                        Integer64. Range: 0 - 9223372036854775807 Default: 0 
  horizontal-scaling-mode: Horizontal scaling mode
                        flags: readable, writable
                        Enum "GstVPXEncScalingMode" Default: 0, "normal"
                           (0): normal           - Normal
                           (1): 4:5              - 4:5
                           (2): 3:5              - 3:5
                           (3): 1:2              - 1:2
  vertical-scaling-mode: Vertical scaling mode
                        flags: readable, writable
                        Enum "GstVPXEncScalingMode" Default: 0, "normal"
                           (0): normal           - Normal
                           (1): 4:5              - 4:5
                           (2): 3:5              - 3:5
                           (3): 1:2              - 1:2
  cpu-used            : CPU used
                        flags: readable, writable
                        Integer. Range: -16 - 16 Default: 0 
  auto-alt-ref        : Automatically generate AltRef frames
                        flags: readable, writable
                        Boolean. Default: false
  noise-sensitivity   : Noise sensisivity (frames to blur)
                        flags: readable, writable
                        Integer. Range: 0 - 6 Default: 0 
  sharpness           : Filter sharpness
                        flags: readable, writable
                        Integer. Range: 0 - 7 Default: 0 
  static-threshold    : Motion detection threshold
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 0 
  token-partitions    : Number of token partitions
                        flags: readable, writable
                        Enum "GstVPXEncTokenPartitions" Default: 0, "1"
                           (0): 1                - One token partition
                           (1): 2                - Two token partitions
                           (2): 4                - Four token partitions
                           (3): 8                - Eight token partitions
  arnr-maxframes      : AltRef maximum number of frames
                        flags: readable, writable
                        Integer. Range: 0 - 15 Default: 0 
  arnr-strength       : AltRef strength
                        flags: readable, writable
                        Integer. Range: 0 - 6 Default: 3 
  arnr-type           : AltRef type
                        flags: readable, writable, deprecated
                        Integer. Range: 1 - 3 Default: 3 
  tuning              : Tuning
                        flags: readable, writable
                        Enum "GstVPXEncTuning" Default: 0, "psnr"
                           (0): psnr             - Tune for PSNR
                           (1): ssim             - Tune for SSIM
  cq-level            : Constrained quality level
                        flags: readable, writable
                        Integer. Range: 0 - 63 Default: 10 
  max-intra-bitrate   : Maximum Intra frame bitrate
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 0 
  timebase            : Fraction of one second that is the shortest interframe time - normally left as zero which will default to the framerate
                        flags: readable, writable
                        Fraction. Range: 0/1 - 2147483647/1 Default: 0/1 

这是我使用网络摄像头和 JACK 作为音频源的设置:

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=YUY2, width=$WIDTH, height=$HEIGHT, framerate=$FRAMERATE/1  \
        ! queue ! videoconvert \
        ! queue ! vp8enc threads=4 deadline=2 \
        ! queue ! muxout. \
        jackaudiosrc connect=1 ! audio/x-raw, format=F32LE, channels=1 \
        ! queue ! audiocheblimit mode=high-pass cutoff=120 poles=4 \
        ! queue ! audiodynamic characteristics=soft-knee mode=compressor threshold=0.16 ratio=0.15 \
        ! queue ! rgvolume pre-amp=6.0 headroom=1.0 \
        ! queue ! rglimiter \
        ! queue ! audioconvert \
        ! queue ! opusenc bitrate=96000 \
        ! queue ! muxout. \
        webmmux streamable=true name=muxout \
        ! queue ! tcpserversink host=127.0.0.1 port=9000 blocksize=65536 sync-method=1 \
        > /dev/null