# syntax=docker/dockerfile-upstream:master-labs # Base emsdk image with environment variables. FROM emscripten/emsdk:3.1.18 AS emsdk-base ARG EXTRA_CFLAGS ARG EXTRA_LDFLAGS ARG FFMPEG_ST ARG FFMPEG_MT ENV INSTALL_DIR=/build ENV FFMPEG_VERSION=n5.1 ENV CFLAGS="-I$INSTALL_DIR/include $CFLAGS $EXTRA_CFLAGS" ENV CXXFLAGS="$CFLAGS" ENV LDFLAGS="$LDFLAGS $CFLAGS $EXTRA_LDFLAGS" ENV EM_PKG_CONFIG_PATH=$EM_PKG_CONFIG_PATH:$INSTALL_DIR/lib/pkgconfig:/emsdk/upstream/emscripten/system/lib/pkgconfig ENV EM_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake ENV PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$EM_PKG_CONFIG_PATH ENV FFMPEG_ST=$FFMPEG_ST ENV FFMPEG_MT=$FFMPEG_MT # Build x264 FROM emsdk-base AS x264-builder ENV X264_BRANCH=4-cores ADD https://github.com/ffmpegwasm/x264.git#$X264_BRANCH /src COPY build/x264.sh /src/build.sh RUN bash -x /src/build.sh # Build x265 FROM emsdk-base AS x265-builder ENV X265_BRANCH=3.4 ADD https://github.com/ffmpegwasm/x265.git#$X265_BRANCH /src COPY build/x265.sh /src/build.sh RUN bash -x /src/build.sh # Build lame FROM emsdk-base AS lame-builder ENV LAME_BRANCH=master ADD https://github.com/ffmpegwasm/lame.git#$LAME_BRANCH /src COPY build/lame.sh /src/build.sh RUN bash -x /src/build.sh # Base ffmpeg image with dependencies and source code populated. FROM emsdk-base AS ffmpeg-base RUN apt-get update && \ apt-get install -y pkg-config RUN embuilder build sdl2 sdl2-mt ADD https://github.com/FFmpeg/FFmpeg.git#$FFMPEG_VERSION /src COPY --from=x264-builder $INSTALL_DIR $INSTALL_DIR COPY --from=x265-builder $INSTALL_DIR $INSTALL_DIR COPY --from=lame-builder $INSTALL_DIR $INSTALL_DIR # Build ffmpeg FROM ffmpeg-base AS ffmpeg-builder COPY build/ffmpeg.sh /src/build.sh RUN bash -x /src/build.sh \ --enable-gpl \ --enable-libx264 \ --enable-libx265 \ --enable-libmp3lame # Build ffmpeg.wasm FROM ffmpeg-builder AS ffmpeg-wasm-builder COPY src/bind /src/src/bind COPY src/fftools /src/src/fftools COPY build/ffmpeg-wasm.sh build.sh ENV FFMPEG_LIBS="-lx264 -lx265 -lmp3lame" RUN mkdir -p /src/dist/umd && bash -x /src/build.sh \ ${FFMPEG_LIBS} \ -o dist/umd/ffmpeg-core.js RUN mkdir -p /src/dist/esm && bash -x /src/build.sh \ ${FFMPEG_LIBS} \ -sEXPORT_ES6 \ -o dist/esm/ffmpeg-core.js # Export ffmpeg-core.wasm to dist/, use `docker buildx build -o . .` to get assets FROM scratch AS exportor COPY --from=ffmpeg-wasm-builder /src/dist /dist