转载请注明出处: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
-
增加了各组件依赖安装,保证编译完整功能。
-
FFmpeg 打开了几乎所有主流 codec 支持。
-
MPlayer 增加 GUI + ffmpeg 支持。
-
Audacity 使用系统依赖,保证插件功能齐全。
-
脚本适配主流包管理器,覆盖大多数 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"
-
检测发行版并自动安装所需依赖;
-
弹出菜单让你勾选想要安装的组件;
-
依次从官方最新源码编译安装,默认安装到
/usr/local
; -
自动处理
ldconfig
、PKG_CONFIG_PATH
等后续工作; -
全程日志写入
~/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 "$@"
-
此脚本需要互联网连接以下载源代码和依赖项
-
安装过程可能需要较长时间,具体取决于系统性能和网络速度
-
某些组件可能需要重新启动终端或系统才能生效
-
脚本会尝试适配多种Linux发行版,但可能不适用于所有系统
-
安装过程中如有问题,请查看日志文件:
~/multimedia_apps/logs/install_*.log
sicnature ---------------------------------------------------------------------
I P 地 址: 216.73.216.116
区 域 位 置: 美国加利福尼亚洛杉矶
系 统 信 息:

Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
没有评论