Add x265 and lame
This commit is contained in:
parent
d5edbe9e5d
commit
1fd52fd851
40
Dockerfile
40
Dockerfile
@ -6,22 +6,38 @@ ARG EXTRA_CFLAGS
|
|||||||
ARG EXTRA_LDFLAGS
|
ARG EXTRA_LDFLAGS
|
||||||
ARG FFMPEG_ST
|
ARG FFMPEG_ST
|
||||||
ARG FFMPEG_MT
|
ARG FFMPEG_MT
|
||||||
ENV INSTALL_DIR=/src/build
|
ENV INSTALL_DIR=/build
|
||||||
ENV FFMPEG_VERSION=n5.1
|
ENV FFMPEG_VERSION=n5.1
|
||||||
ENV X264_BRANCH=4-cores
|
ENV CFLAGS="-I$INSTALL_DIR/include $CFLAGS $EXTRA_CFLAGS"
|
||||||
ENV CFLAGS="$CFLAGS $EXTRA_CFLAGS"
|
ENV CXXFLAGS="$CFLAGS"
|
||||||
ENV LDFLAGS="$LDFLAGS $CFLAGS $EXTRA_LDFLAGS"
|
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_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 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$EM_PKG_CONFIG_PATH
|
||||||
ENV FFMPEG_ST=$FFMPEG_ST
|
ENV FFMPEG_ST=$FFMPEG_ST
|
||||||
ENV FFMPEG_MT=$FFMPEG_MT
|
ENV FFMPEG_MT=$FFMPEG_MT
|
||||||
|
|
||||||
# Build x264
|
# Build x264
|
||||||
FROM emsdk-base AS x264-builder
|
FROM emsdk-base AS x264-builder
|
||||||
|
ENV X264_BRANCH=4-cores
|
||||||
ADD https://github.com/ffmpegwasm/x264.git#$X264_BRANCH /src
|
ADD https://github.com/ffmpegwasm/x264.git#$X264_BRANCH /src
|
||||||
COPY build/x264.sh /src/build.sh
|
COPY build/x264.sh /src/build.sh
|
||||||
RUN bash -x /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.
|
# Base ffmpeg image with dependencies and source code populated.
|
||||||
FROM emsdk-base AS ffmpeg-base
|
FROM emsdk-base AS ffmpeg-base
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
@ -29,19 +45,31 @@ RUN apt-get update && \
|
|||||||
RUN embuilder build sdl2 sdl2-mt
|
RUN embuilder build sdl2 sdl2-mt
|
||||||
ADD https://github.com/FFmpeg/FFmpeg.git#$FFMPEG_VERSION /src
|
ADD https://github.com/FFmpeg/FFmpeg.git#$FFMPEG_VERSION /src
|
||||||
COPY --from=x264-builder $INSTALL_DIR $INSTALL_DIR
|
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
|
# Build ffmpeg
|
||||||
FROM ffmpeg-base AS ffmpeg-builder
|
FROM ffmpeg-base AS ffmpeg-builder
|
||||||
COPY build/ffmpeg.sh /src/build.sh
|
COPY build/ffmpeg.sh /src/build.sh
|
||||||
RUN bash -x /src/build.sh
|
RUN bash -x /src/build.sh \
|
||||||
|
--enable-gpl \
|
||||||
|
--enable-libx264 \
|
||||||
|
--enable-libx265 \
|
||||||
|
--enable-libmp3lame
|
||||||
|
|
||||||
# Build ffmpeg.wasm
|
# Build ffmpeg.wasm
|
||||||
FROM ffmpeg-builder AS ffmpeg-wasm-builder
|
FROM ffmpeg-builder AS ffmpeg-wasm-builder
|
||||||
COPY src/bind /src/src/bind
|
COPY src/bind /src/src/bind
|
||||||
COPY src/fftools /src/src/fftools
|
COPY src/fftools /src/src/fftools
|
||||||
COPY build/ffmpeg-wasm.sh build.sh
|
COPY build/ffmpeg-wasm.sh build.sh
|
||||||
RUN mkdir -p /src/dist/umd && bash -x /src/build.sh -o dist/umd/ffmpeg-core.js
|
ENV FFMPEG_LIBS="-lx264 -lx265 -lmp3lame"
|
||||||
RUN mkdir -p /src/dist/esm && bash -x /src/build.sh -sEXPORT_ES6 -o dist/esm/ffmpeg-core.js
|
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
|
# Export ffmpeg-core.wasm to dist/, use `docker buildx build -o . .` to get assets
|
||||||
FROM scratch AS exportor
|
FROM scratch AS exportor
|
||||||
|
2
Makefile
2
Makefile
@ -2,7 +2,7 @@ all: dev
|
|||||||
|
|
||||||
MT_FLAGS := -sUSE_PTHREADS -pthread
|
MT_FLAGS := -sUSE_PTHREADS -pthread
|
||||||
|
|
||||||
DEV_ARGS := --progress=plain
|
# DEV_ARGS := --progress=plain
|
||||||
DEV_CFLAGS := --profiling
|
DEV_CFLAGS := --profiling
|
||||||
DEV_MT_CFLAGS := $(DEV_CFLAGS) $(MT_FLAGS)
|
DEV_MT_CFLAGS := $(DEV_CFLAGS) $(MT_FLAGS)
|
||||||
PROD_CFLAGS := -O3 -msimd128
|
PROD_CFLAGS := -O3 -msimd128
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
# ex:
|
# ex:
|
||||||
# bash ffmpeg-wasm.sh -o ffmpeg.js
|
# bash ffmpeg-wasm.sh -o ffmpeg.js
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
EXPORT_NAME="createFFmpegCore"
|
EXPORT_NAME="createFFmpegCore"
|
||||||
|
|
||||||
CONF_FLAGS=(
|
CONF_FLAGS=(
|
||||||
@ -26,7 +28,6 @@ CONF_FLAGS=(
|
|||||||
-lpostproc
|
-lpostproc
|
||||||
-lswresample
|
-lswresample
|
||||||
-lswscale
|
-lswscale
|
||||||
-lx264
|
|
||||||
-Wno-deprecated-declarations
|
-Wno-deprecated-declarations
|
||||||
$LDFLAGS
|
$LDFLAGS
|
||||||
-sUSE_SDL=2 # use emscripten SDL2 lib port
|
-sUSE_SDL=2 # use emscripten SDL2 lib port
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
CONF_FLAGS=(
|
CONF_FLAGS=(
|
||||||
--target-os=none # disable target specific configs
|
--target-os=none # disable target specific configs
|
||||||
--arch=x86_32 # use x86_32 arch
|
--arch=x86_32 # use x86_32 arch
|
||||||
@ -21,15 +23,11 @@ CONF_FLAGS=(
|
|||||||
--objcc=emcc
|
--objcc=emcc
|
||||||
--dep-cc=emcc
|
--dep-cc=emcc
|
||||||
--extra-cflags="$CFLAGS"
|
--extra-cflags="$CFLAGS"
|
||||||
--extra-cxxflags="$CFLAGS"
|
--extra-cxxflags="$CXXFLAGS"
|
||||||
|
|
||||||
# disable thread when FFMPEG_ST is NOT defined
|
# disable thread when FFMPEG_ST is NOT defined
|
||||||
${FFMPEG_ST:+ --disable-pthreads --disable-w32threads --disable-os2threads}
|
${FFMPEG_ST:+ --disable-pthreads --disable-w32threads --disable-os2threads}
|
||||||
|
|
||||||
# extra libraries
|
|
||||||
--enable-gpl
|
|
||||||
--enable-libx264
|
|
||||||
)
|
)
|
||||||
|
|
||||||
emconfigure ./configure "${CONF_FLAGS[@]}"
|
emconfigure ./configure "${CONF_FLAGS[@]}" $@
|
||||||
emmake make -j
|
emmake make -j
|
||||||
|
15
build/lame.sh
Executable file
15
build/lame.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
CONF_FLAGS=(
|
||||||
|
--prefix=$INSTALL_DIR # install library in a build directory for FFmpeg to include
|
||||||
|
--host=i686-linux # use i686 linux
|
||||||
|
--disable-shared # disable shared library
|
||||||
|
--disable-frontend # exclude lame executable
|
||||||
|
--disable-analyzer-hooks # exclude analyzer hooks
|
||||||
|
--disable-dependency-tracking # speed up one-time build
|
||||||
|
--disable-gtktest
|
||||||
|
)
|
||||||
|
CFLAGS=$CFLAGS emconfigure ./configure "${CONF_FLAGS[@]}"
|
||||||
|
emmake make install -j
|
64
build/x265.sh
Executable file
64
build/x265.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
BASE_FLAGS=(
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=$EM_TOOLCHAIN_FILE
|
||||||
|
-DENABLE_LIBNUMA=OFF
|
||||||
|
-DENABLE_SHARED=OFF
|
||||||
|
-DENABLE_CLI=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
FLAGS_12BIT=(
|
||||||
|
${BASE_FLAGS[@]}
|
||||||
|
-DHIGH_BIT_DEPTH=ON
|
||||||
|
-DEXPORT_C_API=OFF
|
||||||
|
-DMAIN12=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
FLAGS_10BIT=(
|
||||||
|
${BASE_FLAGS[@]}
|
||||||
|
-DHIGH_BIT_DEPTH=ON
|
||||||
|
-DEXPORT_C_API=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
FLAGS_MAIN=(
|
||||||
|
${BASE_FLAGS[@]}
|
||||||
|
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
|
||||||
|
-DEXTRA_LIB="x265_main10.a;x265_main12.a"
|
||||||
|
-DEXTRA_LINK_FLAGS=-L.
|
||||||
|
-DLINKED_10BIT=ON
|
||||||
|
-DLINKED_12BIT=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
cd source
|
||||||
|
rm -rf build
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
mkdir -p main 10bit 12bit
|
||||||
|
|
||||||
|
cd 12bit
|
||||||
|
emmake cmake ../.. -DCMAKE_CXX_FLAGS="$CXXFLAGS" ${FLAGS_12BIT[@]}
|
||||||
|
emmake make -j
|
||||||
|
|
||||||
|
cd ../10bit
|
||||||
|
emmake cmake ../.. -DCMAKE_CXX_FLAGS="$CXXFLAGS" ${FLAGS_10BIT[@]}
|
||||||
|
emmake make -j
|
||||||
|
|
||||||
|
cd ../main
|
||||||
|
ln -sf ../10bit/libx265.a libx265_main10.a
|
||||||
|
ln -sf ../12bit/libx265.a libx265_main12.a
|
||||||
|
emmake cmake ../.. -DCMAKE_CXX_FLAGS="$CXXFLAGS" ${FLAGS_MAIN[@]}
|
||||||
|
emmake make -j
|
||||||
|
mv libx265.a libx265_main.a
|
||||||
|
|
||||||
|
# Merge static libraries
|
||||||
|
emar -M <<EOF
|
||||||
|
CREATE libx265.a
|
||||||
|
ADDLIB libx265_main.a
|
||||||
|
ADDLIB libx265_main10.a
|
||||||
|
ADDLIB libx265_main12.a
|
||||||
|
SAVE
|
||||||
|
END
|
||||||
|
EOF
|
||||||
|
emmake make install -j
|
Loading…
Reference in New Issue
Block a user