FFmpeg 生成空文件

FFmpeg 生成空文件

我在 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 编码的更多解释请参阅以下答案:

相关内容