從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/…

相關文章
相關標籤/搜索