-
Notifications
You must be signed in to change notification settings - Fork 2
/
Dockerfile
172 lines (150 loc) · 5.36 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# Adapted from https://hub.docker.com/r/offbytwo/ffmpeg
FROM ubuntu:bionic as build
ARG nasm_version=2.14.02
ARG x264_version=master
ARG x265_version=3.2.1
ARG libvpx_version=v1.8.2
ARG fdk_aac_version=v2.0.1
ARG lame_version=3.100
ARG opus_version=v1.3.1
ARG libaom_version=master
ARG vmaf_version=v1.3.15
ARG ffmpeg_version=4.2.2
ENV DEBIAN_FRONTEND noninteractive
# update, and install basic packages
RUN apt-get update -qq && \
apt-get upgrade -y && \
apt-get -y install --no-install-recommends \
autoconf \
automake \
build-essential \
cmake \
git-core \
libfreetype6-dev \
libtool \
openssl \
libssl-dev \
pkg-config \
texinfo \
wget \
zlib1g-dev \
yasm \
curl \
git \
mercurial \
libnuma-dev \
gcc-8 \
g++-8 \
ca-certificates \
asciidoc \
xmlto \
libstdc++6
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir -p /opt/ffmpeg/bin
ENV PATH="/opt/ffmpeg/bin:$PATH"
ENV PKG_CONFIG_PATH="/opt/ffmpeg/lib/pkgconfig"
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7 && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8
WORKDIR /opt/sources
# RUN curl -sS -O https://www.nasm.us/pub/nasm/releasebuilds/${nasm_version}/nasm-${nasm_version}.tar.xz
RUN curl -sS -O https://ftp.osuosl.org/pub/blfs/conglomeration/nasm/nasm-${nasm_version}.tar.xz
RUN tar xf nasm-${nasm_version}.tar.xz
WORKDIR /opt/sources/nasm-${nasm_version}
RUN ./autogen.sh && ./configure --prefix="/opt/ffmpeg" --bindir="/opt/ffmpeg/bin"
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/x264
RUN git clone --branch ${x264_version} --depth 1 https://code.videolan.org/videolan/x264.git .
RUN ./configure --prefix="/opt/ffmpeg" --bindir="/opt/ffmpeg/bin" --enable-static --enable-pic
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources
RUN curl -O http://ftp.videolan.org/pub/videolan/x265/x265_${x265_version}.tar.gz
RUN tar zxvf x265_${x265_version}.tar.gz
WORKDIR x265_${x265_version}/build/linux
RUN cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg" -DENABLE_SHARED=off ../../source
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/libvpx
RUN git clone --branch ${libvpx_version} --depth 1 https://chromium.googlesource.com/webm/libvpx.git .
RUN ./configure --prefix="/opt/ffmpeg" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/fdk-aac
RUN git clone --branch ${fdk_aac_version} --depth 1 https://github.com/mstorsjo/fdk-aac .
RUN autoreconf -fiv && ./configure --prefix="/opt/ffmpeg" --disable-shared
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources
RUN curl -sS -L -O https://downloads.sourceforge.net/project/lame/lame/${lame_version}/lame-${lame_version}.tar.gz
RUN tar xzf lame-${lame_version}.tar.gz
WORKDIR lame-${lame_version}
RUN ./configure --prefix="/opt/ffmpeg" --bindir="/opt/ffmpeg/bin" --disable-shared --enable-nasm
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/opus
RUN git clone --branch ${opus_version} --depth 1 https://github.com/xiph/opus.git .
RUN ./autogen.sh
RUN ./configure --prefix="/opt/ffmpeg" --disable-shared
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/aom
RUN git clone --branch ${libaom_version} --depth 1 https://aomedia.googlesource.com/aom .
WORKDIR /opt/sources/aom_build
RUN cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg" -DBUILD_SHARED_LIBS=off -DENABLE_TOOLS=off -DENABLE_DOCS=off -DENABLE_EXAMPLES=off -DENABLE_TESTS=off -DENABLE_NASM=on ../aom
RUN make -j$(nproc)
RUN make install
WORKDIR /opt/sources/vmaf
RUN git clone --branch ${vmaf_version} --depth 1 https://github.com/Netflix/vmaf.git .
RUN make -j$(nproc)
RUN sed -i 's|/usr/local|/opt/ffmpeg|g' wrapper/libvmaf.pc
WORKDIR wrapper
RUN make install INSTALL_PREFIX=/opt/ffmpeg
WORKDIR /opt/sources
RUN curl -sS -O https://ffmpeg.org/releases/ffmpeg-${ffmpeg_version}.tar.bz2
WORKDIR ffmpeg-${ffmpeg_version}
RUN tar xjf ../ffmpeg-${ffmpeg_version}.tar.bz2 --strip-components 1
RUN ./configure \
--prefix="/opt/ffmpeg" \
--pkg-config-flags="--static" \
--extra-cflags="-I/opt/ffmpeg/include" \
--extra-ldflags="-L/opt/ffmpeg/lib" \
--extra-ldexeflags="-Bstatic" \
--extra-libs="-lpthread -lm" \
--bindir="/opt/ffmpeg/bin" \
--disable-shared \
--enable-static \
--disable-ffplay \
--enable-gpl \
--enable-nonfree \
--enable-version3 \
--enable-libaom \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libvmaf \
--enable-openssl
RUN make -j$(nproc)
RUN make install
FROM ubuntu:bionic
LABEL maintainer "Kay Singh https://twitter.com/singhkays"
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq && apt-get upgrade -y && \
apt-get -y install --no-install-recommends \
libnuma1 \
libssl1.1 \
libfreetype6 \
&& apt-get -y clean && rm -r /var/lib/apt/lists/*
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /opt/ffmpeg
COPY --from=build /opt/ffmpeg .
RUN ln -s /opt/ffmpeg/share/model /usr/local/share/
RUN ldconfig
ENV PATH="/opt/ffmpeg/bin:$PATH"
ENV PKG_CONFIG_PATH="/opt/ffmpeg/lib/pkgconfig"
WORKDIR /root