我正在看这个问题
我想使用 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(合成)。这至少可以避免编码器没有可用的调整大小算法时出现问题。