ffmpeg:每帧请求的位数过多

时间:2015-05-04 10:22:17

标签: ffmpeg html5-video h.264

当我尝试使用ffmpeg转换为mp4时,有时会出现问题。我遇到问题Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

这是命令:

 ffmpeg -y -i input.mp4 -i watermark.png -filter_complex 'scale=-2:360,overlay=(main_w-overlay_w)-20:(main_h-overlay_h)-20' -codec:v libx264 -profile:v main -preset slow -b:v 300k -maxrate 300k -bufsize 600k -threads 0 -codec:a aac -strict experimental -b:a 128k -crf 20 output.mp4 1> output.log 2>&1

这里是错误日志:

ffmpeg version 2.4.3 Copyright (c) 2000-2014 the FFmpeg developers
      built on Nov 16 2014 22:36:57 with gcc 4.8.2 (GCC)
      configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/man --docdir=/usr/doc/ffmpeg-2.4.3 --enable-gpl --enable-version3 --enable-avfilter --enable-avresample --enable-libass --enable-libdc1394 --enable-libgsm --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-postproc --enable-runtime-cpudetect --enable-vaapi --enable-vdpau --enable-memalign-hack --enable-pthreads --enable-x11grab --enable-bzlib --enable-zlib --enable-shared --enable-static --disable-debug --arch=x86_64 --enable-pic --extra-cflags='-I/tmp/build/tmp-ffmpeg/ffmpegdeps/usr/include -DRUNTIME_CPUDETECT' --extra-ldflags='-L/tmp/build/tmp-ffmpeg/ffmpegdeps/usr/lib64 -ldl -lssl -lcrypto -lz -lusb' --pkg-config-flags=--static
      libavutil      54.  7.100 / 54.  7.100
      libavcodec     56.  1.100 / 56.  1.100
      libavformat    56.  4.101 / 56.  4.101
      libavdevice    56.  0.100 / 56.  0.100
      libavfilter     5.  1.100 /  5.  1.100
      libavresample   2.  1.  0 /  2.  1.  0
      libswscale      3.  0.100 /  3.  0.100
      libswresample   1.  1.100 /  1.  1.100
      libpostproc    53.  0.100 / 53.  0.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf56.15.102
      Duration: 00:00:06.76, start: 0.000000, bitrate: 1856 kb/s
        Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x480, 1804 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 54 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
    Input #1, png_pipe, from 'watermark.png':
      Duration: N/A, bitrate: N/A
        Stream #1:0: Video: png, rgba, 120x35, 25 tbr, 25 tbn, 25 tbc
    [libx264 @ 0x2179d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
    [libx264 @ 0x2179d80] profile Main, level 3.0
    [libx264 @ 0x2179d80] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 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=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=300 vbv_bufsize=600 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
    [aac @ 0x217ba40] Too many bits per frame requested
    Output #0, mp4, to 'output.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf56.15.102
        Stream #0:0: Video: h264 (libx264), yuv420p, 540x360, q=-1--1, 300 kb/s, 30 fps, 30 tbn, 30 tbc (default)
        Metadata:
          encoder         : Lavc56.1.100 libx264
        Stream #0:1(eng): Audio: aac, 0 channels, 128 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          encoder         : Lavc56.1.100 aac
    Stream mapping:
      Stream #0:0 (h264) -> scale (graph 0)
      Stream #1:0 (png) -> overlay:overlay (graph 0)
      overlay (graph 0) -> Stream #0:0 (libx264)
      Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

2 个答案:

答案 0 :(得分:1)

相关讯息:

[aac @ 0x217ba40] Too many bits per frame requested
[…]
Error while opening encoder for output stream #0:1

这来自名为“aac”的原生FFmpeg AAC编码器。你的选择:

  • Stream copy输入AAC音频而不是重新编码(-c:a copy)。
  • 使用其他AAC编码器。这需要重新编译ffmpeg,因为您的构建似乎只支持本机FFmpeg AAC编码器。
  • 使用较低的音频比特率(-b:a)。
  • 使用更高的音频费率(-ar)。

其他说明

  • -b:v-crf是互斥的:您应该只选择一个。在您的情况下,-b:v被忽略。

  • -threads 0是此编码器的默认值,这意味着x264将自动选择适当数量的线程,因此您可以删除此选项。

  • 如果目标播放器或设备不支持编码器自动选择的任何配置文件,则只需设置H.264配置文件(-profile:v)。

  • FFmpeg 2.4.3被认为是旧的。如果可能,建议一般用户使用当前git master中的ffmpeg(意味着使用最新代码中的构建)。 Downloading a static build是一种简单的方法。

  • Stack Overflow仅用于编程问题。如果您有其他ffmpeg cli使用问题,则应在超级用户处询问。

答案 1 :(得分:0)

您的AAC音频流#0:1似乎存在问题。它在控制台输出中显示 0个通道

尝试将-analyzeduration-probesize添加到您的命令中以增加分析时间并查看它是否检测到它们或完全丢弃音频流/检查源文件的完整性。

  

探测整数(输入)

     

设置探测大小(以字节为单位),即大小   要分析的数据以获取流信息。价值会更高   能够检测更多信息,以防它分散到   流,但会增加延迟。必须是不小于的整数   32.默认情况下为5000000。

     

analyzeuration integer(输入)

     

指定多少微秒   分析探究输入。较高的值可以检测更多   准确的信息,但会增加延迟。它默认为   5,000,000微秒= 5秒。