Youtube videó letöltés és konvertálás Linuxon (szkript)

Az itt olvasható leírást követve, el tudunk készíteni egy youtube videó letöltő szkriptet, ami egyúttal mp3 formátumba is konvertálja a letöltött tartalmat. Remélhetőleg ez a leírás segítséget nyújt a bash szkriptek írásához szükséges alapok elsajátításában.

A szkript futtatásához szükségünk van 2 program telepítésére (youtube-dl, mencoder), ezeket a következő parancs kiadásával tudjuk a legegyszerűbben telepíteni:

sudo apt-get install youtube-dl mencoder

A szkriptünket a következő paranccsal és értékekkel tudjuk majd működésre bírni:

youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX szerzo-cim

A youtube.sh a szkriptünk neve, az utána következő link a letöltendő videó címe, végül pedig egy név, amellyel szeretnénk elmenteni az állományunkat. Vágjunk is bele.
Első lépésként hozzunk létre egy üres fájlt a neve legyen youtube.sh:

touch youtube.sh
 

Nyissuk meg szerkesztésre a kedvenc szövegszerkesztőnkkel. Lehet grafikus felületen a gedit, kedit, vagy karakteres felületen az mcedit, nano… stb. Én a nano-t fogom használni.

nano youtube.sh

Mivel bash szkriptet írunk, a fájl elején meg kell adnunk ezt, mégpedig a következő sorral:

#!/bin/bash

Majd, hogy a későbbiekben könnyebben tudjunk dolgozni, állítsunk be egy könyvtárat, amibe szeretnénk dolgozni. Én egy saját könyvtárat hoztam létre a $HOME könyvtáramban.

download=$HOME/youtube

Ha nem alapértelmezett könyvtárról van szó, akkor érdemes ellenőrizni a létezését. (Igazából érdemes ellenőrizni minden esetben.) Egy feltételes utasítással ellenőrizzük a létezését, illetve nem létezését. A következő sorokban megvizsgáljuk, hogy a download változóban eltárolt könyvtár nem létezik-e, ha ez igaz, akkor létrehozzuk a könyvtárat.

if [ ! -e $download ]
    then
        mkdir $download
        echo "A "$download" könyvtár létrehozva" # The directory is created
fi

Az előzőekben ismertetett módon leellenőrizzük az flv könyvtár létezését.

if [ ! -e $download/flv ]
    then
        mkdir $download/flv
        echo "A "$download"/flv könyvtár létrehozva" # The directory is created
fi

Belépünk a munka könyvtárunkba.

cd $download

Egy üzenettel jelezzük, hogy éppen mit is csinál a szkriptünk.

echo "A letöltés megkezdése" # Start the download

majd letöltjük a fájlt. A $1 változó a szkriptünk meghívása mögött álló szöveget tartalmazza, ami a hivatkozást kell tartalmaznia. Pl.: youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX

youtube-dl $1

Majd kiíratjuk, hogy sikeresen letöltöttük a videó fájlt:

echo "A video letöltve" # Video is downloaded

A következő paranccsal létrehozunk egy video változót, melyben eltároljuk a szkript meghívásánál megadott link egyenlőségjel mögötti karaktereit, ugyanis a youtube-dl ezzel a névvel fogja elmenteni a videót.

video=`echo $1 | awk -F= '{print $2 }'`

Itt egy új változóval ismerkedünk meg ez a $2 (nem azonos az awk mögötti $2-vel!). Ez a szkript meghívásakor másodikként megadott karaktersorozatot tartalmazza, amelyben az mp3 nevét kell megadnunk. Tehát a szkript helyes meghívása a következőképpen fog kinézni: youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX szerzo-cim
A zene változó a következőt fogja tartalmazni: szerzo-cim.mp3

zene=`echo $2 | awk -F. '{print $1}'`.mp3

A változók beállítása után egy üzenettel jelezzük, hogy a konvertálást fogjuk elkezdeni:

echo "A konvertálás megkezdése" # Start the convert

Majd ténylegesen készítünk egy mp3 fájlt a videóból (az eredeti fájl megmarad):

mencoder $video.flv -of rawaudio -oac copy -ovc copy -o $zene

Ismételten jelezzük, hogy hol tart a szkriptünk:

echo "Az mp3 elkészült" # The mp3 is ready 

A video változó értékét beállítjuk az általunk megadott névre. A következőt fogja tartalmazni: szerzo-cim.flv

video=`echo $zene | awk -F. '{print $1}'`.flv 

Majd átnevezzük az flv fájlunkat:

mv *.flv $video 

Végül áthelyezzük a videót az flv könyvtárba:

mv $video $download/flv/ 

Lezárásképpen jelezhetjük, hogy a szkriptünk lefutott:

echo "A program sikeresen lefutott!" # The script ran succesfully

A szkriptet ízlésünknek megfelelően lehet módosítani. Például, ha nincs szükségünk az flv videóra, akkor törölhetjük is, illetve akár mindkét fájlt más könyvtárakba is helyezhetjük, minden csak rajtunk múlik.
A szkript tovább fejlesztése várható. Igyekszem hamarosan grafikus felületet készíteni hozzá, illetve flv-ből avi-t készíteni.
A szkript egyben:

#!/bin/bash
#######################################################
##           Youtube downloader and converter
##      Create by blaselinux: (blaselinux KUKAC gmail.com)
##              Licence GNU GPL v3 or later.
##       http://www.gnu.org/licenses/gpl.html
##              http://gnu.hu/gplv3.html
#######################################################
# Set the download variable to the working directory
download=$HOME/youtube
# Check the working directory; exist or not, if not the script make it
if [ ! -e $download ]
    then
        mkdir $download
        echo "A "$download" könyvtár létrehozva" # The directory is created
fi
if [ ! -e $download/flv ]
    then
        mkdir $download/flv
        echo "A "$download"/flv könyvtár létrehozva" # The directory is created
fi
# Go to the working directory
cd $download
echo "A letöltés megkezdése" # Start the download
# Download the video
youtube-dl $1
echo "A video letöltve" # The video is downloaded
# Set the video variable
video=`echo $1 | awk -F= '{print $2 }'`
# Set the zene variable
zene=`echo $2 | awk -F. '{print $1}'`.mp3
echo "A konvertálás megkezdése" # Start the convert
# Convert the flv file to mp3
mencoder $video.flv -of rawaudio -oac copy -ovc copy -o $zene
echo "Az mp3 elkészült" # The mp3 is ready
video=`echo $zene | awk -F. '{print $1}'`.flv
# Rename the flv file
mv *.flv $video
# Move the flv file to the flv directory
mv $video $download/flv/
echo "A program sikeresen lefutott!" # The script ran succesfully

Az elkészítés után ne felejtsünk el futtatási jogot adni az állományra:

chmod +x youtube.sh

A kész szkript letölthető innen.

19 thoughts on “Youtube videó letöltés és konvertálás Linuxon (szkript)

  1. [re=3629]steindani[/re]: „Remélhetőleg ez a leírás segítséget nyújt a bash szkriptek írásához szükséges alapok elsajátításában.”
    Ezért készült el. Örülök, hogy van más lehetőség is. Azonban ha olvastad a szkript nem csupán letölti a videót, hanem mp3-ba is konvertálja.
    A linket különben köszönöm, nem ismertem ezt az oldalt. 😉

  2. [re=3638]maszogep[/re]: Remélhetőleg ez a leírás segítséget nyújt a bash szkriptek írásához szükséges alapok elsajátításában.
    Utoljára írtam le a célt a hozzászólásban, a továbbiakban figyelmen kívül fogom hagyni a hasonló „építő” jellegű hozzászólásokat. 😉
    Üdv

  3. [re=3642]maszogep[/re]: Nincs harag, csak 2 hozzászólás érkezett és mindkettő azzal foglalkozott, hogy miként lehet megoldani máshogy a címben szereplő problémát.

  4. Miért pont mp3-ba, és nem avi-ba alakítja a videót?
    Úgy nem lehet megcsinálni, hogy terminálban indítom, és akkor kéri be a youtube-os címet és azt a nevet, amivel elmenteném?

  5. [re=3657]petipetya[/re]: Azért mp3-ba, mert egyik nap éppen ilyenbe szerette volna konvertálni a youtube videót akinek frissen telepítettem az ubuntut. Ennek hatására kezdtem el csinálni ezt.
    De mint már többször említettem és már mások is írták nem akarom én ezzel megváltani a világot, hiszen léteznek már erre a „problémára” programok, amik sokkal többet tudnak, mint az általam készített.
    Azért készült el ez a bejegyzés, mivel egy kész szkript soronkénti magyarázatával elég sokat lehet tanulni (szerintem) és jobb, ha valamivel értelmesebb problémán keresztül mutatom ezt be, mint a „Hello world” X. változata.
    Az általad felvázolt problémát meg lehet oldani, ha „tanulmányoztad” a fenti leírást, akkor magadtól rájössz, hogy miket kell benne módosítani. De egy kicsit segítek az elindulásban:
    Ha aviba szeretnéd konvertálni mp3 helyett, akkor a következőt kell csinálnod:
    Ezt:

    mencoder $video.flv -of rawaudio -oac copy -ovc copy -o $zene

    le kell cserélni erre:

    mencoder -oac copy -ovc lavc -o $zene.avi $video.flv

    . Természetesen a zene változót akkor így add meg:

    zene=`echo $2 | awk -F. '{print $1}'`.avi

    A második problémádhoz pedig a read $változó kontextust ajánlom felhasználni a programban, de ezt már rád bízom.

  6. Szia!
    Köszönöm az eddigi útmutatást. Igen, tudom hogy vannak grafikus programok és firefox kiegészítő is erre, de szeretnék minél kevesebb erőforrást felhasználni.
    Eddig egy script-et „írtam” magamnak, melyben 4db takarítási parancs van, melyet egymás után lefuttat a gép – a tudásom kb. ennyi. 🙂
    Ezért kérdem, hogy mit jelent ez?
    „A második problémádhoz pedig a read $változó kontextust ajánlom felhasználni a programban, de ezt már rád bízom.”

  7. [re=3669]petipetya[/re]: Ez alapján kellene megcsinálni:

    #!/bin/bash
    echo Please, enter your name
    read NAME
    echo "Hi $NAME!"

    Szóval ahol te szeretnéd beolvashatód, valahogy így:

    echo "Add meg a videó hivatkozását:"
    read forras
    echo "Add meg az avi, vagy mp3 nevét:"
    read nev

    A későbbiekben a megfelelő helyen akkor ezekre a változókra kell hivatkoznod. Tehát ahol $1 változó tartalmát dolgozza fel a szkript, ott $forras -t kell használnod, ahol pedig $2 -őt, ott $nev -et. Remélem érthető.

  8. Nem sikerült. 🙁 Kell neki encoder, aminek nem tudom a nevét, és valami youtube.dl-t is hiányol.
    Itt a terminál tartalma:
    Add meg a videó hivatkozását:
    http://www.youtube.com/watch?v=ZAvccvyhna0
    Add meg az avi, vagy mp3 nevét:
    zsaruk
    A letöltés megkezdése
    /home/asus/youtube.sh: line 37: youtube-dl: parancs nem található
    A video letöltve
    A konvertálás megkezdése
    /home/asus/youtube.sh: line 50: mencoder: parancs nem található
    Az mp3 elkészült
    mv: stat „*.flv” sikertelen: Nincs ilyen fájl vagy könyvtár
    mv: stat „zsaruk.avi.flv” sikertelen: Nincs ilyen fájl vagy könyvtár
    A program sikeresen lefutott!
    És itt a szkript tartalma:
    #!/bin/bash
    #######################################################
    ## Youtube downloader and converter
    ## Create by blaselinux: (blaselinux KUKAC gmail.com)
    ## Licence GNU GPL v3 or later.
    ## http://www.gnu.org/licenses/gpl.html
    ## http://gnu.hu/gplv3.html
    #######################################################
    # Set the download variable to the working directory
    download=$HOME/youtube
    echo „Add meg a videó hivatkozását:”
    read forras
    echo „Add meg az avi, vagy mp3 nevét:”
    read nev
    # Check the working directory; exist or not, if not the script make it
    if [ ! -e $download ]
    then
    mkdir $download
    echo „A „$download” könyvtár létrehozva” # The directory is created
    fi
    if [ ! -e $download/flv ]
    then
    mkdir $download/flv
    echo „A „$download”/flv könyvtár létrehozva” # The directory is created
    fi
    # Go to the working directory
    cd $download
    echo „A letöltés megkezdése” # Start the download
    # Download the video
    youtube-dl $forras
    echo „A video letöltve” # The video is downloaded
    # Set the video variable
    video=`echo $forras | awk -F= ‘{print $nev }’`
    # Set the zene variable
    zene=`echo $nev | awk -F. ‘{print $forras}’`.avi
    echo „A konvertálás megkezdése” # Start the convert
    # Convert the flv file to avi
    mencoder -oac copy -ovc lavc -o $zene.avi $video.flv
    echo „Az mp3 elkészült” # The mp3 is ready
    video=`echo $zene | awk -F. ‘{print $forras}’`.flv
    # Rename the flv file
    mv *.flv $video
    # Move the flv file to the flv directory
    mv $video $download/flv/
    echo „A program sikeresen lefutott!” # The script ran succesfully

  9. [re=3676]petipetya[/re]: Kihagytad valószínűleg a szkript leírásának második bejegyzését:
    A szkript futtatásához szükségünk van 2 program telepítésére (youtube-dl, mencoder), ezeket a következő parancs kiadásával tudjuk a legegyszerűbben telepíteni:

    sudo apt-get install youtube-dl mencoder

  10. Hálás köszönet az újabb skript leírásért! És még mindig arra biztatnálak hogy ha csinálsz még, azt is oszd meg velünk.

  11. [re=3682]akira[/re]: Köszönöm szépen. Igyekszem majd még írni párat és közölni az oldalon.
    Hamarosan lehet módosítok pár dolgot a szkriptben, mivel páran írtak, hogy jó lenne bővíteni. Ha időm és kedvem engedi, akkor elkészítem ezt is és közlöm veletek, remélem az is hasznos lesz.
    Üdv
    blaselinux

  12. [re=3657]petipetya[/re]: Sikerült elkészítenem az egyik módosítást amit kértél, vagyis a szkript képes kiolvasni az eredeti youtube videó címét és ha az előzetesen nem lett megadva, úgy kiolvassa. Íme a kód:

    if [ $# == 1 ]
        then
    	wget $1
    	nev=`cat watch* | grep "" | awk -F">" '{print $2}' | awk -F"<" '{print $1}'`
    	echo "A nev valtozó sed előtti tartalma: $nev"
    	nev=`echo $nev | sed 's/ /_/g'`
    	echo "A nev valtozó tartalma: $nev"
    	rm watch*
        elif [ $# == 2 ]
    	then
    	    nev=$2
    	else
    	    echo -e "\n A program helyes futtatásához a következő paramtéreket kell megadni \n"
    	    echo -e " youtube.sh [letöltési link] [a video neve]"
    	    echo -e " A [video neve] elhagyható, ekkor a youtube videó eredeti nevét kapja a fájlunk. \n"
    	    exit
    fi

    Működésének magyarázata:
    A $# változó a bemeneti paraméterek számát tartalmazza.
    Először leellenőrizzük, hogy ez az érték ($#) 1-e. Ha igen, akkor a wget-el letöltjük a html oldalt, majd onnan kiolvassuk a címet és eltároljuk annak tartalmát a nev változóban.
    Ha nem 1, akkor a különbenha (elif) paranccsal megvizsgáljuk, hogy ez az érték 2-e. Ha igen, akkor csak átadjuk a nev változónak a második paraméterként megadott értéket, ha nem akkor a szkript helyes alkalmazásának rövid helpjét kapjuk válaszul és befejezzük a program futását.
    Ezt a kód részletet a cd $download parancs kiadása után szúrjuk be és figyeljünk arra, hogy érdemes ezentúl a $2 helyett a $nev változót használni, tehát a következőt kell még módosítani:
    ezt:

    zene=`echo $2 | awk -F. '{print $1}'`.mp3

    erre:

    zene=`echo $nev | awk -F. '{print $1}'`.mp3
  13. [re=3729]blaselinux[/re]: Két felesleges echo benn maradt az új kódrészben, a javított verzió ez:

    if [ $# == 1 ]
        then
    	wget $1
    	nev=`cat watch* | grep "" | awk -F">" '{print $2}' | awk -F"<" '{print $1}'`
    	nev=`echo $nev | sed 's/ /_/g'`
    	rm watch*
        elif [ $# == 2 ]
    	then
    	    nev=$2
    	else
    	    echo -e "\n A program helyes futtatásához a következő paramtéreket kell megadni \n"
    	    echo -e " youtube.sh [letöltési link] [a video neve]"
    	    echo -e " A [video neve] elhagyható, ekkor a youtube videó eredeti nevét kapja a fájlunk. \n"
    	    exit
    fi
  14. Az igazi azért az lenne, ha olyan lenne a szkript, hogy utánanéz, van-e HQ, vagy HD minőségű verzió is a letölthető állományból. van egy Firefox kiegészítés, ami lehetővé tesz HQ és HD letöltéseket, csak azért. 🙂

  15. [re=3779]berciXcore[/re]: Nem először írom, hogy a cél nem feltétlenül a youtube videó letöltése volt (bár ezt a feladatot is képes ellátni), hanem egy szkript leírása és annak magyarázata.
    Tessék elolvasni rendesen a leírást! Köszönöm.
    Üdv

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .