ffmpeg 每帧请求的位太多
Posted
技术标签:
【中文标题】ffmpeg 每帧请求的位太多【英文标题】:ffmpeg Too many bits per frame requested 【发布时间】:2012-05-06 23:55:04 【问题描述】:我正在使用 ffmpeg 将视频转换为 mp4 格式。除 MOV 格式外,一切正常。
我对所有事情都使用的命令是:
ffmpeg -i input.mov -strict experimental -sameq -s vga -aspect 1.7777 -vcodec libx264 -preset fast -crf 22 -y output.mp4
但我不断得到的输出是:
ffmpeg version 0.9, Copyright (c) 2000-2011 the FFmpeg developers
built on Mar 12 2012 11:01:05 with gcc 4.4.5
configuration: --enable-libx264 --enable-gpl --disable-yasm
libavutil 51. 32. 0 / 51. 32. 0
libavcodec 53. 42. 0 / 53. 42. 0
libavformat 53. 24. 0 / 53. 24. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 53. 0 / 2. 53. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x21767a0] Referenced QT chapter track not found
Seems stream 0 codec frame rate differs from container frame rate: 30.00 (30/1) -> 30.07 (2225/74)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mov':
Metadata:
creation_time : 2009-04-04 07:12:29
comment : EASTMAN KODAK COMPANY KODAK Z1275 ZOOM DIGITAL CAMERA
comment-eng : EASTMAN KODAK COMPANY KODAK Z1275 ZOOM DIGITAL CAMERA
Duration: 00:00:17.76, start: 0.000000, bitrate: 8100 kb/s
Stream #0:0(eng): Video: mpeg4 (Advanced Simple Profile) (mp4v / 0x7634706D), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 7968 kb/s, 30.07 fps, 30.07 tbr, 8544k tbn, 30 tbc
Metadata:
creation_time : 2009-04-04 07:12:29
handler_name :
Stream #0:1(eng): Audio: pcm_mulaw (ulaw / 0x77616C75), 16000 Hz, 1 channels, s16, 128 kb/s
Metadata:
creation_time : 2009-04-04 07:12:29
handler_name :
[buffer @ 0x2187f00] w:1280 h:720 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[scale @ 0x219c120] w:1280 h:720 fmt:yuv420p -> w:640 h:480 fmt:yuv420p flags:0x4
[libx264 @ 0x2190d20] using SAR=4/3
[libx264 @ 0x2190d20] using cpu capabilities: none!
[libx264 @ 0x2190d20] profile High, level 3.0
[libx264 @ 0x2190d20] 264 - core 120 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=2 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=6 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=12 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=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=30 rc=crf mbtree=1 crf=22.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[aac @ 0x21917e0] Too many bits per frame requested
Output #0, mp4, to 'output.mp4':
Metadata:
creation_time : 2009-04-04 07:12:29
comment : EASTMAN KODAK COMPANY KODAK Z1275 ZOOM DIGITAL CAMERA
comment-eng : EASTMAN KODAK COMPANY KODAK Z1275 ZOOM DIGITAL CAMERA
Stream #0:0(eng): Video: h264, yuv420p, 640x480 [SAR 4:3 DAR 16:9], q=-1--1, 90k tbn, 30.07 tbc
Metadata:
creation_time : 2009-04-04 07:12:29
handler_name :
Stream #0:1(eng): Audio: aac, 16000 Hz, 1 channels, s16, 128 kb/s
Metadata:
creation_time : 2009-04-04 07:12:29
handler_name :
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 -> libx264)
Stream #0:1 -> #0:1 (pcm_mulaw -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
似乎问题在于每帧的音频位。 哪个可能是正确的解决方案?
【问题讨论】:
【参考方案1】:“Too many bits per frame requested
”错误来自本机 FFmpeg AAC 编码器 (-c:a aac
)。您可以使用以下一种或多种解决方案:
更新您的ffmpeg
开发非常活跃,原生 FFmpeg AAC 编码器有很多改进; 它现在会自动限制到每帧的最大位数,而不是因为这个错误而失败。请参阅FFmpeg Download 页面以获取指向已编译二进制文件的链接,这是获取最新ffmpeg
的最简单方法。
如果你被一个旧的、过时的、古老的ffmpeg
卡住了:
提高音频采样率,例如添加-ar 44100
。
降低比特率。默认可能是-b:a 128k
。尝试较低的值,直到它起作用。
使用 -c:a copy
到 stream copy(重新复用)音频,并且由于 MP4 不支持 pcm_mulaw
,因此使用不同的输出容器格式,例如 Matroska (.mkv
)。
如果您的 ffmpeg
支持,请使用其他 AAC 编码器,例如 libfdk_aac
。
如果您升级ffmpeg
,则无需执行任何这些选项。
【讨论】:
@LordNeckbeard 可以FFmpeg
在android 中使用硬件进行视频压缩吗?
@kishorejethava 我不知道你的问题与上面的答案有什么关系,但请参阅FFmpeg Wiki: Hardware Acceleration Intro;特别是 MediaCodec 的东西。
@LordNeckbeard 我正在将视频裁剪成正方形,但在最小分辨率 (320 * 240) 和当我增加此分辨率 (640 * 480) 或更多,种植时间也增加。我的目标是如何减少高分辨率视频的时间。
@kishorejethava 您应该将此作为一个新问题提出。这与Too many bits per frame requested
无关。【参考方案2】:
我希望 ffmpeg 比这更聪明,但您可以尝试为您的 -s
和 -aspect
选项指定视频流:-s:v
和 -aspect:v
。
或者,由于您没有对音频做任何特殊处理,您可以使用-c:a copy
明确复制它。
【讨论】:
感谢两位的回答,但使用-c:a copy
时出现另一个错误:[mp4 @ 0x273d220] track 1: could not find tag, codec not currently supported in container
。我尝试使用-acodec libfaac -ar 48000
,现在它似乎可以正常工作了。
pcm_mulaw, 16000 Hz, 1 channels
在 MP4 容器中必须不支持,因此您必须重新编码(如您所述),或者使用必须使用另一个容器,例如 MKV。
-c:a copy
为我工作了不同的转换,但同样的错误。很好的收获。以上是关于ffmpeg 每帧请求的位太多的主要内容,如果未能解决你的问题,请参考以下文章