FFMpeg输出AAC

  在音频中,无论直播与点播,AAC都是目前最常用的一种音频编码格式,例如RTMP直播,HLS直播,RTSP直播,FLV直播,FLV点播,MP4点播等文件中都是常见的AAC音频。

  与MP3相比,AAC是一种编码效果更高,编码音质更好的音频编码格式,常见的使用AAC编码后的文件存储格式为m4a,如果在iphone或者m4a。FFMpeg可以组成AAC的三种编码器具体如下。

aac: FFmpeg本身的AAC编码实现

libaac: 第三方的AAC编码器

libfdk_aac: 第三方的AAC编码器

  后面两种编码器为非GPL协议,所以所有起来需要注意,在预编译时需要注意采用nonfree的支持,下面就来详细介绍三种编码器的使用方法。

FFMpeg中的AAC编码器使用

  FFmpeg中的AAC编码器在早期为实验版本,而从2015年12月5日起,FFMPEG中的AAC编码器已经可以正式开始使用,所以在使用AAC编码器之前,首先要确定自己的FFMpeg是什么时候发布的版本,如果是2015年12月5日前发布的版本,那么在编码时需要使用-strict experimental 或-strict-2参数来声明AAC为实验版本,下面列举几个使用FFmpeg中的AAC编码器的例子:

ffmpeg -i input.mp4 -c:a aac -b:a 160k output.aac

  根据这条命令可以看到,编码为AAC音频,码率为160kbit/s,编码生成的输出文件为output.aac文件:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    creation_time   : 2013-05-03T22:51:07.000000Z
  Duration: 00:00:46.61, start: 0.000000, bitrate: 3949 kb/s
  Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x400 [SAR 1:1 DAR 12:5], 3859 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      creation_time   : 2013-05-03T22:50:47.000000Z
      handler_name    : GPAC ISO Video Handler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 92 kb/s (default)
    Metadata:
      creation_time   : 2013-05-03T22:51:07.000000Z
      handler_name    : GPAC ISO Audio Handler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:1 -> #0:0 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, adts, to 'output.aac':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    encoder         : Lavf58.76.100
  Stream #0:0(und): Audio: aac (LC), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2013-05-03T22:51:07.000000Z
      handler_name    : GPAC ISO Audio Handler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.134.100 aac
size=     891kB time=00:00:46.59 bitrate= 156.7kbits/s speed=  74x    

   接下来在列举一个例子:

ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a

    从这条命令可以看出,在编码AAC时,同样也用到qscale参数,这个q在这里设置的有效范围为0.1~2之间,其用于设置AAC音频的VBR质量,效果并不可控,可以设置几个参数来看一下效果:

Input #0, wav, from 'input.wav':
   Duration: 00:04:13.10, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16 1411kb/s
Input #1, mov,mp3,m4a,4gp,3g2,mj2,from 'output_0.1.m4a':
  Metadata:
    encoded_by      : Lavf57.66.102
  Duration: 00:04.13.12, start: 0.000000, bitrate: 23 kb/s
    Stream #1:0(und): Audio: aac(LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp , 24kb/s (default)
Input #2, mov,mp3,m4a,4gp,3g2,mj2,from 'output_0.1.m4a':
  Metadata:
    encoded_by      : Lavf57.66.102
  Duration: 00:04.13.12, start: 0.000000, bitrate: 23 kb/s
    Stream #2:0(und): Audio: aac(LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp , 186kb/s (default)

    从以上代码可以看到一共有input文件,具体如下。

input#0为原始文件,码率为1411kbit/s

input#1为设置q:a为0.1的文件,码率为24kbit/s

input#2为设置q:a为2.0的文件,码率为186kbit/s

  可以使用-q:a设置AAC的输出质量,关于AAC的输出控制很简单,这里将介绍这么多。

FDK AAC第三方的AAC编解码Codec库

   FDK-AAC库是FFMpeg支持的第三方编码库中质量最高的AAC编码库,关于编码音质的好坏与使用方式同样有着一定的关系,下面就来介绍一下libfdk_aac的几种编码模式。

1.恒定码率(CBR)模式

  如果使用libfdk_aac设定一个恒定的码率,改变编码后的大小,并且可以兼容HE-AAC Profile,则可以根据音频设置的经验设置码率,例如如果一个声道使用64kbit/s,那么双声道为128kbit/s,环绕立体声为384kbit/s,这种通常为5.1环绕声。可以通过b:a参数进行设置。下面就来举几个例子:

ffmpeg -i iuput.wav -c:a libfdk_aac -b:a 128k output.m4a

  根据这条命令可以看出,FFmpeg使用libfdk_aac将input.wav转为恒定码率为128kbit/s 编码为AAC的output.m4a音频文件。

ffmpeg -i input.m4a -c:v copy -c:a libfdk_aac -b:a 384k output.mp4

    根据这条命令可以看出,FFmpeg将input.mp4的视频文件安装原有的编码方式进行输出封装,将音频以libfdk_aac进行编码,音频通道为环绕立体声,码率为384kbit/s,封装格式为output.mp。

    以上两个例子均为使用libfdk_aac进行AAC编码的案例,使用libfdk_aac可以编码AAC的恒定码率(CBR)。

2.动态码率(VBR)模式

   使用VBR可以有更好的音频质量,使用libfdk_aac进行VBR模式的编码的AAC编码时,可以设置5个级别。

   根据下面表的内容,第一列为VBR的类型,第二列为每通道编码后的码率,第三列中有三种AAC编码信息,具体如下。

  AAC编码基本参数

 LC:Low Complexity AAC ,这种编码相对来说体积比较大,质量稍差

HE:High-Efficiency AAC,这种编码相对来说体积小,质量好

HEv2: High-Efficiency AAC version2 ,这种编码相对来说体积小,质量优

  下面的表将列出LC,HE,Hev2的推荐参数。

   AAC编码LC,HE,HEv2推荐参数

  下面举个例子,将音频压缩为AAC编码的m4a容器:

ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a

 执行完上述命令之后,FFmpeg会将input.wav的音频转为编码为libfdk_aac的output.m4a音频文件。

3.高质量AAC设置

  根据前面的介绍,AAC音频分为三种LC,HE-AAC,HEv2-AAC,前为已经介绍过LC的编码设置,下面列举介绍HE-AAC与HEv2-AAC的设置。

  1.HE-AAC音频编码设置

ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a

  执行完上述命令行之后,编码后输出output.m4a的信息如下:

Output #0, ipod, to 'out.m4a':
  Metadata:
    encoded_by      : Logic Pro X
    date            : 2016-04-12
    coding_history  : 
    time_reference  : 158760000
    umid            : 0x00000000D0615BBB94340089A067295CFF7F0000F060130000000000000000000000000080C89C0401000000D0615BBB94340089905F295CFF7F0000EDAE8B8B
    encoder         : Lavf58.76.100
  Chapters:
    Chapter #0:0: start 0.000000, end 187.086621
      Metadata:
        title           : Tempo: 127.0
  Stream #0:0: Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp (24 bit), 64 kb/s

从以上代码可以看出,音频编码为HE-AAC,可见编码参数已通过-profile:a aac_he设置生效。

2. HEv2-AAC音频编码设置

  执行如下命令:

ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a

  编码后输出output.m4a信息如下:

Output #0, ipod, to 'output.m4a':
  Metadata:
    encoded_by      : Logic Pro X
    date            : 2016-04-12
    coding_history  : 
    time_reference  : 158760000
    umid            : 0x00000000D0615BBB94340089A067295CFF7F0000F060130000000000000000000000000080C89C0401000000D0615BBB94340089905F295CFF7F0000EDAE8B8B
    encoder         : Lavf58.76.100
  Chapters:
    Chapter #0:0: start 0.000000, end 187.086621
      Metadata:
        title           : Tempo: 127.0
  Stream #0:0: Audio: aac (HE-AACv2) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp (24 bit), 32 kb/s
    Metadata:
      encoder         : Lavc58.134.100 aac
size=     771kB time=00:03:07.08 bitrate=  33.8kbits/s speed= 151x    
video:0kB audio:739kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.453330%

4. AAC音频质量对比

   AAC_LC的音频编码可以采用libfaac,libfdk_aac,FFmpeg内置AAC三种,其质量顺序排列如下。

libfdk_aac音频编码质量最优

FFmpeg内置AAC编码次于libfdk_aac但优与libfaac

libfaac在ffmpeg内置AAC编码为实验品时是除了libfdk_aac之外的唯一选择

注意:在新版的FFmpeg中,libffack已经被删除

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值