将 -ar 设置为选项时,Ffmpeg 无法正确编码

Posted

技术标签:

【中文标题】将 -ar 设置为选项时,Ffmpeg 无法正确编码【英文标题】:Ffmpeg fails to encode properly when setting -ar as an option 【发布时间】:2011-07-06 05:30:58 【问题描述】:

我正在尝试使用 Ffmpeg 对多个视频进行编码。 我扔给它的每个视频都正确编码,除了 4 个,在这个阶段,我们已经对 170 多个视频进行了编码,没有任何问题。

由于 4 个视频在音轨中没有音频频率(或者没有设置),我已经设法解决它失败了。

例如,这是我检查“好”视频时得到的输出 -

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'good_video.mov':
Metadata:
major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  
Duration: 00:01:57.14, start: 0.000000, bitrate: 2017 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x720, 1705 kb/s, 25 fps, 25 tbr, 2500 tbn, 5k tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 308 kb/s
Stream #0.2(eng): Data: tmcd / 0x64636D74`

这是我检查“坏”视频时得到的输出 -

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bad_video.mov':
Metadata:
major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  
Duration: 00:02:57.26, start: 0.000000, bitrate: 3006 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x720, 2902 kb/s, 25 fps, 25 tbr, 2500 tbn, 5k tbc
Stream #0.1(eng): Audio: aac, stereo, s16, 99 kb/s
Stream #0.2(eng): Data: tmcd / 0x64636D74

如您所见,“坏”视频没有针对它的音频频率。这似乎导致了我的问题。 如果我尝试对“坏”视频进行编码,我会收到以下错误 -

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bad_video.mov':
Metadata:
major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  
Duration: 00:02:57.26, start: 0.000000, bitrate: 3006 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x720, 2902 kb/s, 25 fps, 25 tbr, 2500 tbn, 5k tbc
Stream #0.1(eng): Audio: aac, stereo, s16, 99 kb/s
Stream #0.2(eng): Data: tmcd / 0x64636D74
[libx264 @ 0x10180d400]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x10180d400]profile Constrained Baseline, level 3.1
[libx264 @ 0x10180d400]264 - core 114 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=0 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=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 constrained_intra=0 bframes=0 weightp=0 keyint=30 keyint_min=16 scenecut=40 intra_refresh=0 rc_lookahead=30 rc=abr mbtree=1 bitrate=1500 ratetol=2.7 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 ip_ratio=1.41 aq=1:1.00
[libfaac @ 0x10180da00]libfaac doesn't support this output format!
Output #0, mp4, to 'bad_video_encoded.mp4':
Stream #0.0(eng): Video: libx264, yuv420p, 1280x720, q=10-51, 1500 kb/s, 90k tbn, 25 tbc
Stream #0.1(eng): Audio: libfaac, stereo, s16, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Error while opening encoder for output stream #0.1 - maybe incorrect parameters such as bit_rate, rate, width or height

我正在尝试使用以下命令进行编码 -

ffmpeg -i bad_video.mov -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 -y bad_video_encoded.mp4

我也试过 -

ffmpeg -i bad_video.mov -b 1500k -vcodec libx264 -vpre slow -vpre baseline -acodec libfaac -ar 44100 -g 30 -y bad_video_encoded.mp4

但这会丢弃所有帧,只对音频进行编码。 所有视频均来自同一来源。

我们哪里出错了?

谢谢。

【问题讨论】:

【参考方案1】:

我不知道为什么 Ffmpeg 会遇到这个问题,但是通过使用它我知道它很古怪。看起来不良视频中缺少一些元数据。我建议在文件上运行FLVMDI,这将添加必要的元数据,然后在其上重新运行 Ffmpeg。这一步在某些情况下对我有帮助。

【讨论】:

以上是关于将 -ar 设置为选项时,Ffmpeg 无法正确编码的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 ffmpeg 从视频中提取音频时,出现错误

将视频转换为 H264 时出现无法识别的选项“c:v”ffmpeg 错误

FFmpeg视频编解码库,无法解析的外部信号

FFmpeg视频编解码库,无法解析的外部信号

FFmpeg视频编解码库,无法解析的外部符号找不到inttypes.h文件的问题

ffmpeg用于将视频编码为H264编解码器格式