Esprit & Schmackes

Youtube Audio Extractor

Bash-Script zum Erstellen von MP3- und FLAC-Dateien aus Youtube-URLs, mit hübsch so um die 430 Wörter

Abhängigkeiten:

  • Zenity
  • Notification
  • youtube-dl
  • avconv oder ffmpeg
  • entsprechende Codecs

 

Download: youtube-audio.7z [md5: 51d9f112e24191339faf51fb61429545] [WTFPL]

 

#!/bin/bash

address="$(zenity --width=600 --height=150 --entry --title="YouTube Audio" --text "URL zum Youtube-Video")"

if [ ! $address ]; then
    exit
fi

dest_dir=$(zenity --title="Zielordner" --file-selection --directory)

if [ ! "$dest_dir" ]; then
    exit
fi

#make zenity listen on >&3
exec 3> >(zenity --notification --listen)
echo "tooltip:Videoinformationen werden gesammelt..." >&3

video_id=`echo $address | awk -F'[=&]' '{print $2}'`

if [ ! $? -eq 0 ]; then
        video_id=`date +%s`
fi

video_title="$(youtube-dl --get-title $address)"

if [ ! $? -eq 0 ]; then
    video_title=youtube_`date +%s`
fi

echo "tooltip:Video ${video_title} wird heruntergeladen..." >&3

#download
youtube-dl --id $address

error=false

if [ ! $? -eq 0 ]; then
    echo "tooltip:Isolation - ${video_title} konnte nicht heruntergeladen werden" >&3
    error=true
fi

if [ -e "$video_id.flv" ]; then
ext="flv"
fi

if [ -e "$video_id.mp4" ]; then
ext="mp4"
fi

if [ -e "$video_id.webm" ]; then
ext="webm"
fi


if [ -z $ext ]; then
        echo "tooltip:Demenz - ${video_title} konnte nicht wiedergefunden werden" >&3
        error=true
fi

#no file, no conversion
if $error; then
    zenity --error --text "Fehler beim Download"
    exit 1
fi

echo "tooltip:Starte Konvertierung von ${video_title}..." >&3

mp3_done=false
flac_done=false

if [ -e "$video_id.$ext" ]; then
    #check ffmpeg/avconv

    hash avconv 2>/dev/null
    avconv_ok=$?
    if [ $avconv_ok -lt 1 ]; then
        comnd="avconv -y -i"
    else
        comn="ffmpeg -i"
    fi

    
    #convert to mp3
    $comn "$video_id.$ext" "$dest_dir/$video_title".mp3    

    if [ -e "${dest_dir}/${video_title}.mp3" ]; then
        echo "tooltip: MP3-Konvertierung erfolgreich" >&3
        mp3_done=true
    else
        error=true
    fi
    

    #convert to flac
    $comn "$video_id.$ext" "$dest_dir/$video_title".flac

    if [ -e "${dest_dir}/${video_title}.flac" ]; then
                echo "tooltip: FLAC-Konvertierung erfolgreich" >&3
                flac_done=true
    else
        error=true
        fi
    rm "$video_id.$ext"
else
    error=true
fi

msg=""

if $mp3_done; then
    msg=$msg"MP3-Datei "$dest_dir"/"$video_title".mp3 erfolgreich erstellt\n\n"    
fi

if $flac_done; then
        msg=$msg"FLAC-Datei ${dest_dir}/${video_title}.flac erfolgreich erstellt\n\n"      
fi

#conclusion
if $error; then
    msg="Es ist zu Fehlern gekommen\n\n$msg"
    zenity --error --text "$msg"
    exit 1
fi

exit 0

 

So sieht das dann aus:

 

Youtube-Audio1

Das Script funktioniert nur mit Links zu Einzelvideos. Links aus Playlisten müssen bis zum Parameter v=id heruntergekürzt werden.

 

Noch den Zielordner angeben und dann gehts los. Das Script blendet als Notification ein, was es gerade macht.

 

 

Und fertsch.

Kommentare

was zu melden?