first commit
This commit is contained in:
commit
578dbcf91e
130
gtc-media-compress.sh
Executable file
130
gtc-media-compress.sh
Executable file
@ -0,0 +1,130 @@
|
||||
#!/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
|
||||
|
Loading…
Reference in New Issue
Block a user