Skip to content

Instantly share code, notes, and snippets.

@henrydatei
Last active July 13, 2021 17:55
Show Gist options
  • Save henrydatei/c882020c512e665cce3963194b4aa79b to your computer and use it in GitHub Desktop.
Save henrydatei/c882020c512e665cce3963194b4aa79b to your computer and use it in GitHub Desktop.
Create a video from a ppsx-file
#!/bin/bash
#passende Ordner erstellen
read -p "Nummer der Vorlesung " nummer
mkdir -p Einzelseiten
mkdir -p Einzelseiten/VL$nummer
mkdir -p Einzelseiten/VL$nummer/audio
mkdir -p Einzelseiten/VL$nummer/jpg
mkdir -p Einzelseiten/VL$nummer/pdf
# mkdir -p Einzelseiten/VL$nummer/png
mkdir -p Einzelseiten/VL$nummer/video
mkdir -p decrypt
# check if file is decrypted
if msoffcrypto-tool "$1" --test; then
#decrypt ppsx (https://github.com/nolze/msoffcrypto-tool)
read -p "Password: " pass
msoffcrypto-tool "$1" decrypted.ppsx -p $pass
else
# just rename
cp "$1" decrypted.ppsx
fi
# pdf erstellen -> decrypted.pdf
libreoffice --headless --convert-to pdf decrypted.ppsx
# pdf split pages
pdftk decrypted.pdf burst output Einzelseiten/VL$nummer/pdf/slide%d.pdf
# convert to png
# ls ./Einzelseiten/VL$nummer/pdf/*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
# mv ./Einzelseiten/VL$nummer/pdf/*.png ./Einzelseiten/VL$nummer/png
# convert to jpg
ls ./Einzelseiten/VL$nummer/pdf/*.pdf | xargs -L1 -I {} pdftoppm -jpeg -r 300 {} {}
mv ./Einzelseiten/VL$nummer/pdf/*.jpg ./Einzelseiten/VL$nummer/jpg
# umbenennen
for file in $(ls ./Einzelseiten/VL$nummer/jpg/*.jpg); do
mv "$file" $(ls "$file" | rev | cut -c 11- | rev).jpg;
done
# copy audio files to /audio
cp decrypted.ppsx decrypted.zip
unzip decrypted.zip -d decrypt
mv ./decrypt/ppt/media/media*.m4a ./Einzelseiten/VL$nummer/audio
# rename audio files matching slides
cd decrypt/ppt/slides/_rels
for f in $(ls); do
if grep -q "m4a" "$f"; then
slideNummer=$(echo "$f" | cut -d"." -f1 | cut -c 6-)
mediaFile=$(grep -o -E "media[[:digit:]]*.m4a" "$f" | head -n 1 | cut -d "." -f1 | cut -c 6-)
echo "Found Media (Audio-File $mediaFile) in $f (Slide $slideNummer)"
mv ../../../../Einzelseiten/VL$nummer/audio/media$mediaFile.m4a ../../../../Einzelseiten/VL$nummer/audio/audio$slideNummer.m4a
fi
done
cd ../../../..
# Einzelfolien mit Audio kreieren
cd Einzelseiten/VL$nummer/audio/
for f in $(ls); do
slideNummer=$(echo "$f" | cut -d"." -f1 | cut -c 6-)
ffmpeg -i ../jpg/slide$slideNummer.jpg -i audio$slideNummer.m4a -c:v mjpeg -c:a copy -pix_fmt yuv420p ../video/$slideNummer.mp4
#echo "file './Einzelseiten/VL$nummer/video/$slideNummer.mp4'" >> ../../../list.txt
done
cd ../../..
# Liste erstellen
cd Einzelseiten/VL$nummer/video/
for f in $(ls); do
slideNummer=$(echo "$f" | cut -d"." -f1)
echo "$slideNummer" >> numbers.txt
done
sort -n numbers.txt >> numbers_sorted.txt
while read line; do
echo "file './Einzelseiten/VL$nummer/video/$line.mp4'" >> ../../../list.txt
done < numbers_sorted.txt
cd ../../..
# Merge Einzelvideos
ffmpeg -f concat -safe 0 -i list.txt -c copy VL$nummer.mp4
# cleanup
rm -rf decrypt
rm decrypted.pdf
rm decrypted.ppsx
rm decrypted.zip
rm list.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment