使用 avconv 进行 2 次编码

Taz*_*zeg 5 video-conversion avconv

我不明白为什么多通道编码的视频质量比单通道差?

当我这样做时,它是正确的:

avconv -i video.mpg -s 640x360 -threads auto \
       -vcodec libxvid -b 800k -r 24 -g 300 -bf 2 \
       -acodec libmp3lame -ac 2 -ab 128k -ar 48000 \
       video.avi
Run Code Online (Sandbox Code Playgroud)

这是最糟糕的:

avconv -i video.mpg -s 640x360 -pass 1 -threads auto \
       -vcodec libxvid -b 800k -r 24 -f avi -an -y /dev/null
avconv -i video.mpg -s 640x360 -pass 2 -threads auto \
      -vcodec libxvid -b 800k -r 24 -g 300 -bf 2 \
      -acodec libmp3lame -ac 2 -ab 128k -ar 48000 \
      video.avi
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

evi*_*oup 5

如果您的质量越来越差,那可能是因为您错误地使用了 -b 标志。它过去仅指视频比特率,但随着最近的 ffmpeg/avconv 语法大修,它现在指的是整体比特率。所以第一遍告诉 avconv 它有 800kbit/s 可以播放视频,但第二遍告诉它有 (800-128)=672kbit/s 可以使用。

第一遍所做的是为第二遍创建一个路线图以供利用——这个地方是一个动作场景,它需要更高的比特率;这是一个缓慢的谈话,它需要的更少——那种事情。因为它使用的是不正确的信息,所以路线图是不正确的。

使用 -b:v 代替(和 -b:a 代替 -ab),如下所示:

avconv -y -i video.mpg -s 640x360 -pass 1 -threads auto -c:v libxvid -b:v 672k -r 24 -f avi -an /dev/null
avconv -i video.mpg -s 640x360 -pass 2 -threads auto -c:v libxvid -b:v 672k -r 24 -g 300 -bf 2 -c:a libmp3lame -ac 2 -b:a 128k -ar 48000 video.avi
Run Code Online (Sandbox Code Playgroud)

此外,许多这些选项可能是不必要的,因为 avconv 将使用与输入相同的选项。除非您要调整视频大小,否则请忽略该-s 640x360位。同样,除非您需要更改帧速率,-r 24否则请省略,除非您确实需要更改采样率,否则请省略-ar 48000. 显然,如果你知道你需要它们,就把它们留在里面。