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 mencoderA 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-cimA 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.shNyissuk 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.shMivel bash szkriptet írunk, a fájl elején meg kell adnunk ezt, mégpedig a következő sorral:
#!/bin/bashMajd, 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/youtubeHa 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
fiAz 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
fiBelépünk a munka könyvtárunkba.
cd $downloadEgy üzenettel jelezzük, hogy éppen mit is csinál a szkriptünk.
echo "A letöltés megkezdése" # Start the downloadmajd 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 $1Majd kiíratjuk, hogy sikeresen letöltöttük a videó fájlt:
echo "A video letöltve" # Video is downloadedA 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}'`.mp3A 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 convertMajd 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 $zeneIsmé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 succesfullyA 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 succesfullyAz elkészítés után ne felejtsünk el futtatási jogot adni az állományra:
chmod +x youtube.shA 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:
zene=`echo $2 | awk -F. '{print $1}'`.aviA 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:
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}'`.mp3erre:
zene=`echo $nev | awk -F. '{print $1}'`.mp3[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 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 ! 🙂