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

2009.06.24. | 18 hozzászólás | Kategória: Linux
Címkék: , , ,

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.

Szólj hozzzá Trackback 26005 olvasás, 2 ma

Kapcsolódó írások

Hozzászólások követése

18 hozzászólás

  1. steindani

    http://kickyoutube.com
    Ha csak megtetszik valamelyik videó, be kell írni a kick-et a youtube elé, enter, és tadaaaam.

  2. blaselinux

    steindani: “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. ;)

  3. maszogep
  4. blaselinux

    maszogep: 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

  5. maszogep

    …jól van na, ezen első körben átsiklottam:)

  6. blaselinux

    maszogep: 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.

  7. petipetya

    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?

  8. blaselinux

    petipetya: 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.

  9. petipetya

    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.”

  10. blaselinux

    petipetya: 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ő.

  11. petipetya

    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

  12. blaselinux

    petipetya: 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

  13. akira

    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.

  14. blaselinux

    akira: 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

  15. blaselinux

    petipetya: 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</pre>
    <p><strong>Működésének magyarázata:</strong><br />
    A $# változó a bemeneti paraméterek számát tartalmazza.<br />
    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.<br />
    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.<br />
    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:<br />
    ezt:</p>
    <pre lang="bash">zene=`echo $2 | awk -F. '{print $1}'`.mp3</pre>
    <p>erre:</p>
    <pre lang="bash">zene=`echo $nev | awk -F. '{print $1}'`.mp3</pre>
    <p>

  16. blaselinux

    blaselinux: 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</pre>
    <p>

  17. berciXcore

    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. :)

  18. blaselinux

    berciXcore: 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

Szólj hozzá

Használható HTML tagek: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

A hozzászólás elküldésével elfogadod az oldal felhasználási feltételeit!

Értesítés beállítása hozzászólás nélkül