Skip to content

Commit 00adf2e

Browse files
committed
Build FFmpeg
1 parent 7c2ca27 commit 00adf2e

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

.ffmpeg/Dockerfile

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
FROM ubuntu:noble AS builder
2+
ARG VERSION_FFMPEG="7.1"
3+
ARG VERSION_RCLONE="v1.68.2"
4+
ARG VERSION_GO="latest"
5+
6+
USER root
7+
8+
#======================================
9+
# Install build tools
10+
#======================================
11+
ARG TOOLS_DEPS="autoconf automake cmake libfreetype6 gcc build-essential libtool make nasm pkg-config zlib1g-dev numactl \
12+
libnuma-dev libx11-6 libxcb1 libxcb1-dev yasm git curl jq wget ca-certificates"
13+
14+
RUN apt-get update -qqy \
15+
&& apt-get upgrade -yq \
16+
&& apt-get -qqy --no-install-recommends install ${TOOLS_DEPS} \
17+
&& apt-get -qyy clean \
18+
&& mkdir -p /usr/local/src
19+
20+
RUN if [ "${VERSION_GO}" = "latest" ]; then \
21+
VERSION_GO=$(curl -sk https://go.dev/dl/?mode=json | jq -r '.[0].version'); \
22+
fi \
23+
&& curl -skLO https://go.dev/dl/$VERSION_GO.linux-$(dpkg --print-architecture).tar.gz \
24+
&& tar -xf $VERSION_GO.linux-$(dpkg --print-architecture).tar.gz -C /usr/local \
25+
&& rm -rf $VERSION_GO.linux-$(dpkg --print-architecture).tar.gz* \
26+
&& ln -sf /usr/local/go/bin/go /usr/bin/go \
27+
&& go version
28+
29+
RUN cd /usr/local/src \
30+
&& git clone https://github.com/rclone/rclone.git \
31+
&& cd rclone \
32+
&& git checkout $VERSION_RCLONE \
33+
&& make \
34+
&& mv ~/go/bin/rclone /usr/local/bin/ \
35+
&& rclone version
36+
37+
#======================================
38+
# Install x264 from source
39+
#======================================
40+
RUN cd /usr/local/src \
41+
&& git clone https://code.videolan.org/videolan/x264.git \
42+
&& cd x264 \
43+
&& ./configure --prefix="/usr/local" --enable-static \
44+
&& make \
45+
&& make install
46+
47+
#======================================
48+
# Install FFmpeg from source
49+
#======================================
50+
RUN cd /usr/local/src \
51+
&& git clone https://github.com/FFmpeg/FFmpeg.git \
52+
&& cd FFmpeg \
53+
&& git checkout release/$VERSION_FFMPEG \
54+
&& PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure \
55+
--prefix="/usr/local" \
56+
--extra-cflags="-I/usr/local/include" \
57+
--extra-ldflags="-L/usr/local/lib" \
58+
--pkg-config-flags="--static" \
59+
--enable-gpl \
60+
--enable-nonfree \
61+
--enable-libx264 \
62+
--enable-libxcb \
63+
--enable-static \
64+
&& make \
65+
&& make install
66+
67+
# Final stage
68+
FROM ubuntu:noble
69+
70+
USER root
71+
72+
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
73+
COPY --from=builder /usr/local/bin/rclone /usr/local/bin/rclone
74+
75+
RUN apt-get -qqy update \
76+
&& apt-get -qqy --no-install-recommends install \
77+
libx11-dev libxcb1 libxcb-shm0 \
78+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
79+
80+
RUN ffmpeg -version \
81+
&& rclone --version

Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ standalone_edge_beta: edge_beta
248248
video: base
249249
cd ./Video && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg VERSION_FFMPEG=$(FFMPEG_VERSION) $(FROM_IMAGE_ARGS) -t $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) .
250250

251+
ffmpeg:
252+
cd ./.ffmpeg && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg VERSION_FFMPEG=$(FFMPEG_VERSION) $(FROM_IMAGE_ARGS) -t $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) .
253+
251254
fetch_grid_scaler_resources:
252255
mkdir -p ./.keda/scalers \
253256
&& cd ./.keda/scalers \
@@ -333,6 +336,10 @@ tag_and_push_edge_images:
333336
tag_and_push_firefox_images:
334337
./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox
335338

339+
tag_ffmpeg_latest:
340+
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:latest
341+
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:$(FFMPEG_VERSION)
342+
336343
tag_latest:
337344
docker tag $(NAME)/base:$(TAG_VERSION) $(NAME)/base:latest
338345
docker tag $(NAME)/hub:$(TAG_VERSION) $(NAME)/hub:latest
@@ -354,6 +361,11 @@ tag_latest:
354361
docker tag $(NAME)/standalone-docker:$(TAG_VERSION) $(NAME)/standalone-docker:latest
355362
docker tag $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) $(NAME)/video:latest
356363

364+
release_ffmpeg_latest:
365+
docker push $(NAME)/ffmpeg:latest
366+
docker push $(NAME)/ffmpeg:$(FFMPEG_VERSION)
367+
docker push $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE)
368+
357369
release_latest: release_grid_scaler_latest
358370
docker push $(NAME)/base:latest
359371
docker push $(NAME)/hub:latest

0 commit comments

Comments
 (0)