Sign inSign up

nuvic/ffmpeg-compile

By nuvic

•Updated over 2 years ago

FFmpeg源代码编译环境

Image
Developer tools
0

85

nuvic/ffmpeg-compile repository overview

⁠FFmpeg源代码编译环境

时间:2024-01-28 作者:魏文应


⁠简 介

本镜像包含了FFmpeg编译环境,ubuntu20.04LTS amd64架构,使用下面命令启动当前镜像:

docker run -it --network host --name ffmpeg nuvic/ffmpeg-compile:v1.0-ffmpeg6.1-ubuntu20.04-amd64 /bin/bash

⁠本Docker镜像创建过程

docker run -it --network host --name ffmpeg-compile ubuntu:20.04 /bin/bash

通过ffmpeg官方安装教程⁠ 进行安装:

apt update
apt install -y vim curl 
⁠安装依赖

安装依赖前,请确保你可以科学上网,有些源代码安装,需要代理。这里我使用 tsocks 工具,首先安装 tsocks 工具:

apt install tsocks

sudo vim /etc/tsocks.conf,配置 tsocks :

# 如果提示下面错误,这是子网掩码设置错误导致的,255.255.255.0改为255.255.0.0即可:
# libtsocks(1845): SOCKS server 192.168.10.67 (192.168.10.67) is not on a local subnet!
# 子网掩码
local = 192.168.0.0/255.255.0.0
local = 10.0.0.0/255.0.0.0

path {
        reaches = 150.0.0.0/255.255.0.0
        reaches = 150.1.0.0:80/255.255.0.0
        server = 10.1.7.25
        server_type = 5
        default_user = delius
        default_pass = hello
}

# 你的代理服务器的ip地址
server = 192.168.10.232
# socks5协议
server_type = 5
# 代理服务器的端口
server_port = 10808

设置完成后,在命令前面,加上 tsocks ,比如:

# tsocks 任意Linux命令
# tsocks wget 一个被墙的链接
# tsocks wget https://www.dropbox.com/s/4j4z58wuv8o0mfz/models.zip
# tsocks curl 一个被墙的网站
tsocks curl www.google.com
⁠基本依赖
apt-get -y install \
  autoconf \
  automake \
  build-essential \
  cmake \
  git-core \
  libass-dev \
  libfreetype6-dev \
  libgnutls28-dev \
  libmp3lame-dev \
  libsdl2-dev \
  libtool \
  libva-dev \
  libvdpau-dev \
  libvorbis-dev \
  libxcb1-dev \
  libxcb-shm0-dev \
  libxcb-xfixes0-dev \
  meson \
  ninja-build \
  pkg-config \
  texinfo \
  wget \
  yasm \
  zlib1g-dev
apt install libunistring-dev libaom-dev
⁠其它依赖
apt-get install -y libx264-dev
apt-get install -y libx265-dev libnuma-dev
apt-get install -y libvpx-dev
apt-get install -y libfdk-aac-dev
apt-get install -y libopus-dev
⁠libaom

需要通过源代码方式,安装libaom:

cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || tsocks git clone --depth 1 https://aomedia.googlesource.com/aom && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" make && \
make install
⁠libsvtav1

通过源代码方式安装:

cd ~/ffmpeg_sources && \
git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git && \
mkdir -p SVT-AV1/build && \
cd SVT-AV1/build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
PATH="$HOME/bin:$PATH" make && \
make install
⁠libdav1d-dev

在ubuntu20.04LTS,通过编译安装dav1d⁠源代码的安装方式,安装 libdav1d-dev:

# E: Unable to locate package libdav1d-dev

# 安装Meson:https://mesonbuild.com/Quick-guide.html#installation-using-package-manager
apt-get install python3 python3-pip python3-setuptools python3-wheel ninja-build

# 安装ninja
apt-get -y install ninja-build

# 安装nasm
apt-get -y install nasm

# 下载dav1d
git clone https://code.videolan.org/videolan/dav1d.git && cd dav1d
# 下载测试数据
git clone https://code.videolan.org/videolan/dav1d-test-data.git tests/dav1d-test-data

mkdir build && cd build
# 配置
meson setup ..
# 编译
ninja
# 测试
meson test -v
# 安装
ninja install

安装无误显示结果如下:

[1/9] Generating vcs_version.h with a custom command.
checkasm: reference functions unavailable, reconfigure using '-Dtrim_dsp=false'
1/6 dav1d:checkasm / checkasm               OK       0.01 s
2/6 dav1d:headers / common.h_test           OK       0.01 s
3/6 dav1d:headers / data.h_test             OK       0.01 s
4/6 dav1d:headers / dav1d.h_test            OK       0.01 s
5/6 dav1d:headers / headers.h_test          OK       0.01 s
6/6 dav1d:headers / picture.h_test          OK       0.01 s

Ok:                    6
Expected Fail:         0
Fail:                  0
Unexpected Pass:       0
Skipped:               0
Timeout:               0
⁠libvmaf
cd ~/ffmpeg_sources && \
tsocks wget https://github.com/Netflix/vmaf/archive/v2.3.1.tar.gz && \
tar xvf v2.3.1.tar.gz && \
mkdir -p vmaf-2.3.1/libvmaf/build &&\
cd vmaf-2.3.1/libvmaf/build && \
meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=static .. --prefix "$HOME/ffmpeg_build" --bindir="$HOME/ffmpeg_build/bin" --libdir="$HOME/ffmpeg_build/lib" && \
ninja && \
ninja install
⁠安装ffmpeg

安装完上述依赖后,直接安装ffmpeg:

# 可以到官网https://ffmpeg.org/releases/,选择你需要版本,替换下面的:
# https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2

cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --ld="g++" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libdav1d \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libvmaf \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make -j32 && \
make install && \
hash -r

编译成功后,输出到 /root/bin :

ffmpeg  ffplay  ffprobe

执行:

/root/bin/ffmpeg -version

打印结果类似如下,表明ffmpeg正常:

ffmpeg version N-113425-gac06190a5a Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs='-lpthread -lm' --ld=g++ --bindir=/root/bin --enable-gpl --enable-gnutls --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libdav1d --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libvmaf --enable-nonfree
libavutil      58. 36.101 / 58. 36.101
libavcodec     60. 38.100 / 60. 38.100
libavformat    60. 20.100 / 60. 20.100
libavdevice    60.  4.100 / 60.  4.100
libavfilter     9. 17.100 /  9. 17.100
libswscale      7.  6.100 /  7.  6.100
libswresample   4. 13.100 /  4. 13.100
libpostproc    57.  4.100 / 57.  4.100
⁠导出镜像
docker commit ffmpeg-compile nuvic/ffmpeg-compile:v1.0-ffmpeg6.1-ubuntu20.04-amd64
⁠启动镜像
docker run -it --network host --name ffmpeg nuvic/ffmpeg-compile:v1.0-ffmpeg6.1-ubuntu20.04-amd64 /bin/bash

Tag summary

Content type

Image

Digest

sha256:5c23743ad…

Size

1.1 GB

Last updated

over 2 years ago

docker pull nuvic/ffmpeg-compile:v1.0-ffmpeg6.1-ubuntu20.04-amd64