转载请注明出处: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.101
区 域 位 置: 美国加利福尼亚洛杉矶
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------

没有评论