ffmpeg
This commit is contained in:
parent
e5b1668f68
commit
aa4fe70d6c
113
misc/tools.func
113
misc/tools.func
@ -1611,3 +1611,116 @@ function setup_imagemagick() {
|
||||
ensure_usr_local_bin_persist
|
||||
msg_ok "Setup ImageMagick $VERSION"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Installs FFmpeg from source or prebuilt binary (Debian/Ubuntu only).
|
||||
#
|
||||
# Description:
|
||||
# - Downloads and builds FFmpeg from GitHub (https://github.com/FFmpeg/FFmpeg)
|
||||
# - Supports specific version override via FFMPEG_VERSION (e.g. n7.1.1)
|
||||
# - Supports build profile via FFMPEG_TYPE:
|
||||
# - minimal : x264, vpx, mp3 only
|
||||
# - medium : adds subtitles, fonts, opus, vorbis
|
||||
# - full : adds dav1d, svt-av1, zlib, numa
|
||||
# - binary : downloads static build (johnvansickle.com)
|
||||
# - Defaults to latest stable version and full feature set
|
||||
#
|
||||
# Notes:
|
||||
# - Requires: curl, jq, build-essential, and matching codec libraries
|
||||
# - Result is installed to /usr/local/bin/ffmpeg
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
function setup_ffmpeg() {
|
||||
local TMP_DIR
|
||||
TMP_DIR=$(mktemp -d)
|
||||
local GITHUB_REPO="FFmpeg/FFmpeg"
|
||||
local VERSION="${FFMPEG_VERSION:-}"
|
||||
local TYPE="${FFMPEG_TYPE:-full}"
|
||||
local BIN_PATH="/usr/local/bin/ffmpeg"
|
||||
|
||||
# Binary fallback mode
|
||||
if [[ "$TYPE" == "binary" ]]; then
|
||||
msg_info "Installing FFmpeg (static binary)"
|
||||
curl -fsSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o "$TMP_DIR/ffmpeg.tar.xz"
|
||||
tar -xf "$TMP_DIR/ffmpeg.tar.xz" -C "$TMP_DIR"
|
||||
local EXTRACTED_DIR
|
||||
EXTRACTED_DIR=$(find "$TMP_DIR" -maxdepth 1 -type d -name "ffmpeg-*")
|
||||
cp "$EXTRACTED_DIR/ffmpeg" "$BIN_PATH"
|
||||
cp "$EXTRACTED_DIR/ffprobe" /usr/local/bin/ffprobe
|
||||
chmod +x "$BIN_PATH" /usr/local/bin/ffprobe
|
||||
rm -rf "$TMP_DIR"
|
||||
msg_ok "Installed FFmpeg binary ($($BIN_PATH -version | head -n1))"
|
||||
return
|
||||
fi
|
||||
|
||||
# Auto-detect latest stable version if none specified
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
msg_info "Fetching latest stable FFmpeg tag"
|
||||
VERSION=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/tags" |
|
||||
jq -r '.[].name' |
|
||||
grep -E '^n[0-9]+\.[0-9]+\.[0-9]+$' | # stable only
|
||||
sort -V | tail -n1)
|
||||
fi
|
||||
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
msg_error "Could not determine FFmpeg version"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
msg_info "Installing FFmpeg ${VERSION} ($TYPE)"
|
||||
|
||||
# Dependency selection
|
||||
local DEPS=(build-essential yasm nasm pkg-config)
|
||||
case "$TYPE" in
|
||||
minimal)
|
||||
DEPS+=(libx264-dev libvpx-dev libmp3lame-dev)
|
||||
;;
|
||||
medium)
|
||||
DEPS+=(libx264-dev libvpx-dev libmp3lame-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev)
|
||||
;;
|
||||
full)
|
||||
DEPS+=(
|
||||
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
||||
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
||||
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
||||
)
|
||||
;;
|
||||
*)
|
||||
msg_error "Invalid FFMPEG_TYPE: $TYPE"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y "${DEPS[@]}"
|
||||
|
||||
curl -fsSL "https://github.com/${GITHUB_REPO}/archive/refs/tags/${VERSION}.tar.gz" -o "$TMP_DIR/ffmpeg.tar.gz"
|
||||
tar -xzf "$TMP_DIR/ffmpeg.tar.gz" -C "$TMP_DIR"
|
||||
cd "$TMP_DIR/FFmpeg-"* || {
|
||||
msg_error "Source extraction failed"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
}
|
||||
|
||||
./configure --enable-gpl --enable-nonfree --disable-static \
|
||||
--enable-libx264 --enable-libvpx --enable-libmp3lame \
|
||||
$([[ "$TYPE" != "minimal" ]] && echo "--enable-libfreetype --enable-libass --enable-libopus --enable-libvorbis") \
|
||||
$([[ "$TYPE" == "full" ]] && echo "--enable-libx265 --enable-libdav1d --enable-libsvtav1 --enable-zlib --enable-libnuma") >/dev/null
|
||||
|
||||
$STD make -j"$(nproc)"
|
||||
$STD make install
|
||||
|
||||
if ! command -v ffmpeg &>/dev/null; then
|
||||
msg_error "FFmpeg installation failed"
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local FINAL_VERSION
|
||||
FINAL_VERSION=$(ffmpeg -version | head -n1 | awk '{print $3}')
|
||||
rm -rf "$TMP_DIR"
|
||||
ensure_usr_local_bin_persist
|
||||
msg_ok "Setup FFmpeg $FINAL_VERSION"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user