我正在尝试使用 ffmpeg 将 h264/aac 视频文件转换为 xvid/mp3 文件,以便可以在超便宜的媒体播放器中播放它。
目前,转换后的视频文件大小是原始 mp4 的两倍。有没有办法在不损失太多质量的情况下减小文件大小?即使降到 -qmin 1 也很糟糕!
我使用的命令是
ffmpeg -i input.mp4 -vcodec libxvid -sameq -acodec libmp3lame -ab 128k -ac 2 output.avi
ffmpeg 输出是
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4'
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
Duration: 01:34:27.69, start: 0.000000, bitrate: 1520 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1387 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 128 kb/s
Output #0, avi, to 'output.avi':
Metadata:
ISFT : Lavf52.64.2
Stream #0.0(und): Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream #0.1(und): Audio: libmp3lame, 48000 Hz, stereo, s16, 128 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
答案1
根据媒体播放器的处理能力,您可以减小帧大小,例如,如果起始分辨率为 1280x720,则减小到 640x360。这样,您就可以将视频比特率降低 3/4 而不会改变质量,而且较小的视频播放器无论如何只能显示 640 像素宽。
答案2
正如之前评论中所说,h.264 是一种比 xvid 更好的(压缩效果更好)编解码器,因此在其他所有条件相同(质量、帧大小、帧速率等)的情况下,xvid 始终会生成更大的文件。xvid 的优点是它比 h.264 更不占用大量 CPU 资源,这就是廉价媒体播放器可以使用它的原因。
举个例子,原始 xbox 上的 XBMC(其 CPU 属于 PIII 架构,运行频率为 733 MHz)可以强制播放 720p HD 内容,但前提是编解码器足够轻量且带有非常具体的标志。这通常是 xvid,因为即使在 SD 分辨率下,h.264 通常对于可怜的旧 PIII 来说也太多了。在 SD 分辨率下,典型的可接受的 Q 45 分钟电视节目重约 350 Mb,但在 h.264 中大约只有这个数字的一半。
最好的选择是,将视频重新编码为与设备相同的分辨率(但保持质量),这样您就不会在图像上浪费任何带宽,因为图像在播放时只会缩小尺寸。 - 将任何方向的分辨率减半(比如上面提到的 1280x720 -> 640x360)会将所需带宽(和生成的文件大小)减少到 1/4。