我在 OSX Lion 上使用 ffmpeg 时遇到了问题。我尝试转换 mpeg 文件,但输出的文件大小始终为 400kb 左右。
命令是:
ffmpeg -i out_poem_big.mpg -s 1280x720 -vpre medium outvideo.mp4
以下是日志:
FFmpeg version 0.6.3, Copyright (c) 2000-2010 the FFmpeg developers
built on Feb 21 2012 21:57:04 with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)
configuration: --disable-debug --prefix=/usr/local/Cellar/ffmpeg/0.6.3 --enable-shared --enable-pthreads --enable-nonfree --enable-gpl --disable-indev=jack --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libfaad
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
Seems stream 0 codec frame rate differs from container frame rate: 59.94 (60000/1001) -> 29.97 (60000/2002)
Input #0, mpeg, from 'out_poem_big.mpg':
Duration: 00:08:35.61, start: 1.000000, bitrate: 14823 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 104857 kb/s, 28.90 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, 2 channels, s16, 128 kb/s
File 'outvideo.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x7fb7ca033600]using SAR=1/1
[libx264 @ 0x7fb7ca033600]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fb7ca033600]profile High, level 3.1
[libx264 @ 0x7fb7ca033600]264 - core 120 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: 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=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=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=200 ratetol=20.0 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 ip_ratio=1.41 aq=1:1.00
Output #0, mp4, to 'outvideo.mp4':
Metadata:
encoder : Lavf52.64.2
Stream #0.0: Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=10-51, 200 kb/s, 60k tbn, 29.97 tbc
Stream #0.1: Audio: libfaac, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
Input Stream #0.0 frame size changed to 1920x1080, yuv420p
我尝试了各种 vcodec,但输出最多是一样的,也尝试了 -sameq,但没有成功。
ffmpeg 通过 homebrew 安装
答案1
我想指出几点:
升级您的 FFmpeg 版本。它已经过时了。运行
brew update
然后brew upgrade
执行此操作。FFmpeg 0.9 引入了一种指定编码预设的新方法,而您当前使用的只是旧方法。永远不要使用
sameq
。它并不代表品质相同。它的基本意思是,使用与输入视频相同的数学选项,实际上急剧地降低质量。
你的问题出在哪里……
让我们来谈谈手头的问题。输出视频的比特率约为 200 kBit/s,但输入的比特率为 14823 kBit/s。这就是它看起来如此糟糕的原因。现在取决于你想做什么。如果你只是想将容器更改为 MP4,那就使用-vcodec copy
它吧。
如果要更改框架大小,请使用以下命令:
ffmpeg -i out_poem_big.mpg -c:v libx264 -preset slow -crf 22 -s 1280x720 -c:a libfaac -b:a 128K outvideo.mp4
这意味着什么?
这里最重要的方面是
-crf 22
恒定速率因子。 将其降低可提高质量,将其增大可降低质量。 请参阅这个答案是为了更彻底的解释它的含义。例如,如果您需要恒定的输出比特率,请将其替换
-crf 22
为-b:v 1M
。但请注意,由于 x264 的处理方式,恒定比特率会导致质量较差。-c:v
用来代替-vcodec
。 意思是一样的,但这是默认格式,我更愿意坚持使用这种格式。 此外,我们明确希望,libx264
因为所有其他编码器都可能降低文件大小的质量(如 MPEG-4 Part II,-c:v mpeg4
)。-preset slow
将使用具有更多位效率优化的慢速编码变体。我指定了音频编解码器和音频比特率。根据您想要使用的内容进行相应更改。
有关 FFmpeg 编码的更多解释请参阅以下答案: