使用 avconv / ffmpeg 对视频进行下采样

使用 avconv / ffmpeg 对视频进行下采样

我对编码和使用 avconv / ffmpeg 知之甚少。我正在尝试按如下方式对视频进行下采样:

avconv -i blah_in.avi -s 640x360 -pass 1 blah.avi
avconv -i blah_in.avi -s 640x360 -pass 2 blah.avi

我知道这很简单,但我无法弄清楚问题出在哪里。这是来自第 1 遍的错误消息:

avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 12 2012 16:37:58 with gcc 4.6.3
[avi @ 0x9fdd240] non-interleaved AVI
Input #0, avi, from 'blah_in.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
  Duration: 01:21:59.24, start: 0.000000, bitrate: 8996 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
File 'blah.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x9fe1e00] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x9fdcfa0] w:1920 h:1080 fmt:yuv420p -> w:640 h:360 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x9fdc740] invalid bit rate
Output #0, avi, to 'blah.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
    Stream #0.0: Video: mpeg4, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=2-31, pass 1, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, stereo, flt, 200 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:1 -> #0:1 (mp3 -> ac3)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

我尝试了很多方法,但要么最终出现类似的错误消息,要么质量极差;并不是因为分辨率低,而是充满了压缩伪影。

现在,我想要实现的是与以下 avi 文件相同的分辨率/编码,该文件在我的孩子视频设备上播放良好:

Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 624x352 [PAR 1:1 DAR 39:22], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s

答案1

输出日志中的最后一行太笼统——您必须进一步查找。错误是这样的:

[ac3 @ 0x9fdc740] invalid bit rate

问题是由于某种原因 avconv 想要将 MP3 音频编码为 AC3。事实上,当您仅调整视频大小时,您可以保留音频比特流。


请注意,调整大小和重新编码会大大降低质量。所以,除非你真的需要,否则不要这样做。您的视频将会受到影响发电损失

如果可以,请避免使用 MPEG-4 Part 2 编解码器(Xvid 或 libavcodec-native mpeg4),而使用 MPEG-4 Part 10 / H.264 编解码器(例如 x264)。由于 AVI 容器不正确支持 H.264,因此我们将使用 MP4,大多数情况下,MP4 应该是您选择的容器,而不是 AVI。

ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4

这将复制音频流 ( ),使用以下命令-c:a copy将视频编码为 x264 ( )-c:v libx264稳定的品质共 23 ( -crf) 条。此处使用较低的值可以获得更好的质量(正常值范围为 18-28)。大小将随 改变-s:v

我在这里使用 FFmpeg 与 Libav 同义,因为语法应该是相同的。不过,我建议您放弃 Ubuntu 附带的默认 Libav 版本,从源代码编译 FFmpeg或使用最近的Linux 静态构建

答案2

指定的视频比特率非常低:200kpbs。试试这个命令

ffmpeg -i input_video -b 800 -s 640x360 -vcodec xvid -acodec copy output_video

按照评论中的建议如果设备支持264这将是一个更好的选择。

相关内容