switch to psy and better encode helper

This commit is contained in:
2024-06-17 17:26:49 -05:00
parent a519f80711
commit 9f3a55cf35
2 changed files with 103 additions and 59 deletions

View File

@@ -1,11 +1,13 @@
#!/bin/bash #!/bin/bash
usage() { usage() {
echo "./scripts/build.sh [-h] [-p] [-o] [-r] [-O n]" echo "./scripts/build.sh [-h] [-A] [-s] [-o] [-r] [-O n]"
echo -e "\th: display this help output" echo -e "\th: display this help output"
echo -e "\tp: build svt-av1-psy with dovi library" echo -e "\tA: build all AV1 encoders (default is only svt-av1-psy)"
echo -e "\to: build other encoders x264/5 and vpx" echo -e "\ts: build svt-av1 (default is svt-av1-psy)"
echo -e "\tr: build rockchip media libraries" echo -e "\to: build other encoders (x264/5 and vpx)"
echo -e "\tr: build rockchip media libraries"
echo -e "\tv: build libvmaf"
echo -e "\tO n: build at optimization n (1, 2, 3)" echo -e "\tO n: build at optimization n (1, 2, 3)"
} }
@@ -27,6 +29,18 @@ while getopts "$OPTS" flag; do
export BUILD_PSY="true" export BUILD_PSY="true"
echo "building psy" echo "building psy"
;; ;;
A)
export BUILD_ALL_AV1="true"
echo "building all other av1 encoders"
;;
s)
export BUILD_SVT="true"
echo "building svt-av1"
;;
v)
export BUILD_VMAF="true"
echo "building libvmaf"
;;
o) o)
export BUILD_OTHERS="true" export BUILD_OTHERS="true"
GREP_FILTER+="|x26|libvpx" GREP_FILTER+="|x26|libvpx"
@@ -100,6 +114,9 @@ VPX_DIR="$BASE_DIR/vpx"
# save options use # save options use
echo "$@" > "$BASE_DIR/.last_opts" echo "$@" > "$BASE_DIR/.last_opts"
# build with psy as default
export BUILD_PSY="true"
export ARCH=$(uname -m) export ARCH=$(uname -m)
export COMP_FLAGS="" export COMP_FLAGS=""
if [[ "$ARCH" == "x86_64" ]] if [[ "$ARCH" == "x86_64" ]]
@@ -220,47 +237,51 @@ else
sudo make install || exit sudo make install || exit
fi fi
# build rav1e if [[ "$BUILD_ALL_AV1" == "true" ]]; then
cd "$RAV1E_DIR/" || exit # build rav1e
update_git cd "$RAV1E_DIR/" || exit
rm -rf ffmpeg_build.user && mkdir ffmpeg_build.user || exit update_git
source "$HOME/.cargo/env" # for good measure rm -rf ffmpeg_build.user && mkdir ffmpeg_build.user || exit
cargo clean source "$HOME/.cargo/env" # for good measure
RUSTFLAGS="-C target-cpu=native" cargo cinstall --release \ cargo clean
--prefix="$(pwd)"/ffmpeg_build.user \ RUSTFLAGS="-C target-cpu=native" cargo cinstall --release \
--libdir="$(pwd)"/ffmpeg_build.user/lib \ --prefix="$(pwd)"/ffmpeg_build.user \
--includedir="$(pwd)"/ffmpeg_build.user/include || exit --libdir="$(pwd)"/ffmpeg_build.user/lib \
cd ffmpeg_build.user || exit --includedir="$(pwd)"/ffmpeg_build.user/include || exit
sudo cp ./lib/* /usr/local/lib/ -r || exit cd ffmpeg_build.user || exit
sudo cp ./include/* /usr/local/include/ -r || exit sudo cp ./lib/* /usr/local/lib/ -r || exit
sudo cp ./include/* /usr/local/include/ -r || exit
# build aom # build aom
cd "$AOM_DIR/" || exit cd "$AOM_DIR/" || exit
update_git update_git
rm -rf build_aom.user rm -rf build_aom.user
mkdir build_aom.user mkdir build_aom.user
cd build_aom.user || exit cd build_aom.user || exit
make clean make clean
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \
-DENABLE_TESTS=OFF \ -DENABLE_TESTS=OFF \
-DCMAKE_C_FLAGS="-flto -O${OPT_LVL} $COMP_FLAGS" \ -DCMAKE_C_FLAGS="-flto -O${OPT_LVL} $COMP_FLAGS" \
-DCMAKE_CXX_FLAGS="-flto -O${OPT_LVL} $COMP_FLAGS" || exit -DCMAKE_CXX_FLAGS="-flto -O${OPT_LVL} $COMP_FLAGS" || exit
make -j"$(nproc)" || exit make -j"$(nproc)" || exit
sudo make install || exit sudo make install || exit
fi
# build libvmaf if [[ "$BUILD_VMAF" == "true" ]]; then
cd "$VMAF_DIR/libvmaf" || exit # build libvmaf
update_git cd "$VMAF_DIR/libvmaf" || exit
python3 -m virtualenv .venv update_git
source .venv/bin/activate python3 -m virtualenv .venv
rm -rf build.user source .venv/bin/activate
mkdir build.user rm -rf build.user
cd build.user || exit mkdir build.user
pip install meson cd build.user || exit
meson setup ../ build.user --buildtype release -Denable_float=true -Db_lto=true \ pip install meson
--optimization="$OPT_LVL" -Dc_args="$COMP_FLAGS" -Dcpp_args="$COMP_FLAGS" || exit meson setup ../ build.user --buildtype release -Denable_float=true -Db_lto=true \
ninja -vC build.user || exit --optimization="$OPT_LVL" -Dc_args="$COMP_FLAGS" -Dcpp_args="$COMP_FLAGS" || exit
sudo ninja -vC build.user install || exit ninja -vC build.user || exit
sudo ninja -vC build.user install || exit
fi
# build dav1d # build dav1d
cd "$DAV1D_DIR" || exit cd "$DAV1D_DIR" || exit

View File

@@ -13,31 +13,54 @@ usage() {
encode() { encode() {
ENCODE_FILE="/tmp/encode.sh" ENCODE_FILE="/tmp/encode.sh"
SVT_PARAMS="${GRAIN}tune=0:enable-overlays=1:scd=1:enable-hdr=1:fast-decode=1:enable-variance-boost=1:enable-qm=1:qm-min=0:qm-max=15" echo '#!/bin/bash' > "$ENCODE_FILE"
SVT_PARAMS="${GRAIN}adaptive-film-grain=1:tune=3:enable-overlays=1:scd=1:enable-hdr=1:fast-decode=1:enable-variance-boost=1:enable-qm=1:qm-min=0:qm-max=15"
echo "export SVT_PARAMS=\"$SVT_PARAMS\"" >> "$ENCODE_FILE"
UNMAP=$(unmap_streams "$INPUT") UNMAP=$(unmap_streams "$INPUT")
echo "export UNMAP=\"$UNMAP\"" >> "$ENCODE_FILE"
AUDIO_FORMAT='-af "aformat=channel_layouts=7.1|5.1|stereo|mono" -c:a libopus' AUDIO_FORMAT='-af "aformat=channel_layouts=7.1|5.1|stereo|mono" -c:a libopus'
echo "export AUDIO_FORMAT='$AUDIO_FORMAT'" >> "$ENCODE_FILE"
AUDIO_BITRATE=$(get_bitrate_audio "$INPUT") AUDIO_BITRATE=$(get_bitrate_audio "$INPUT")
echo "export AUDIO_BITRATE=\"$AUDIO_BITRATE\"" >> "$ENCODE_FILE"
VIDEO_ENCODER="libsvtav1" VIDEO_ENCODER="libsvtav1"
echo "export VIDEO_ENCODER=\"$VIDEO_ENCODER\"" >> "$ENCODE_FILE"
VIDEO_PARAMS="-pix_fmt yuv420p10le -crf 25 -preset 3 -g 240" VIDEO_PARAMS="-pix_fmt yuv420p10le -crf 25 -preset 3 -g 240"
FFMPEG_PARAMS="-y -c:s copy -c:V $VIDEO_ENCODER $VIDEO_PARAMS" echo "export VIDEO_PARAMS=\"$VIDEO_PARAMS\"" >> "$ENCODE_FILE"
NL=' \\\n\t'
FFMPEG_PARAMS="-y -c:s copy -c:V \$VIDEO_ENCODER \$VIDEO_PARAMS"
echo "export FFMPEG_PARAMS=\"$FFMPEG_PARAMS\"" >> "$ENCODE_FILE"
FFMPEG_VERSION="$(ffmpeg -version 2>&1 | grep version | cut -d' ' -f1-3)" FFMPEG_VERSION="$(ffmpeg -version 2>&1 | grep version | cut -d' ' -f1-3)"
VIDEO_ENC_VERSION="$(ldd $(which ffmpeg) | grep -i "$VIDEO_ENCODER" | cut -d' ' -f3 | xargs readlink)" echo "export FFMPEG_VERSION=\"$FFMPEG_VERSION\"" >> "$ENCODE_FILE"
AUDIO_ENC_VERSION="$(ldd $(which ffmpeg) | grep -i libopus | cut -d' ' -f3 | xargs readlink)"
ADD_METADATA="-metadata encoding_params=\"$FFMPEG_VERSION $AUDIO_ENC_VERSION $VIDEO_ENC_VERSION $VIDEO_PARAMS $SVT_PARAMS\"" VIDEO_ENC_VERSION="$(ldd $(which ffmpeg) | grep -i "$VIDEO_ENCODER" | cut -d' ' -f3 | xargs readlink)"
echo "export VIDEO_ENC_VERSION=\"$VIDEO_ENC_VERSION\"" >> "$ENCODE_FILE"
AUDIO_ENC_VERSION="$(ldd $(which ffmpeg) | grep -i libopus | cut -d' ' -f3 | xargs readlink)"
echo "export AUDIO_ENC_VERSION=\"$AUDIO_ENC_VERSION\"" >> "$ENCODE_FILE"
ADD_METADATA="\"encoding_params=\\\"\$FFMPEG_VERSION \$AUDIO_ENC_VERSION \$VIDEO_ENC_VERSION \$VIDEO_PARAMS \$SVT_PARAMS\\\"\""
# ADD_METADATA="\"-metadata encoding_params='yes'\""
echo "export ADD_METADATA=$ADD_METADATA" >> "$ENCODE_FILE"
NL=' \\\n\t'
echo '#!/bin/bash' > "$ENCODE_FILE"
echo -e ffmpeg -i \""$INPUT"\" -map 0 $UNMAP \ echo -e ffmpeg -i \""$INPUT"\" -map 0 $UNMAP \
$AUDIO_FORMAT $NL $AUDIO_BITRATE \ \$AUDIO_FORMAT $NL \$AUDIO_BITRATE \
$ADD_METADATA $NL \ -metadata \"\$ADD_METADATA\" $NL \
"$FFMPEG_PARAMS" -dolbyvision 1 -svtav1-params \ \$FFMPEG_PARAMS -dolbyvision 1 -svtav1-params \
$NL "\"$SVT_PARAMS\" \"$OUTPUT\" ||" $NL \ $NL "\"\$SVT_PARAMS\" \"\$OUTPUT\" ||" $NL \
ffmpeg -i \""$INPUT"\" -map 0 $UNMAP \ ffmpeg -i \""$INPUT"\" -map 0 \$UNMAP \
$AUDIO_FORMAT $NL $AUDIO_BITRATE \ \$AUDIO_FORMAT $NL \$AUDIO_BITRATE \
$ADD_METADATA $NL \ -metadata \"\$ADD_METADATA\" $NL \
"$FFMPEG_PARAMS" -svtav1-params \ "\$FFMPEG_PARAMS" -svtav1-params \
$NL "\"$SVT_PARAMS\" \"$OUTPUT\" || exit 1" >> "$ENCODE_FILE" $NL "\"\$SVT_PARAMS\" \"$OUTPUT\" || exit 1 " >> "$ENCODE_FILE"
if [[ "$EXT" == "mkv" ]]; then if [[ "$EXT" == "mkv" ]]; then
echo "mkvpropedit \"$OUTPUT\" --add-track-statistics-tags" >> "$ENCODE_FILE" echo "mkvpropedit \"$OUTPUT\" --add-track-statistics-tags" >> "$ENCODE_FILE"