ffmpeg:重新编码视频时出错

时间:2015-02-18 14:46:18

标签: ffmpeg

我正在尝试使用ffmpeg重新编码视频,我收到此错误:

[aac @ 0x3752e40] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.

命令和完整输出::

/root$ /usr/bin/ffmpeg -i http://website.com/uploads/usr_videos/MVI_05571.mp4  -b:v 500k  -threads 4 -vf scale=-1:144  -b:a 128k http://website.com/uploads/usr_videos/144p_output.mp4
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
built on Feb 18 2015 01:39:38 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-11)
configuration: 
libavutil      54. 15.100 / 54. 15.100
libavcodec     56. 13.100 / 56. 13.100
libavformat    56. 15.102 / 56. 15.102
libavdevice    56.  3.100 / 56.  3.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from     'http://website.com/uploads/usr_videos/MVI_05571.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2mp41
encoder         : Lavf54.63.104
Duration: 00:01:48.26, start: 0.023220, bitrate: 7122 kb/s
Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 6990 kb/s, 29 fps, 29 tbr, 14848 tbn, 29 tbc (default)
Metadata:
  handler_name    : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
  handler_name    : SoundHandler
[aac @ 0x3752e40] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.

所以任何人都可以告诉我这个错误意味着什么,我该如何解决呢? 我在centOS服务器上使用ffmpeg 2.5版。

3 个答案:

答案 0 :(得分:21)

快速解决方法是在最后一个参数(输出名称)之前添加选项-strict -2

FFmpeg可以使用几种不同的AAC编码器。为获得最佳质量,请使用libfdk_aac编码器。遗憾的是,libfdk_aac的许可证与GPL不兼容,这意味着GPL不允许分发从libx264(GPL)(用于H.264视频编码)和libfdk_aac(用于AAC音频编码)的可执行文件。然而,如果您自己构建FFmpeg,这可能是一个很好的选择。如果您的FFmpeg是使用libfdk_aac构建的,那么您可以在输出文件名之前使用选项-c:a libfdk_aac

FFmpeg还有一个实验性的内置AAC编码器,它在给定比特率下具有较低的质量,但具有兼容的许可证。由于它是实验性的,因此默认情况下不会使用它,但如果您在输出文件名之前包含选项-strict experimental-strict -2,则可以使用它,以启用实验性编解码器。

有关详细信息,请参阅FFmpeg AAC Encoding Guide

答案 1 :(得分:0)

如果您使用cmake以编程方式对流进行编码,则可以在aac中启用实验性功能,如下所示。

AVCodecContext

答案 2 :(得分:0)

自2015-12-05起,原生FFmpeg AAC编码器(-codec:a aac)不再具有实验性。使用当前git master分支的最新版本,您不必使用-strict选项。