#!/bin/bash . /etc/bash/gaboshlib.include g_nice [ -z "$@" ] && g_yesno '!!! WARNUNG !!! Dieses Progamm sucht Mediendateien (Videos, Audios und Bilder) und konvertiert sie mit dem Ziel diese deutlich platzsparender speichern zu können. Die Qualität kann, muss aber nicht spürbar schlechter werden. Folgende Dinge werden getan: Videos ====== - Auflösung wird auf wahlweise maximal HD 720p oder DVD 480p skaliert. Bei niedrigeren Auflösungen wird nicht skaliert. - Maximale Bitrate von 3600k an Auflösung bzw. Bitrate des Originalvideos orientiert. - Videocodec HEVC (h265). - Audiocodec in Videos AC3@384k (bei 5.1 oder mehr) und HeAACv2@48k (Stereo) bei untrer 5.1. sowie bei Mono Audiospuren wird HeAAC@24k verwendet. - Als Containerformat für Video-Dateien wird MP4 genutzt. - Untertitel falls nicht notwendig (forced) werden gelöscht. Nötige Untertitel werden ins Bild eingefügt. Audios ====== - Als Containerformat für Audio-Dateien wird MP4 genutzt. - Als Codec wird HeAAC bzw HeAACv2 (für Stereo) genutzt. - Mehrfache Audiospuren (z.B. verschiedene Sprachen in Videos werden gelöscht). Nur eine Audiospur bzw. Deutsch falls vorhanden wird beibehalten. - Mehr Kanäle wie zwei (z.B. 5.1) werden auf Stereo reduziert. - Tags (auch eingebettete Bilder,...) sofern vorhanden werden bis auf Title, Artist, Album, Date, Tracknum und Genre entfernt. - Aus bleibenden Tags werden Spezialzeichen ersetzt und bei kyrillischen Tags wird eine Transliteration in lateinische Zeichen hinzugefügt. Bilder ====== - Als Bildformat wir JPEG verwendet. Alle nicht JPEG-Bilder werden zu JPEG konvertiert. - Bilder werden zu 85% komprimiert. - Bilder werden auf maximal 1080p herunterskaliert. - Bilder werden "normalisiert" (Farbausgleich) um ggf. die Qualität sogar zu verbessern. - In den Metadaten (EXIF) wird ein Kommentar hinzugefügt um bearbeitete Bilder zu markieren, damit sie nicht erneut bearbeitet werden. Nicht bash-konformene Zeichen wie z.B. |, (,... werden aus Dateinamen entfernt. Es sollte mit Kopien z.B. in einem Testordner vorab die Qualität geprüft werden. Während die Verarbeitung läuft wird die CPU und ggf. auch GPU stark in Anspruch genommen, was zu erhöhtem Stromverbrauch und Hitzeentwicklung führt. Bitte nicht z.B. bei Laptops auf Akku laufen lassen und darauf auchten, dass Lüfter nicht blockiert oder Lüftungsschlitze nicht verdeckt sind. Bei längerer Nutzung auch die Stromrechnung im Blick behalten. Die Priorität des Prozesses wird auf die niedrigste Stufe gesetzt, so dass "normale" Arbeit auf dem Gerät weiterhin möglich sein sollte. Soll wirklich fortgefahren werden? ' [ -z $DISPLAY ] || vidres=$(zenity --width=300 --height=300 --list --title="Videoauflösung" --text="Auf welche Videoauflösung soll maximal skaliert werden?" --column="Auflösung" "HD 720p" "DVD 480p") if [ -z "$vidres" ] then #g_echo "Keine maximale Videoauflösung angegeben. - gehe von HD 720p aus" vidres="HD 720p" fi if [ -z "$@" ] then mediapath=$(g_select-path "Suchpfad für Mediendateien angeben") else mediapath="$@" [ -d "$mediapath" ] || [ -e "$mediapath" ] || g_echo_error_exit "$mediapath ist weder ein Pfad noch eine Datei" fi [ -f /etc/gtc/share/rename-subs/nospecial ] && gtc-rename -r /etc/gtc/share/rename-subs/nospecial -p "$mediapath" [ -f /root/rename-subs/nospecial ] && gtc-rename -r /root/rename-subs/nospecial -p "$mediapath" g_echo "Searching for Images in $mediapath" g_find_image "$mediapath" | while read image do g_compress_image $image done g_echo "Searching for Audios in $mediapath" g_find_audio "$mediapath" | while read audio do g_compress_audio $audio done g_echo "Searching for Videos in $mediapath" find /tmp -name "*.g_progressing" -type f -user $(whoami) -delete >/dev/null 2>&1 cputhreads=$(cat /proc/cpuinfo | grep processor | wc -l) ffmpegparallel=$(echo "$cputhreads/3" | bc -l | xargs printf %.0f) if [ $ffmpegparallel -gt 1 ] then g_trap_exit="$g_trap_exit ; tmux kill-session -t g_ffmpegparallel >/dev/null 2>&1" trap "$g_trap_exit" EXIT echo $vidres | grep -q "480p" && dvdres="echo \$\$ >\"\$g_tmp\"/VID-SD" g_find_video "$mediapath" >~/.g_tmpvidlist vidnum=$(cat ~/.g_tmpvidlist | wc -l) [ $ffmpegparallel -gt $vidnum ] && ffmpegparallel=$vidnum g_echo "Doing $ffmpegparallel parallel encodings" seq $ffmpegparallel | while read num do if [ $num -eq 1 ] then if echo $vidres | grep -q "480p" then echo -n 'tmux new -s g_ffmpegparallel ". /etc/bash/gaboshlib.include; echo \$\$ >"\$g_tmp"/VID-SD; cat ~/.g_tmpvidlist | sort -R | while read video; do g_compress_video \$video; done" ' >$g_tmp/g_vidcmd echo -n '\; split-window -d ". /etc/bash/gaboshlib.include; echo \$\$ >"\$g_tmp"/VID-SD; cat ~/.g_tmpvidlist | sort -R | while read video; do g_compress_video \$video; done" \; select-layout even-vertical ' >>$g_tmp/g_vidcmd else echo -n 'tmux new -s g_ffmpegparallel ". /etc/bash/gaboshlib.include; cat ~/.g_tmpvidlist | sort -R | while read video; do g_compress_video \$video; done" ' >$g_tmp/g_vidcmd fi else if echo $vidres | grep -q "480p" then echo -n "\; split-window -d \" sleep $num ; " >>$g_tmp/g_vidcmd echo -n '. /etc/bash/gaboshlib.include; echo \$\$ >"\$g_tmp"/VID-SD; cat ~/.g_tmpvidlist | sort -R | while read video; do g_compress_video \$video; done" \; select-layout even-vertical ' >>$g_tmp/g_vidcmd else echo -n "\; split-window -d \" sleep $num ; " >>$g_tmp/g_vidcmd echo -n '. /etc/bash/gaboshlib.include; cat ~/.g_tmpvidlist | sort -R | while read video; do g_compress_video \$video; done" \; select-layout even-vertical ' >>$g_tmp/g_vidcmd fi fi done tmux kill-session -t g_ffmpegparallel >/dev/null 2>&1 rm -f /tmp/*.g_progressing if [ -f $g_tmp/g_vidcmd ] then cat $g_tmp/g_vidcmd . $g_tmp/g_vidcmd fi rm ~/.g_tmpvidlist else echo $vidres | grep -q "480p" && echo $$ >"$g_tmp"/VID-SD g_find_video "$mediapath" | while read video do g_compress_video $video done fi