为什么一个 ffmpeg webm 破折号流比其他的大得多?

Why is one ffmpeg webm dash stream much larger than the others?

整个夏天,我致力于编写一个脚本,该脚本采用 x264 video/mp3 流并将其分解为不同的流,以便它可以通过 MSE-DASH 工作。 (主要基于 webmproject.org website 上的说明)那些相同的脚本已停止工作,将一个 6GB 的视频变成几个 25Gb 的视频。我跟上了 ffmpeg 的更新,所以我不知道它什么时候停止工作,但我猜这是由于他们的 DASH Webm 实现的更新方式。

我发现了一种效果更好的新方法,但一个流仍然存在重大问题。我希望有人能解释这种编码是如何工作的,以便我能理解根本原因。

#!/bin/bash
COMMON_OPTS="-map 0:0 -an -threads 11 -cpu-used 4 -cmp chroma"
WEBM_OPTS="-f webm -c:v vp9 -keyint_min 50 -g 50 -dash 1"

ffmpeg -i  -vn -acodec libvorbis -ab 128k audio.webm &
ffmpeg -i  $COMMON_OPTS $WEBM_OPTS -b:v 500k -vf scale=1280:720 -y vid-500k.webm &
ffmpeg -i  $COMMON_OPTS $WEBM_OPTS -b:v 700k -vf scale=1280:720 -y vid-700k.webm & 
ffmpeg -i  $COMMON_OPTS $WEBM_OPTS -b:v 1000k -vf scale=1280:720 -y vid-1000k.webm &
ffmpeg -i  $COMMON_OPTS $WEBM_OPTS -b:v 1500k -vf scale=1280:720 -y vid-1500k.webm  

转码尚未完成,但您可以看到转码的方向:

-rw-r--r--  1 user  staff    87M Jan  4 23:27 audio.webm
-rw-r--r--  1 user  staff    27M Jan  4 23:42 vid-1000k.webm
-rw-r--r--  1 user  staff   285M Jan  4 23:42 vid-1500k.webm
-rw-r--r--  1 user  staff    15M Jan  4 23:42 vid-500k.webm
-rw-r--r--  1 user  staff    20M Jan  4 23:42 vid-700k.webm

1500k 变体比其他流大得不成比例。

另一个问题是,当我使用较短的视频时,比如说八九分钟,上面的配置按预期运行,一切都很完美。我不知道这个限制在哪里,因为每次测试都需要大量的处理能力和时间,但如果它少于十分钟,它就可以工作,如果它超过一个小时,它会产生大量文件。

如果您想将视频比特率限制在某个值,仅使用 -b:v 是不够的。根据来源(高运动、场景复杂性)实际比特率会更高。

您还需要指定 -maxrate-bufsize

即。要获得限制在 1500k 左右的可变比特率 (VBR) 视频 - 峰值可能更高,具体取决于 VBV 的大小 - 您可以使用:

-b:v 1500k -maxrate 1500k -bufsize 1500k

对于恒定比特率 (CBR),单帧 VBV 可获得最佳结果。 25fps (1500 / 25 = 60) 的示例:

-b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 60k