Via Python kann man auf dem Raspberry mit dem youtube-uploader Programm Videos hochladen.
Da ich dies automatisch möchte, habe ich ein Script gebaut.
Nun prüft der Cronjob alle 15 Minuten, ob in einem Verzeichnis ein Video der Sorte mov, mp4, m2ts, .. liegt, lädt dieses zu youtube hoch und schickt mir eine E-Mail, wenn dies erledigt ist.
# Youtube Upload automatisch alle 15 min von 8-23 Uhr
*/15 8-22 * * * /bin/bash /home/user/scripts/youtube-upload.sh >/dev/null 2>&1
Das Shellscript: youtube-upload.sh (Ausführbar machen via chmod +x)
# Video Youtube.mov
# Zuerst die möglichen Dateinamen vordefinieren
declare -a arr=(“youtube” “youtube1” “youtube2” “youtube3”)
for NAME in “${arr[@]}”
do# Dann die möglichen Endungen
declare -a arr2=(“mov” “mp4” “m2ts”)
for TYP in “${arr2[@]}”
do
file=”/media/usbstick/youtube-upload/$NAME.$TYP”
if [ -f “$file” ]
thenmv $file /media/usbstick/youtube-upload/youtube_uploading.$TYP
file=”/media/usbstick/youtube-upload/youtube_uploading.$TYP”#/usr/bin/youtube_upload.py => Direkt auf die py da das Script als Cronjob ausgeführt wird
youtube-upload –email=eure.mail@gmail.com –password=”123456” –title=”Raspberry PI upload” –category=Sports –unlisted $file
mv $file /media/usbstick/youtube-upload/$(date +%Y-%m-%d_%H-%M-%S)_uploaded.$TYP
echo “$NAME.$TYP” | mail -s “Youtube Video hochgeladen” eure.mail@gmail.com
fi
done
done
Nachtrag #1
Mittlerweile habe ich ein besseres Script gefunden und erweitert.
Es prüft nach mp4 Dateien in einem definierten Ordner, nimmt den Dateinamen als Youtube Titel, lädt das Video hoch und verschiebt es unter uploaded.
sudo crontab -e:
*/30 7-23 * * * /home/user/scripts/youtube-upload.sh
nano youtube-upload.sh:
#!/bin/bash
#Quelle http://stackoverflow.com/questions/16374918/shell-file-parsing-to-automate-youtube-uploads
#Damit Python via “sudo crontab-e” geht muss das Script so aussehen
#*/30 7-23 * * * /home/user/scripts/youtube-upload.sh
if [ -e /media/usbstick/youtube-upload/*.mp4 ]
then
python –version
for file in /media/usbstick/youtube-upload/*.mp4 ; doTIMEA=$(date +%H-%M-%S)
export title=$(basename “$file” “.mp4”)
echo $title “for” $file
description=$(grep “^$(basename “$file”)” desc | sed ‘s/.*.mp4 //’)python /home/user/scripts/youtube_upload/youtube_upload.py –email=eure.mail@gmail.com –password=”123456” –title=”$title” –description=”Raspberry PI Upload” –category=Sports –unlisted “$file”
SIZE=$(du -h “$file”)
TIMEB=$(date +%H-%M-%S)echo “Size: $SIZE”
echo “$SIZE – Upload Start $TIMEA – Upload Ende $TIMEB” | mail -s “Youtube Video hochgeladen” eure.mail@gmail.com
mv “$file” “/media/usbstick/youtube-upload/uploaded/”done
fi
Nachtrag #2
So sieht nun das neuste Ergebnis aus. Es benennt alle m2ts und mov Videos in mp4 um, lädt die Videos hoch, verschiebt sie und benennt sie um in den Ursprünglichen Namen. Außerdem (sollte das Video sehr groß sein) wird folgende Cronjob des Uploaders beendet, wenn ein aktiver Job läuft (sieht man an der activeupload.txt).
#!/bin/bash
videoquelle=”/media/usbstick/youtube-upload/”
videoquelleuploaded=”/media/usbstick/youtube-upload/uploaded/”#Wenn aktiver Upload ist, dann abbrechen
#if [[ -f “$videoquelle”/activeupload.txt ]] ; then
if [[ -f “$videoquelle”/activeupload.txt ]] ; then
# echo ‘Abbruch – Aktiver Upload’
exit
fi#Alle MOV und m2ts Dateien mit MP4 umbenennen
if [ -e “$videoquelle”/*.mov ]
thenfor file in “$videoquelle”/*.mov ; do
mv “$file” “${file%.mov}.mov.mp4”
done
fiif [ -e “$videoquelle”/*.m2ts ]
thenfor file in “$videoquelle”/*.m2ts ; do
mv “$file” “${file%.m2ts}.m2ts.mp4”
done
fi#Wenn kein Video zum UL vorhanden ist abbruch
for file in “$videoquelle”/*.mp4 ; doif [[ ! -f $file ]]; then
# echo “Abbruch – Kein Video zum Upload vorhanden”
exit
fi
done#Wenn Upload beginnen kann, erstelle ACTIVE UPLOAD Text
echo >> activeupload.txt
mv activeupload.txt $videoquelle#Eigentliches Script
#Quelle http://stackoverflow.com/questions/16374918/shell-file-parsing-to-automate-youtube-uploads#### CRONTAB ####
#*/30 7-23 * * * /home/user/scripts/youtube-upload.sh >/dev/null 2>&1
#### CRONTAB ####python –version
for file in “$videoquelle”/*.mp4 ; doTIMEA=$(date +%H-%M-%S)
export title2=$(basename “$file” “.mp4”)
export title1=$(basename “$title2” “.mov”)
export title=$(basename “$title1” “.m2ts”)echo $title “for” $file
description=$(grep “^$(basename “$file”)” desc | sed ‘s/.*.mp4 //’)START=$(date +%s);
#Für den Rückgabe-Link aus dem YT Upload
YOUTUBELINK=$(python /home/user/scripts/youtube_upload/youtube_upload.py –email=eure.mail@gmail.com –password=”123456” –title=”$title” –description=”Raspberry PI Upload” –category=Sports –unlisted “$file”)END=$(date +%s);
#echo $((END-START)) | awk ‘{printf “%d:%02d:%02d”, $1/3600, ($1/60)%60, $1%60}’
DIFF=$(echo $((END-START)) | awk ‘{printf “%d:%02d:%02d”, $1/3600, ($1/60)%60, $1%60}’)SIZE=$(du -h “$file”)
TIMEB=$(date +%H-%M-%S)#Info Crontab TXT Upload Info für alle Uploads
# echo “Size: $SIZE”
echo “$SIZE – Upload Start $TIMEA – Upload Ende $TIMEB”# Info via Mail pro Video
echo -e “Video Link: $YOUTUBELINK \n Upload Dauer: $DIFF \n \n Upload Start: $TIMEA Uhr – Ende: $TIMEB Uhr \n Größe: $SIZE ” | mail -s “Youtube Video ‘$title’ hochgeladen” eure.mail@gmail.commv “$file” $videoquelleuploaded
ACTIVEUPLOAD=”1″
done#Wenn Uploads fertig sind, lösche ACTIVE UPLOAD TXT
if [ ! -z “$ACTIVEUPLOAD” ];
then
rm “$videoquelle”/activeupload.txt
fi#ALLE MOV und m2ts zurück umbenennen
if [ -e “$videoquelleuploaded”/*.mov.mp4 ]
thenfor file in “$videoquelleuploaded”/*.mov.mp4 ; do
mv “$file” “${file%.mov.mp4}.mov”
done
fiif [ -e “$videoquelleuploaded”/*.m2ts.mp4 ]
thenfor file in “$videoquelleuploaded”/*.m2ts.mp4 ; do
mv “$file” “${file%.m2ts.mp4}.m2ts”
done
fi
Generally I don’t learn post on blogs, however I would like to say that this write-up very forced me to take a look at and do it! Your writing taste has been amazed me. Thank you, quite nice post.