使用 avconv 减少 mp4 的大小

使用 avconv 减少 mp4 的大小

我正在看这个问题

减小 MP4 的大小

我想使用 avconv 来实现,但是,我还想将帧大小缩小一半左右。我的问题是当我这样做时

avconv -i "$file" -s 640x480 -strict experimental "mp4/$file.mp4"

输出结果像素化严重,视频质量下降严重。我试图将视频文件转换为适合手持设备的小尺寸。基本上,我试图实现以下效果:

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings, CABAC                   : No
Format settings, ReFrames                : 4 frames
Format settings, GOP                     : M=2, N=48
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 21mn 31s
Bit rate mode                            : Variable
Maximum bit rate                         : 1 101 Kbps
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
Frame rate                               : 23.976 fps
Standard                                 : Component
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Default                                  : Yes
Forced                                   : No

看起来像这样

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 21mn 45s
Bit rate                                 : 218 Kbps
Width                                    : 624 pixels
Height                                   : 352 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 23.976 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.041
Stream size                              : 33.9 MiB (60%)
Writing library                          : x264 core 138 r2 9e941d1
Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=3 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00

问题:如何使用 avconv 降低比特率和帧大小?如果无法在 avconv 中完成,可以在 ffmpeg 中完成吗?上半部分的视频 ~= 200mb,下半部分的视频 ~=50mb,我希望以尽可能少的像素化获得 50mb。

答案1

请在每次寻求 avconv 帮助时附上其完整输出。否则,无论谁回复,都只能靠猜测。

在这种情况下,我的猜测是您的 avconv(或更准确地说是 libavcodec)未使用 libx264 编译,因此使用了内部 mpeg4 ASP 编码器(具有糟糕的默认值)。因此,解决方案是获取支持 libx264 的 libavcodec - 在 Ubuntu 上,您应该安装 libavcodec-extra-53,否则您可能需要自行编译。

答案2

我不知道 avconv,但无论如何你都应该将原始分辨率减半。鉴于你的原始分辨率是 1280x720,你应该使用 640x360。这样,编码器必须将 4 个像素精确调整为 1 个像素,而不是像你选择的分辨率那样调整为 4.52826734(合成)。这至少可以避免编码器没有可用的调整大小算法时出现问题。

相关内容