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