-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathbuild-ffmpeg--final-cuda.sh
More file actions
161 lines (138 loc) · 9.17 KB
/
Copy pathbuild-ffmpeg--final-cuda.sh
File metadata and controls
161 lines (138 loc) · 9.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
cat << 'EOF' > bin/build-ffmpeg-skylake.sh
#!/bin/bash
# FFmpeg Build-Skript für Skylake (NVENC, VAAPI, Vulkan)
# 1. System-Abhängigkeiten installieren
sudo apt update && sudo apt install -y libnpth0-dev
# Optional: sudo apt build-dep ffmpeg (benötigt deb-src in sources.list)
# Vor den Symlinks prüfen, ob die NVIDIA-Treiber überhaupt installiert sind
if [ ! -f /usr/lib/x86_64-linux-gnu/libcuda.so.1 ]; then
echo "FEHLER: NVIDIA-Treiber (libcuda.so.1) nicht gefunden!"
echo "Bitte installiere die NVIDIA-Treiber (z.B. nvidia-driver-535) zuerst."
exit 1
fi
# 2. NVIDIA Symlinks sicherstellen (VOR dem Build für configure)
sudo ln -sf /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so
sudo ln -sf /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so
sudo ln -sf /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so
# Verzeichnisse definieren
LIB_DIR="/usr/lib/x86_64-linux-gnu"
# 3. FFmpeg Konfiguration
PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH" \
./configure --prefix=/usr \
--libdir=/usr/lib/x86_64-linux-gnu \
--incdir=/usr/include/x86_64-linux-gnu \
--extra-version="ultra-skylake" \
--disable-everything \
--arch=x86_64 \
--cpu=skylake \
--extra-cflags='-march=skylake -O3 -pipe -fPIC -ffunction-sections -fdata-sections -fno-semantic-interposition -I/usr/include/vulkan' \
--extra-cxxflags='-march=skylake -O3 -pipe -fPIC -ffunction-sections -fdata-sections' \
--extra-ldflags='-L/usr/lib/x86_64-linux-gnu -Wl,-O3 -Wl,-rpath,/usr/lib/x86_64-linux-gnu -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections' \
--extra-libs='-Wl,--start-group -lshaderc_combined -lglslang -lMachineIndependent -lGenericCodeGen -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -Wl,--end-group -lplacebo -lvulkan -lstdc++ -lm' \
--enable-ffmpeg --enable-ffplay --enable-ffprobe --enable-avdevice --enable-avcodec --enable-avformat --enable-avfilter --enable-swresample --enable-swscale \
--enable-pthreads --enable-shared --disable-static --enable-sdl2 --enable-gnutls --disable-debug --disable-doc --enable-libbluray --enable-libxml2 \
--enable-gpl --enable-nonfree --enable-pic --enable-stripping --enable-lto \
--enable-cuda-llvm --enable-nvenc --enable-nvdec --enable-cuvid --enable-libnpp --enable-ffnvcodec --enable-cuda-nvcc \
--enable-vulkan --enable-libplacebo --enable-libshaderc --enable-opengl --enable-libdrm --enable-libjack --disable-vdpau --disable-vaapi \
--enable-libdvdnav --enable-libdvdread --disable-xlib \
--enable-avx --enable-avx2 --enable-version3 \
--enable-hwaccels \
--enable-hwaccel='av1_vulkan,ffv1_vulkan,h264_vulkan,hevc_vulkan,prores_raw_vulkan,vp9_vulkan,av1_nvdec,h264_nvdec,hevc_nvdec,mjpeg_nvdec,mpeg1_nvdec,mpeg2_nvdec,mpeg4_nvdec,vc1_nvdec,vp8_nvdec,vp9_nvdec,wmv3_nvdec' \
--enable-gnutls --enable-gmp --enable-gcrypt --enable-network \
--enable-libvpx --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis \
--enable-libfreetype --enable-libharfbuzz --enable-libfribidi --enable-hardcoded-tables \
--enable-ladspa --enable-lv2 --enable-librubberband --enable-libsoxr --enable-libbs2b --enable-libmysofa --enable-alsa --enable-libjack \
--enable-libx264 --enable-libx265 --disable-libpulse \
--enable-indev='v4l2,alsa,jack,lavfi,fbdev,xcbgrab,kmsgrab,xv' \
--enable-outdev='sdl2,v4l2,alsa,fbdev' \
--enable-protocol='async,bluray,cache,concat,crypto,data,ffrtmpcrypt,file,ftp,hls,http,https,httpproxy,icecast,md5,pipe,rtmp,rtmpe,rtmps,rtmpt,rtmpte,rtp,srtp,subfile,tcp,tls,udp,udplite,unix' \
--enable-demuxer='image2,image2pipe,image_bmp_pipe,image_jpeg_pipe,image_png_pipe,aac,ac3,adpcm_ima_qt,adpcm_ima_wav,adpcm_ms,aiff,asf,avi,dash,dts,dtshd,eac3,flac,flv,h264,hevc,hls,image2,matroska,mjpeg,mov,mp3,mpegps,mpegts,mpegvideo,null,ogg,opus,pcm_alaw,pcm_f32be,pcm_f32le,pcm_mulaw,pcm_s16be,pcm_s16le,pcm_s24be,pcm_s24le,pcm_s32be,pcm_s32le,rawvideo,rm,rtp,rtsp,srt,truehd,vobsub,wav,webm_dash_manifest,dvdnav,dvdread' \
--enable-muxer='image2,image2pipe,image_bmp_pipe,image_jpeg_pipe,image_png_pipe,aac,ac3,adpcm_ima_qt,adpcm_ima_wav,adpcm_ms,adts,av1,avi,dash,eac3,flac,flv,h264,hevc,hls,image2,matroska,mjpeg,mkv,mov,mp3,mp4,mpegts,null,ogg,opus,rtmp,rtp,rtsp,wav,dvdsub' \
--enable-decoder='jpeg2000,ape,apng,mjpegb,jpegls,mjpeg,png,wrapped_avframe,prores,prores_raw,h264_vulkan,hevc_vulkan,vp9,h264_cuvid,hevc_cuvid,mjpeg_cuvid,mpeg1_cuvid,mpeg2_cuvid,mpeg4_cuvid,vc1_cuvid,vp8_cuvid,vp9_cuvid,av1_cuvid,libfdk_aac,mpeg1video,mpeg2video,mpeg4,aac,mp3,flac,vorbis,opus,pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be,pcm_s32le,pcm_s32be,pcm_f32le,pcm_f32be,pcm_s64le,pcm_s64be,pcm_f64le,pcm_f64be,pcm_u8,pcm_alaw,pcm_mulaw,rawvideo,adpcm_ms,adpcm_ima_wav,adpcm_ima_qt,adpcm_swf,ass,srt,dvdsub,dvbsub,mov_text' \
--enable-encoder='jpeg2000,adpcm_yamaha,apng,jpegls,mjpeg,png,prores,prores_ks,h264_vulkan,huffyuv,hevc_vulkan,ffv1_vulkan,prores_ks_vulkan,av1_vulkan,av1_nvenc,h264_nvenc,hevc_nvenc,libfdk_aac,libmp3lame,libopus,libvorbis,ac3,eac3,flac,vorbis,pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be,pcm_s32le,pcm_s32be,pcm_f32le,pcm_f32be,pcm_s64le,pcm_s64be,pcm_f64le,pcm_f64be,pcm_u8,pcm_alaw,pcm_mulaw,rawvideo,adpcm_ms,adpcm_ima_wav,adpcm_ima_qt,ass,srt,dvdsub,mov_text' \
--enable-filter='pipe,gblur_vulkan,acopy,copy,anull,framestep,settb,anullsink,anullsrc,null,nullsink,nullsrc,buffersrc,format,buffer,buffersink,abuffer,abuffersink,hwdownload,hwmap,hwupload,adelay,aecho,afifo,amix,aresample,aformat,asetpts,asplit,colorspace,crystalizer,crop,drawtext,equalizer,firequalizer,scale_cuda,hwupload_cuda,bilateral_cuda,thumbnail_cuda,bwdif_cuda,chromakey_cuda,colorspace_cuda,overlay_cuda,pad_cuda,yadif_cuda,ladspa,libplacebo,loudnorm,lv2,nullsrc,overlay,palettegen,paletteuse,pan,rubberband,scale,scale_npp,setpts,transpose,volume' \
--enable-parser='jpeg2000,jpegxl,png,h264,hevc,vp9,av1,mjpeg,mpegvideo,mpeg4video,aac,mp3,flac,opus,vorbis,ac3,dca,adpcm_ms,adpcm_ima_wav,adpcm_ima_qt,dvdsub,dvd_pel' \
--enable-bsf='av1_frame_merge,av1_frame_split,apv_metadata,av1_metadata,h264_metadata,hevc_metadata,mpeg2_metadata,opus_metadata,prores_metadata,vp9_metadata,vvc_metadata,aac_adtstoasc,h264_mp4toannexb,hevc_mp4toannexb,mjpeg2jpeg,mpeg4_unpack_bframes,null,pcm_rechunk,vp9_superframe' \
--enable-asm --enable-x86asm --enable-inline-asm --enable-runtime-cpudetect --disable-indev=pulse,oss,sndio --disable-outdev=pulse,oss,sndio --disable-libpulse \
if [ $? -eq 0 ]; then
make -j$(nproc)
sudo make install
# 4. Stripping
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libavcode*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libavdevic*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libavfilte*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libavforma*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libavutil*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libpostpro*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libswresampl*
sudo strip --strip-unneeded /usr/lib/x86_64-linux-gnu/libswscale*
# 5. NVIDIA Symlinks final sicherstellen
sudo ln -sf $LIB_DIR/libcuda.so.1 $LIB_DIR/libcuda.so
sudo ln -sf $LIB_DIR/libnvidia-encode.so.1 $LIB_DIR/libnvidia-encode.so
sudo ln -sf $LIB_DIR/libnvcuvid.so.1 $LIB_DIR/libnvcuvid.so
sudo ldconfig
ls -l /usr/lib/x86_64-linux-gnu/libav* /usr/lib/x86_64-linux-gnu/libsw* /usr/lib/x86_64-linux-gnu/libpostproc* | awk '{sum += $5} END {print sum / 1024 / 1024 " MB"}'
echo "Build & Stripping erfolgreich abgeschlossen!"
else
echo "Fehler während der Konfiguration!"
exit 1
fi
EOF
chmod +x bin/build-ffmpeg-skylake.sh
###############################################################################################################
mkdir -p bin
cat << 'EOF' > bin/build-mpv-skylake.sh
#!/bin/bash
# mpv Build-Skript für Skylake (Vulkan, CUDA, Wayland - No X11/Pulse)
# 1. Abhängigkeiten und Quellen laden
sudo apt update
sudo apt build-dep -y mpv
apt source mpv
# Ins mpv-Verzeichnis wechseln (sucht den Ordner automatisch)
cd mpv-*/ || { echo "mpv-Quellordner nicht gefunden"; exit 1; }
# 2. Optimierungen setzen
export CFLAGS="-march=skylake -mtune=skylake -O3 -pipe -fno-semantic-interposition"
export LDFLAGS="-Wl,-O3 -Wl,--as-needed -Wl,--gc-sections"
# 3. Meson Konfiguration
meson setup build \
--prefix=/usr \
--libdir=/usr/lib/x86_64-linux-gnu \
-Dcuda-hwaccel=enabled \
-Dcuda-interop=enabled \
-Dwayland=enabled \
-Db_lto=true \
-Ddmabuf-wayland=enabled \
-Dvulkan=enabled \
-Ddrm=enabled \
-Dgbm=enabled \
-Degl-wayland=enabled \
-Degl-drm=enabled \
-Dgl=enabled \
-Dalsa=enabled \
-Dpipewire=enabled \
-Dpulse=disabled \
-Dx11=disabled \
-Dvaapi=disabled \
-Dvdpau=disabled \
-Dvdpau-gl-x11=disabled \
-Dandroid-media-ndk=disabled \
-Dmacos-11-features=disabled \
-Dmacos-touchbar=disabled \
-Dswift-build=disabled \
-Dwin32-smtc=disabled \
-Dd3d11=disabled \
-Ddirect3d=disabled \
-Dsdl2-video=disabled \
-Dsdl2-audio=disabled \
-Dopenal=disabled \
-Dmanpage-build=disabled \
-Dhtml-build=disabled \
-Dlibmpv=true
# 4. Kompilieren und Installieren
meson compile -C build
sudo meson install -C build
sudo ldconfig
echo "mpv Build erfolgreich abgeschlossen!"
EOF
chmod +x bin/build-mpv-skylake.sh
grep "ffplay_deps" ffbuild/config.log