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.
http://kickyoutube.com
Ha csak megtetszik valamelyik videó, be kell írni a kick-et a youtube elé, enter, és tadaaaam.
[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. 😉
https://addons.mozilla.org/hu/firefox/addon/11047
Firefox addon…
[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
…jól van na, ezen első körben átsiklottam:)
[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.
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?
[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:
le kell cserélni erre:
. Természetesen a zene változót akkor így add meg:
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.
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.”
[re=3669]petipetya[/re]: Ez alapján kellene megcsinálni:
Szóval ahol te szeretnéd beolvashatód, valahogy így:
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ő.
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
[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:
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.
[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
[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:
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:
erre:
[re=3729]blaselinux[/re]: Két felesleges echo benn maradt az új kódrészben, a javított verzió ez:
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. 🙂
[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
Köszönöm a cikkedet, tanultam belőle ! 🙂