从fdk_aac编码器到自动静态编译FFmpeg

前言

最近在公司作一些视频处理的task,遇到了一个需求,是把MP4视频里的音频提取成AAC格式。html

当时的第一感受就是很简单,直接使用ffmpeg -i source.mp4 -vn -acodec copy sound.aac就好。android

可是发现这样是有问题的,其最终AAC的duration和MP4的duration彻底不同。如图:git

Imgur

网上的方法也都试了,可是都没法解决这个问题。github

分析 / 解决

后来通过测试,发现不一样的比特率(bit rate),最终的生成的AAC Duration是不同的。web

可是我怎么知道这个比特率的值是多少呢?因此我从头缕了一下。ubuntu

首先MP4的视频文件咱们是从Webm格式转过来的,而Webm视频咱们又是基于MediaRecorder来的。bash

我又从新看了一下MediaRecorder API,发现其中有这样的属性:curl

  • audioBitsPerSecond: 指定音频的比特率

OK找到了,改了代码,对MediaRecorder接口增了audioBitsPerSecond属性,值设置了128000,也就是128Kgitlab

而后使用下面的命令转化下,看看结果:测试

ffmpeg -i source.mp4 -vn -acodec aac -b:a 128k -y sound.aac
复制代码

发现状况并无获得改善...

Imgur

后来想了一下,会不会是由于虽然使用了恒定比特率,可是仍是会有必定的浮动,因而我把128k改成200k尝试下:

Imgur

不只没解决,反而又增长了duration

在接近放弃的时候,rurico提供了一个思路,让我尝试下libfdk_aac编码器。因而通过从新编译FFmpeg来安装libfdk_aac编码器(FFmpeg安装额外编码器须要从新编译)。

Imgur

成功了...

静态编译FFmpeg / 自动化

可是这只是在MAC上成功,我须要让其在Ubuntu上跑起来,可是一想到,在Ubuntu Docker上编译整个FFmpeg就头皮发麻。(我花了4个小时的时间去尝试在Ubuntu上编译带有libfdk_aac的FFmpeg,最终失败了结。)

下班回家后吃完饭后,又在网上从新查了下ubuntu build ffmpeg,发现了静态编译的字样。茅塞顿开

因而在网上搜了下有没有现成的静态编译好的FFmpeg,发现有是有,可是由于libfdk_aac的LICENSE规定,广泛都没有把libfdk_aac编译进去。

因而在github上找到一个开源的FFmpeg静态编译项目:ffmpeg-static

通过测试发现没问题,可是由于在国内,每次下载、安装、编译都很慢,因而想到gitlab有免费的runner可使用。因而在gitlab建了一个项目,用于自动编译。

只须要在项目里加上.gitlab-ci.yml就好:

image: ubuntu:18.04

stages:
 - build

build-ubuntu:
 stage: build
 script:
 - apt-get update
 - apt-get install -yq bzip2 xz-utils perl tar wget git bc
 - apt-get install -yq autoconf automake build-essential cmake curl frei0r-plugins-dev gawk libfontconfig-dev libfreetype6-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl2-dev libspeex-dev libtheora-dev libtool libva-dev libvdpau-dev libvo-amrwbenc-dev libvorbis-dev libwebp-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev libxvidcore-dev lsb-release pkg-config texi2html yasm
 - git clone https://github.com/BlackHole1/ffmpeg-static
 - cd ffmpeg-static
 - chmod 777 *
 - ./build-ubuntu.sh -B
 artifacts:
 name: build
 paths:
 - ./ffmpeg-static/bin/*
复制代码

而后push到gitlab,自动触发ci。半个小时后,获得结果:

Imgur

Imgur

gitlab project: gitlab.com/BlackHole1/…

相关文章
相关标签/搜索