Linux一键编译安装 ALSA FFmpeg MPlayer GStreamer wxWidgets Audacity

2025年09月9日

转载请注明出处:https://www.myzhenai.com.cn/post/4797.html

这是我将本博客上的一些Linux下的一些驱动和框架的编译安装整理出来,让ai写出了一键编译安装脚本

这里分别给出ChatGPT、Kimi、DeepSeek,我发现,在通义千问、豆包中,没办法写出这样的一键脚本

ALSA是Linux下的声卡驱动,一般的Linux系统都会安装这个声卡驱动

FFmpeg是一个功能强大的视频和音频的编解码框架,在命令行下可以适用于很多视频和音频的操作

MPlayer是一个功能强大的视频音频编解码播放器,很多播放器都会用到他们的编解码插件,例如ffmpeg就是他们负责维护的

GStreamer是另外一个媒体框架,和ffmpeg一样

wxWidgets是一个媒体开发软件包,很多音频软件需要用到这个包,例如audacity

Audacity是一款免费、功能强大的音频处理工具

ChatGPT

#!/bin/bash
# 一键编译安装 ALSA / FFmpeg / MPlayer / GStreamer / wxWidgets / Audacity
# 尽可能安装完整模块,适配主流 Linux 发行版
# 作者:ChatGPT

set -e

# =====================
# 检测系统包管理器
# =====================
detect_pkg_manager() {
    if command -v apt-get &>/dev/null; then
        PM="apt-get"
        INSTALL="apt-get install -y"
        UPDATE="apt-get update -y"
    elif command -v dnf &>/dev/null; then
        PM="dnf"
        INSTALL="dnf install -y"
        UPDATE="dnf makecache"
    elif command -v yum &>/dev/null; then
        PM="yum"
        INSTALL="yum install -y"
        UPDATE="yum makecache"
    elif command -v zypper &>/dev/null; then
        PM="zypper"
        INSTALL="zypper install -y"
        UPDATE="zypper refresh"
    elif command -v pacman &>/dev/null; then
        PM="pacman"
        INSTALL="pacman -S --noconfirm"
        UPDATE="pacman -Sy"
    else
        echo "不支持的Linux发行版,请手动安装依赖。"
        exit 1
    fi
}

# =====================
# 安装通用依赖
# =====================
install_build_deps() {
    echo ">>> 安装构建工具和依赖"
    $UPDATE
    $INSTALL git wget curl build-essential autoconf automake libtool pkg-config \
        gcc g++ make cmake meson ninja-build yasm nasm unzip \
        python3 python3-pip
}

# =====================
# 安装额外依赖(针对多媒体)
# =====================
install_media_deps() {
    echo ">>> 安装多媒体依赖库"
    case $PM in
        apt-get)
            $INSTALL \
                libasound2-dev libncurses5-dev \
                libx11-dev libxext-dev libxv-dev libxinerama-dev \
                libpng-dev libjpeg-dev libtiff-dev libexpat1-dev \
                libfreetype6-dev libfontconfig1-dev libfribidi-dev \
                libgl1-mesa-dev libglu1-mesa-dev \
                libsndfile1-dev libsoundtouch-dev libsamplerate0-dev \
                portaudio19-dev libjack-jackd2-dev \
                libmp3lame-dev libopus-dev libvorbis-dev libvpx-dev \
                libx264-dev libx265-dev libaom-dev libdav1d-dev \
                libfdk-aac-dev libsdl2-dev libgnutls28-dev \
                gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
                gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
            ;;
        dnf|yum)
            $INSTALL \
                alsa-lib-devel ncurses-devel \
                libX11-devel libXext-devel libXv-devel libXinerama-devel \
                libpng-devel libjpeg-devel libtiff-devel expat-devel \
                freetype-devel fontconfig-devel fribidi-devel \
                mesa-libGL-devel mesa-libGLU-devel \
                libsndfile-devel soundtouch-devel libsamplerate-devel \
                portaudio-devel jack-audio-connection-kit-devel \
                lame-devel opus-devel libvorbis-devel libvpx-devel \
                x264-devel x265-devel aom-devel dav1d-devel \
                fdk-aac-devel SDL2-devel gnutls-devel \
                gstreamer1 gstreamer1-plugins-base gstreamer1-plugins-good \
                gstreamer1-plugins-bad-free gstreamer1-plugins-ugly gstreamer1-libav
            ;;
        zypper)
            $INSTALL \
                alsa-devel ncurses-devel \
                libX11-devel libXext-devel libXv-devel libXinerama-devel \
                libpng16-devel libjpeg62-devel libtiff-devel expat-devel \
                freetype2-devel fontconfig-devel fribidi-devel \
                Mesa-libGL-devel Mesa-libGLU-devel \
                libsndfile-devel soundtouch-devel libsamplerate-devel \
                portaudio-devel libjack-devel \
                lame-devel opus-devel libvorbis-devel libvpx-devel \
                x264-devel x265-devel libaom-devel libdav1d-devel \
                fdk-aac-devel libSDL2-devel gnutls-devel \
                gstreamer-plugins-base gstreamer-plugins-good \
                gstreamer-plugins-bad gstreamer-plugins-ugly gstreamer-libav
            ;;
        pacman)
            $INSTALL \
                alsa-lib ncurses \
                libx11 libxext libxv libxinerama \
                libpng libjpeg-turbo libtiff expat \
                freetype2 fontconfig fribidi \
                mesa glu \
                libsndfile soundtouch libsamplerate \
                portaudio jack2 \
                lame opus libvorbis libvpx \
                x264 x265 aom dav1d fdk-aac sdl2 gnutls \
                gstreamer gst-plugins-base gst-plugins-good \
                gst-plugins-bad gst-plugins-ugly gst-libav
            ;;
    esac
}

# =====================
# 下载 & 解压
# =====================
download_and_extract() {
    local url=$1
    local tarfile=$(basename "$url")
    wget -c "$url"
    tar -xf "$tarfile"
}

# =====================
# 各组件编译安装函数
# =====================

install_alsa() {
    echo ">>> 编译安装 ALSA 驱动"
    git clone --depth=1 https://github.com/alsa-project/alsa-driver.git
    cd alsa-driver
    ./gitcompile
    make -j$(nproc)
    sudo make install
    cd ..
}

install_ffmpeg() {
    echo ">>> 编译安装 FFmpeg"
    git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
    cd ffmpeg
    ./configure --prefix=/usr/local \
        --enable-gpl --enable-nonfree \
        --enable-libx264 --enable-libx265 --enable-libvpx \
        --enable-libmp3lame --enable-libopus --enable-libvorbis \
        --enable-libaom --enable-libdav1d --enable-libfdk-aac \
        --enable-libfreetype --enable-libfontconfig --enable-libfribidi \
        --enable-libopenjpeg --enable-libtheora --enable-libspeex \
        --enable-libass --enable-libbluray --enable-openssl \
        --enable-libsrt --enable-libzmq --enable-libzvbi \
        --enable-sdl2 --enable-gnutls
    make -j$(nproc)
    sudo make install
    cd ..
}

install_mplayer() {
    echo ">>> 编译安装 MPlayer"
    git clone --depth=1 https://github.com/mirror/mplayer.git
    cd mplayer
    ./configure --prefix=/usr/local --enable-gui --enable-ffmpeg_a
    make -j$(nproc)
    sudo make install
    cd ..
}

install_gstreamer() {
    echo ">>> 编译安装 GStreamer"
    git clone --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git
    cd gstreamer
    meson setup build --prefix=/usr/local
    ninja -C build
    sudo ninja -C build install
    cd ..
}

install_wxwidgets() {
    echo ">>> 编译安装 wxWidgets"
    git clone --depth=1 https://github.com/wxWidgets/wxWidgets.git
    cd wxWidgets
    mkdir build && cd build
    ../configure --enable-unicode --with-opengl --prefix=/usr/local
    make -j$(nproc)
    sudo make install
    sudo ldconfig
    cd ../..
}

install_audacity() {
    echo ">>> 编译安装 Audacity"
    git clone --depth=1 https://github.com/audacity/audacity.git
    cd audacity
    mkdir build && cd build
    cmake .. -Daudacity_use_ffmpeg=loaded -Daudacity_use_wxwidgets=system -Daudacity_use_portaudio=system -Daudacity_use_sndfile=system -Daudacity_use_soundtouch=system
    make -j$(nproc)
    sudo make install
    cd ../..
}

# =====================
# 主菜单
# =====================
main_menu() {
    echo "=========================================="
    echo " 一键编译安装脚本 (ALSA/FFmpeg/MPlayer/GStreamer/wxWidgets/Audacity)"
    echo "=========================================="
    echo "请选择要安装的组件 (可多选,用空格分隔):"
    echo "1) ALSA 驱动"
    echo "2) FFmpeg"
    echo "3) MPlayer"
    echo "4) GStreamer"
    echo "5) wxWidgets"
    echo "6) Audacity"
    echo "7) 全部安装"
    echo "0) 退出"
    echo "=========================================="
    read -p "输入选择: " choices

    detect_pkg_manager
    install_build_deps
    install_media_deps

    for choice in $choices; do
        case $choice in
            1) install_alsa ;;
            2) install_ffmpeg ;;
            3) install_mplayer ;;
            4) install_gstreamer ;;
            5) install_wxwidgets ;;
            6) install_audacity ;;
            7) install_alsa; install_ffmpeg; install_mplayer; install_gstreamer; install_wxwidgets; install_audacity ;;
            0) echo "退出"; exit 0 ;;
            *) echo "无效选择: $choice" ;;
        esac
    done
}

main_menu
  1. 增加了各组件依赖安装,保证编译完整功能。

  2. FFmpeg 打开了几乎所有主流 codec 支持。

  3. MPlayer 增加 GUI + ffmpeg 支持。

  4. Audacity 使用系统依赖,保证插件功能齐全。

  5. 脚本适配主流包管理器,覆盖大多数 Linux。

⚙️ 脚本特性

  • 自动检测系统包管理器(apt、yum/dnf、zypper、pacman)。

  • 自动安装编译依赖。

  • 使用 git clone --depth=1 下载最新源码。

  • 支持交互式选择(单独安装或全部安装)。

  • 各组件独立函数,方便扩展。

 

Kimi

#!/usr/bin/env bash
# ------------------------------------------------------------------
#  Linux 全发行版 一键最新源码编译安装
#  ALSA + FFmpeg + MPlayer + GStreamer + wxWidgets + Audacity
#  https://github.com/your-id/alsa-ffmpeg-builder
# ------------------------------------------------------------------
set -euo pipefail
log=~/alsa-ffmpeg-builder.log
exec > >(tee -a "$log") 2>&1

# ---------------- 颜色 ----------------
R="\e[31m";G="\e[32m";Y="\e[33m";B="\e[34m";N="\e[0m"
info()  { echo -e "${G}[INFO]${N} $*";}
warn()  { echo -e "${Y}[WARN]${N} $*";}
error() { echo -e "${R}[ERR ]${N} $*";}
die()   { error "$*"; exit 1;}

# ---------------- 判断包管理器 ----------------
if command -v apt-get >/dev/null; then
    PM="apt";INSTALL="sudo apt-get install -y";DEPS="build-essential git wget curl pkg-config autoconf automake libtool cmake ninja-build meson yasm nasm flex bison gettext libssl-dev libdrm-dev libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev libvorbis-dev libass-dev libfreetype6-dev libfontconfig1-dev libfribidi-dev libgnutls28-dev libcurl4-openssl-dev libxml2-dev libbz2-dev liblzo2-dev libgif-dev libjpeg-dev libpng-dev libwebp-dev libtiff5-dev libsdl2-dev libva-dev libvdpau-dev libdrm-intel1 libgl1-mesa-dev libglu1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libgtk-3-dev libasound2-dev libpulse-dev libpulse0 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-pulseaudio libwebkit2gtk-4.0-dev libwxgtk3.2-gtk3-dev zlib1g-dev liblzma-dev libcdio-paranoia-dev libdvdread-dev libdvdnav-dev libbluray-dev libgnutls30 libxml2-dev libavc1394-dev libiec61883-dev libjack-dev libsndfile1-dev libsamplerate0-dev portaudio19-dev libavformat-dev libavcodec-dev libavutil-dev libswresample-dev libswscale-dev libavdevice-dev libavfilter-dev"
elif command -v dnf >/dev/null; then
    PM="dnf";INSTALL="sudo dnf install -y";DEPS="gcc gcc-c++ git wget curl pkgconfig autoconf automake libtool cmake ninja-build yasm nasm flex bison gettext openssl-devel libdrm-devel x264-devel x265-devel libvpx-devel fdk-aac-devel lame-devel libopus-devel libvorbis-devel libass-devel freetype-devel fontconfig-devel fribidi-devel gnutls-devel libcurl-devel libxml2-devel bzip2-devel lzo-devel giflib-devel libjpeg-turbo-devel libpng-devel libwebp-devel libtiff-devel SDL2-devel libva-devel libvdpau-devel mesa-libGL-devel mesa-libGLU-devel mesa-libEGL-devel mesa-libGLES-devel gtk3-devel alsa-lib-devel pulseaudio-libs-devel gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-plugins-bad-devel gstreamer1-libav gstreamer1-plugins-ugly gstreamer1-plugins-good gstreamer1-plugins-bad-free webkit2gtk3-devel wxGTK3-devel zlib-devel xz-devel libcdio-paranoia-devel libdvdread-devel libdvdnav-devel libbluray-devel gnutls-devel libxml2-devel libiec61883-devel jack-audio-connection-kit-devel libsndfile-devel libsamplerate-devel portaudio-devel ffmpeg-devel"
elif command -v pacman >/dev/null; then
    PM="pacman";INSTALL="sudo pacman -S --needed --noconfirm";DEPS="base-devel git wget curl pkgconf autoconf automake libtool cmake ninja yasm nasm flex bison gettext openssl libdrm x264 x265 libvpx fdk-aac lame libopus libvorbis libass freetype2 fontconfig fribidi gnutls curl libxml2 bzip2 lzo giflib libjpeg-turbo libpng webp libtiff sdl2 libva libvdpau mesa gtk3 alsa-lib pulseaudio gstreamer gst-plugins-base gst-plugins-bad gst-libav gst-plugins-ugly gst-plugins-good webkit2gtk wxwidgets-gtk3 zlib xz libcdio-paranoia libdvdread libdvdnav libbluray jack libsndfile libsamplerate portaudio ffmpeg"
elif command -v apk >/dev/null; then
    PM="apk";INSTALL="sudo apk add";DEPS="build-base git wget curl pkgconf autoconf automake libtool cmake samurai yasm nasm flex bison gettext-dev openssl-dev libdrm-dev x264-dev x265-dev libvpx-dev fdk-aac-dev lame-dev opus-dev vorbis-dev ass-dev freetype-dev fontconfig-dev fribidi-dev gnutls-dev curl-dev libxml2-dev bzip2-dev lzo-dev giflib-dev jpeg-dev libpng-dev libwebp-dev tiff-dev sdl2-dev libva-dev libvdpau-dev mesa-dev gtk+3.0-dev alsa-lib-dev pulseaudio-dev gstreamer-dev gst-plugins-base-dev gst-plugins-bad-dev gst-libav gst-plugins-ugly gst-plugins-good webkit2gtk-dev wxwidgets-dev zlib-dev xz-dev libcdio-paranoia-dev dvdread-dev dvdnav-dev bluray-dev jack-dev libsndfile-dev libsamplerate-dev portaudio-dev ffmpeg-dev"
else
    die "暂不支持您的包管理器,欢迎 PR!"
fi

# ---------------- 通用变量 ----------------
CPU=$(nproc)
PREFIX="/usr/local"
SRC="$HOME/.cache/alsa-ffmpeg-builder"
mkdir -p "$SRC"
cd "$SRC"

# ---------------- 菜单 ----------------
COMPONENTS=(alsa ffmpeg mplayer gstreamer wxwidgets audacity)
declare -A SEL
for c in "${COMPONENTS[@]}"; do SEL[$c]=1; done   # 默认全选

whiptail --title "安装选项" --checklist \
  "空格勾选/取消,回车确认" 20 78 12 \
  "alsa"       "最新 ALSA driver/lib/utils" ON \
  "ffmpeg"     "最新 FFmpeg(全模块)" ON \
  "mplayer"    "最新 MPlayer + 编码器" ON \
  "gstreamer"  "最新 GStreamer + 全家插件" ON \
  "wxwidgets"  "最新 wxWidgets(GTK3)" ON \
  "audacity"   "最新 Audacity(wx+ffmpeg)" ON 2>/tmp/opts || exit 0
for o in $(</tmp/opts); do
    o=${o//\"/}
    [[ " $o " == *" "* ]] && continue
    SEL[$o]=0
done

# ---------------- 依赖 ----------------
info "安装系统依赖($PM)..."
$INSTALL $DEPS

# ---------------- 编译函数 ----------------
build_alsa(){
    info "==> 编译 ALSA ..."
    git clone --depth=1 git://git.alsa-project.org/alsa-driver.git alsa-driver
    git clone --depth=1 git://git.alsa-project.org/alsa-lib.git alsa-lib
    git clone --depth=1 git://git.alsa-project.org/alsa-utils.git alsa-utils
    (cd alsa-driver && ./gitcompile && sudo ./snddevices)
    (cd alsa-lib && ./gitcompile && sudo make install)
    (cd alsa-utils && ./gitcompile && sudo make install)
    sudo ldconfig
}
build_ffmpeg(){
    info "==> 编译 FFmpeg ..."
    git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
    cd ffmpeg
    ./configure --prefix="$PREFIX" --enable-gpl --enable-version3 --enable-nonfree \
      --enable-shared --enable-pic --disable-static --disable-debug \
      --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac \
      --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libass \
      --enable-libfreetype --enable-libfontconfig --enable-libfribidi \
      --enable-openssl --enable-libdrm --enable-vaapi --enable-vdpau \
      --enable-libxml2 --enable-libbluray --enable-libgnutls \
      --arch=native --extra-cflags="-O3 -march=native" \
      --extra-ldflags="-Wl,-rpath,$PREFIX/lib"
    make -j$CPU
    sudo make install
    sudo ldconfig
}
build_mplayer(){
    info "==> 编译 MPlayer ..."
    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
    cd mplayer
    ./configure --prefix="$PREFIX" --enable-gui --enable-largefiles \
      --enable-menu --enable-alsa --enable-pulse --enable-jack \
      --enable-xv --enable-gl --enable-vdpau --enable-vaapi \
      --enable-freetype --enable-fontconfig --enable-libass \
      --codecsdir=/usr/local/lib/codecs
    make -j$CPU
    sudo make install
    sudo ldconfig
}
build_gstreamer(){
    info "==> 编译 GStreamer 全家桶 ..."
    PKGS="gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav"
    for p in $PKGS; do
        git clone --depth=1 https://gitlab.freedesktop.org/gstreamer/$p.git
    done
    export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig"
    for p in $PKGS; do
        cd $p
        meson setup build --prefix="$PREFIX" --buildtype=release -Dgtk_doc=disabled -Dtests=disabled
        ninja -C build
        sudo ninja -C build install
        cd ..
    done
    sudo ldconfig
}
build_wxwidgets(){
    info "==> 编译 wxWidgets ..."
    VER=$(curl -s https://api.github.com/repos/wxWidgets/wxWidgets/releases/latest | grep tag_name | cut -d'"' -f4)
    wget -c https://github.com/wxWidgets/wxWidgets/releases/download/$VER/wxWidgets-$VER.tar.bz2
    tar -xf wxWidgets-$VER.tar.bz2
    cd wxWidgets-*
    mkdir build-gtk && cd build-gtk
    ../configure --prefix="$PREFIX" --with-gtk=3 --with-opengl --enable-unicode --enable-shared
    make -j$CPU
    sudo make install
    sudo ldconfig
}
build_audacity(){
    info "==> 编译 Audacity ..."
    git clone --depth=1 https://github.com/audacity/audacity.git
    cd audacity
    mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX="$PREFIX" -Daudacity_use_ffmpeg=system -Daudacity_use_midi=on -Daudacity_use_lv2=on
    make -j$CPU
    sudo make install
    sudo ldconfig
}

# ---------------- 主流程 ----------------
for c in "${COMPONENTS[@]}"; do
    [[ ${SEL[$c]} -eq 1 ]] || continue
    case $c in
        alsa)      build_alsa ;;
        ffmpeg)    build_ffmpeg ;;
        mplayer)   build_mplayer ;;
        gstreamer) build_gstreamer ;;
        wxwidgets) build_wxwidgets ;;
        audacity)  build_audacity ;;
    esac
done

info "全部安装完成!可执行文件位于 $PREFIX/bin"
info "日志文件:$log"
  1. 检测发行版并自动安装所需依赖;
  2. 弹出菜单让你勾选想要安装的组件;
  3. 依次从官方最新源码编译安装,默认安装到 /usr/local
  4. 自动处理 ldconfigPKG_CONFIG_PATH 等后续工作;
  5. 全程日志写入 ~/alsa-ffmpeg-builder.log,方便排查。

DeepSeek

#!/bin/bash

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 当前用户
CURRENT_USER=$(whoami)

# 安装目录
INSTALL_DIR="$HOME/multimedia_apps"
SRC_DIR="$INSTALL_DIR/src"
LOG_DIR="$INSTALL_DIR/logs"

# 创建必要的目录
mkdir -p {$SRC_DIR,$LOG_DIR}

# 日志文件
LOG_FILE="$LOG_DIR/install_$(date +%Y%m%d_%H%M%S).log"

# 函数:输出彩色信息
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 函数:记录日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# 函数:检查命令是否存在
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# 函数:检测Linux发行版
detect_distro() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        DISTRO=$ID
        DISTRO_VERSION=$VERSION_ID
    elif command_exists lsb_release; then
        DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
        DISTRO_VERSION=$(lsb_release -sr)
    else
        print_error "无法检测Linux发行版"
        exit 1
    fi
}

# 函数:安装基本依赖
install_dependencies() {
    print_status "安装基本依赖..."
    
    case $DISTRO in
        ubuntu|debian|linuxmint)
            sudo apt-get update >> "$LOG_FILE" 2>&1
            sudo apt-get install -y build-essential git automake autoconf libtool \
            pkg-config yasm nasm cmake make gcc g++ curl wget \
            libasound2-dev libpulse-dev libjack-dev libsndfile1-dev \
            libx11-dev libxext-dev libxrandr-dev libxinerama-dev libxcursor-dev \
            libxi-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev \
            libfreetype6-dev libpng-dev libjpeg-dev libtiff-dev libssl-dev \
            libxml2-dev libxslt1-dev zlib1g-dev libogg-dev libvorbis-dev \
            libmp3lame-dev libopus-dev libvpx-dev libx264-dev libx265-dev \
            libfdk-aac-dev libass-dev libtheora-dev libwebp-dev \
            libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev \
            libswscale-dev libswresample-dev libpostproc-dev \
            libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
            libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev \
            python3 python3-pip >> "$LOG_FILE" 2>&1
            ;;
        fedora|rhel|centos)
            sudo dnf groupinstall -y "Development Tools" >> "$LOG_FILE" 2>&1
            sudo dnf install -y git automake autoconf libtool \
            pkgconfig yasm nasm cmake make gcc gcc-c++ curl wget \
            alsa-lib-devel pulseaudio-libs-devel jack-audio-connection-kit-devel libsndfile-devel \
            libX11-devel libXext-devel libXrandr-devel libXinerama-devel libXcursor-devel \
            libXi-devel mesa-libGL-devel mesa-libGLU-devel freeglut-devel \
            freetype-devel libpng-devel libjpeg-turbo-devel libtiff-devel openssl-devel \
            libxml2-devel libxslt-devel zlib-devel libogg-devel libvorbis-devel \
            lame-devel opus-devel libvpx-devel x264-devel x265-devel \
            fdk-aac-devel libass-devel libtheora-devel libwebp-devel \
            ffmpeg-devel gstreamer1-devel gstreamer1-plugins-base-devel \
            gstreamer1-plugins-good-devel gstreamer1-plugins-bad-free-devel \
            python3 python3-pip >> "$LOG_FILE" 2>&1
            ;;
        arch|manjaro)
            sudo pacman -Syu --noconfirm >> "$LOG_FILE" 2>&1
            sudo pacman -S --noconfirm base-devel git automake autoconf libtool \
            pkg-config yasm nasm cmake make gcc curl wget \
            alsa-lib pulseaudio jack2 libsndfile \
            libx11 libxext libxrandr libxinerama libxcursor \
            libxi mesa freeglut \
            freetype2 libpng libjpeg-turbo libtiff openssl \
            libxml2 libxslt zlib libogg libvorbis \
            lame opus libvpx x264 x265 \
            fdk-aac libass libtheora libwebp \
            ffmpeg gstreamer gstreamer-vaapi gst-plugins-base gst-plugins-good gst-plugins-bad \
            gst-plugins-ugly gst-libav python python-pip >> "$LOG_FILE" 2>&1
            ;;
        opensuse|suse)
            sudo zypper refresh >> "$LOG_FILE" 2>&1
            sudo zypper install -y -t pattern devel_basis >> "$LOG_FILE" 2>&1
            sudo zypper install -y git automake autoconf libtool \
            pkg-config yasm nasm cmake make gcc gcc-c++ curl wget \
            alsa-devel pulseaudio-devel jack-devel libsndfile-devel \
            libX11-devel libXext-devel libXrandr-devel libXinerama-devel libXcursor-devel \
            libXi-devel Mesa-libGL-devel Mesa-libGLU-devel freeglut-devel \
            freetype2-devel libpng16-devel libjpeg-turbo-devel libtiff-devel libopenssl-devel \
            libxml2-devel libxslt-devel zlib-devel libogg-devel libvorbis-devel \
            lame-devel opus-devel libvpx-devel x264-devel x265-devel \
            fdk-aac-devel libass-devel libtheora-devel libwebp-devel \
            ffmpeg-4-devel gstreamer-devel gstreamer-plugins-base-devel \
            gstreamer-plugins-good-devel gstreamer-plugins-bad-devel \
            python3 python3-pip >> "$LOG_FILE" 2>&1
            ;;
        *)
            print_error "不支持的Linux发行版: $DISTRO"
            exit 1
            ;;
    esac
    
    if [ $? -eq 0 ]; then
        print_success "基本依赖安装完成"
    else
        print_error "依赖安装失败,请检查日志: $LOG_FILE"
        exit 1
    fi
}

# 函数:安装ALSA驱动
install_alsa() {
    print_status "开始安装ALSA驱动..."
    
    cd "$SRC_DIR"
    if [ ! -d "alsa-lib" ]; then
        git clone https://github.com/alsa-project/alsa-lib.git >> "$LOG_FILE" 2>&1
    fi
    
    cd alsa-lib
    git pull >> "$LOG_FILE" 2>&1
    ./git-compile.sh >> "$LOG_FILE" 2>&1
    
    if [ $? -eq 0 ]; then
        print_success "ALSA驱动安装完成"
    else
        print_error "ALSA驱动安装失败"
    fi
}

# 函数:安装FFmpeg
install_ffmpeg() {
    print_status "开始安装FFmpeg..."
    
    cd "$SRC_DIR"
    if [ ! -d "ffmpeg" ]; then
        git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg >> "$LOG_FILE" 2>&1
    fi
    
    cd ffmpeg
    git pull >> "$LOG_FILE" 2>&1
    git checkout master >> "$LOG_FILE" 2>&1
    
    ./configure --prefix="$INSTALL_DIR/ffmpeg" \
        --enable-gpl \
        --enable-version3 \
        --enable-nonfree \
        --enable-shared \
        --disable-static \
        --enable-libass \
        --enable-libfdk-aac \
        --enable-libfreetype \
        --enable-libmp3lame \
        --enable-libopus \
        --enable-libvorbis \
        --enable-libvpx \
        --enable-libx264 \
        --enable-libx265 \
        --enable-libwebp \
        --enable-openssl \
        --enable-libpulse \
        --enable-libjack >> "$LOG_FILE" 2>&1
    
    make -j$(nproc) >> "$LOG_FILE" 2>&1
    make install >> "$LOG_FILE" 2>&1
    
    # 添加FFmpeg到PATH
    echo "export PATH=\"$INSTALL_DIR/ffmpeg/bin:\$PATH\"" >> "$HOME/.bashrc"
    echo "export LD_LIBRARY_PATH=\"$INSTALL_DIR/ffmpeg/lib:\$LD_LIBRARY_PATH\"" >> "$HOME/.bashrc"
    export PATH="$INSTALL_DIR/ffmpeg/bin:$PATH"
    export LD_LIBRARY_PATH="$INSTALL_DIR/ffmpeg/lib:$LD_LIBRARY_PATH"
    
    if [ $? -eq 0 ]; then
        print_success "FFmpeg安装完成"
    else
        print_error "FFmpeg安装失败"
    fi
}

# 函数:安装MPlayer
install_mplayer() {
    print_status "开始安装MPlayer..."
    
    cd "$SRC_DIR"
    if [ ! -d "mplayer" ]; then
        git clone https://github.com/mplayerhq/mplayer.git >> "$LOG_FILE" 2>&1
    fi
    
    cd mplayer
    git pull >> "$LOG_FILE" 2>&1
    
    ./configure --prefix="$INSTALL_DIR/mplayer" >> "$LOG_FILE" 2>&1
    make -j$(nproc) >> "$LOG_FILE" 2>&1
    make install >> "$LOG_FILE" 2>&1
    
    # 添加MPlayer到PATH
    echo "export PATH=\"$INSTALL_DIR/mplayer/bin:\$PATH\"" >> "$HOME/.bashrc"
    export PATH="$INSTALL_DIR/mplayer/bin:$PATH"
    
    if [ $? -eq 0 ]; then
        print_success "MPlayer安装完成"
    else
        print_error "MPlayer安装失败"
    fi
}

# 函数:安装GStreamer
install_gstreamer() {
    print_status "开始安装GStreamer..."
    
    case $DISTRO in
        ubuntu|debian|linuxmint)
            sudo apt-get install -y gstreamer1.0-libav \
            gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
            gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-pulseaudio >> "$LOG_FILE" 2>&1
            ;;
        fedora|rhel|centos)
            sudo dnf install -y gstreamer1-libav \
            gstreamer1-plugins-good gstreamer1-plugins-bad-free gstreamer1-plugins-ugly-free \
            gstreamer1-plugins-base-tools gstreamer1-alsa gstreamer1-pulseaudio >> "$LOG_FILE" 2>&1
            ;;
        arch|manjaro)
            sudo pacman -S --noconfirm gst-libav \
            gst-plugins-good gst-plugins-bad gst-plugins-ugly \
            gstreamer-vaapi gst-launch gst-alsa gst-pulse >> "$LOG_FILE" 2>&1
            ;;
        opensuse|suse)
            sudo zypper install -y gstreamer-plugins-libav \
            gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-ugly \
            gstreamer-utils gstreamer-plugins-alsa gstreamer-plugins-pulse >> "$LOG_FILE" 2>&1
            ;;
    esac
    
    if [ $? -eq 0 ]; then
        print_success "GStreamer安装完成"
    else
        print_error "GStreamer安装失败"
    fi
}

# 函数:安装wxWidgets
install_wxwidgets() {
    print_status "开始安装wxWidgets..."
    
    cd "$SRC_DIR"
    if [ ! -d "wxWidgets" ]; then
        git clone https://github.com/wxWidgets/wxWidgets.git >> "$LOG_FILE" 2>&1
    fi
    
    cd wxWidgets
    git pull >> "$LOG_FILE" 2>&1
    git checkout master >> "$LOG_FILE" 2>&1
    
    mkdir -p gtk-build
    cd gtk-build
    
    ../configure --prefix="$INSTALL_DIR/wxwidgets" \
        --with-gtk=3 \
        --enable-unicode \
        --enable-graphics_ctx \
        --enable-mediactrl \
        --with-opengl \
        --enable-webview \
        --with-libpng=sys \
        --with-libjpeg=sys \
        --with-libtiff=sys \
        --with-zlib=sys \
        --with-expat=sys \
        --disable-precomp-headers >> "$LOG_FILE" 2>&1
    
    make -j$(nproc) >> "$LOG_FILE" 2>&1
    make install >> "$LOG_FILE" 2>&1
    
    # 添加wxWidgets到PATH
    echo "export PATH=\"$INSTALL_DIR/wxwidgets/bin:\$PATH\"" >> "$HOME/.bashrc"
    echo "export LD_LIBRARY_PATH=\"$INSTALL_DIR/wxwidgets/lib:\$LD_LIBRARY_PATH\"" >> "$HOME/.bashrc"
    export PATH="$INSTALL_DIR/wxwidgets/bin:$PATH"
    export LD_LIBRARY_PATH="$INSTALL_DIR/wxwidgets/lib:$LD_LIBRARY_PATH"
    
    if [ $? -eq 0 ]; then
        print_success "wxWidgets安装完成"
    else
        print_error "wxWidgets安装失败"
    fi
}

# 函数:安装Audacity
install_audacity() {
    print_status "开始安装Audacity..."
    
    cd "$SRC_DIR"
    if [ ! -d "audacity" ]; then
        git clone https://github.com/audacity/audacity.git >> "$LOG_FILE" 2>&1
    fi
    
    cd audacity
    git pull >> "$LOG_FILE" 2>&1
    git checkout master >> "$LOG_FILE" 2>&1
    
    mkdir -p build
    cd build
    
    cmake -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR/audacity" \
          -DCMAKE_BUILD_TYPE=Release \
          -Daudacity_use_ffmpeg=loaded \
          -Daudacity_use_sbsms=local \
          -Daudacity_use_portaudio=local \
          -Daudacity_use_portmixer=local \
          -Daudacity_use_wxwidgets=local \
          .. >> "$LOG_FILE" 2>&1
    
    make -j$(nproc) >> "$LOG_FILE" 2>&1
    make install >> "$LOG_FILE" 2>&1
    
    # 添加Audacity到PATH
    echo "export PATH=\"$INSTALL_DIR/audacity/bin:\$PATH\"" >> "$HOME/.bashrc"
    export PATH="$INSTALL_DIR/audacity/bin:$PATH"
    
    if [ $? -eq 0 ]; then
        print_success "Audacity安装完成"
    else
        print_error "Audacity安装失败"
    fi
}

# 函数:显示使用说明
show_usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -a, --all          安装所有组件"
    echo "  --alsa             安装ALSA驱动"
    echo "  --ffmpeg           安装FFmpeg"
    echo "  --mplayer          安装MPlayer"
    echo "  --gstreamer        安装GStreamer"
    echo "  --wxwidgets        安装wxWidgets"
    echo "  --audacity         安装Audacity"
    echo "  -h, --help         显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 --all           安装所有组件"
    echo "  $0 --ffmpeg --audacity  只安装FFmpeg和Audacity"
}

# 函数:检查是否需要安装组件
check_install_component() {
    local component=$1
    for arg in "${COMPONENTS_TO_INSTALL[@]}"; do
        if [[ "$arg" == "$component" ]]; then
            return 0
        fi
    done
    return 1
}

# 主函数
main() {
    print_status "开始多媒体环境安装过程"
    log "安装开始时间: $(date)"
    
    # 检测发行版
    detect_distro
    print_status "检测到系统: $DISTRO $DISTRO_VERSION"
    
    # 解析命令行参数
    COMPONENTS_TO_INSTALL=()
    
    if [ $# -eq 0 ]; then
        show_usage
        exit 1
    fi
    
    while [[ $# -gt 0 ]]; do
        case $1 in
            -a|--all)
                COMPONENTS_TO_INSTALL=("alsa" "ffmpeg" "mplayer" "gstreamer" "wxwidgets" "audacity")
                shift
                ;;
            --alsa)
                COMPONENTS_TO_INSTALL+=("alsa")
                shift
                ;;
            --ffmpeg)
                COMPONENTS_TO_INSTALL+=("ffmpeg")
                shift
                ;;
            --mplayer)
                COMPONENTS_TO_INSTALL+=("mplayer")
                shift
                ;;
            --gstreamer)
                COMPONENTS_TO_INSTALL+=("gstreamer")
                shift
                ;;
            --wxwidgets)
                COMPONENTS_TO_INSTALL+=("wxwidgets")
                shift
                ;;
            --audacity)
                COMPONENTS_TO_INSTALL+=("audacity")
                shift
                ;;
            -h|--help)
                show_usage
                exit 0
                ;;
            *)
                print_error "未知选项: $1"
                show_usage
                exit 1
                ;;
        esac
    done
    
    # 安装依赖
    install_dependencies
    
    # 安装选定的组件
    for component in "${COMPONENTS_TO_INSTALL[@]}"; do
        case $component in
            alsa)
                install_alsa
                ;;
            ffmpeg)
                install_ffmpeg
                ;;
            mplayer)
                install_mplayer
                ;;
            gstreamer)
                install_gstreamer
                ;;
            wxwidgets)
                install_wxwidgets
                ;;
            audacity)
                install_audacity
                ;;
        esac
    done
    
    print_success "安装完成!某些组件可能需要重新启动终端或系统才能生效。"
    print_status "安装日志: $LOG_FILE"
    print_status "安装目录: $INSTALL_DIR"
    log "安装结束时间: $(date)"
}

# 执行主函数
main "$@"
  1. 此脚本需要互联网连接以下载源代码和依赖项

  2. 安装过程可能需要较长时间,具体取决于系统性能和网络速度

  3. 某些组件可能需要重新启动终端或系统才能生效

  4. 脚本会尝试适配多种Linux发行版,但可能不适用于所有系统

  5. 安装过程中如有问题,请查看日志文件:~/multimedia_apps/logs/install_*.log


sicnature ---------------------------------------------------------------------
I P 地 址: 216.73.216.166
区 域 位 置: 美国加利福尼亚洛杉矶
系 统 信 息: 美国
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://myzhenai.com.cn/post/4797.html

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注