Sztoikus
01-07-2026, 07:10 PM
Tapasztalataim szerint meglehetősen gyakori, hogy van valami jó videó a Youtube-on, aztán amikor megint meg akarom nézni, már nem találom, mert letörölték/letiltották! Ez tényleg nagyon gyakori például az általam követett carnivore diétával kapcsolatban, de belefutottam ilyen esetbe már a túléléssel kapcsolatos videóknál is. Ilyesmire okot adó lehet ha a youtube úgy ítéli meg (akár csak mert egy vegán fickó feljelenti a videót) hogy az „sokkoló”, „megbotránkoztató”, „túl véres”, „kuruzslás”, „egészségre veszélyes”, stb. Vagy hogy „illegális eszközöket mutat be”, „állatkínzás” (ez simán lehet ürügy például csapdázásról szóló videónál), stb. ÜRÜGY MINDIG VAN. Pláne ha a videónak van zenei aláfestése is, akkor beleköthetnek hogy az kopirájtos, stb.
A fenti okok miatt kialakult nálam az a jó szokás, hogy egyes videókat amikről feltételezem hogy később is meg akarom nézni (különösen ilyenek nálam például a mindenféle csomók kötését bemutató tutorialok) LETÖLTÖM, és elmentem, hogy később offline is megnézegethessem.
A baj ezzel az, hogy némely videó bődületesen nagy helyet foglal el, akkor is ha amúgy rövid ideig tart, mert egyes eszement idióták akár harmincezres bitrátával veszik fel, nem tudom mi a francnak, talán hogy 5 méteres képátlójú kivetítőn is élvezhető legyen?! Miközben én csak a magam 1200x900 felbontású laptopján akarom nézni!
Hogy ne pocsékoljam a helyet az SSD egységemen, nyilvánvaló a teendő: át kell kódolni! Egyrészt, a méretet (ha eredetileg nagyobb ennél) 1200x900 -ra kell csökkenteni mert nálam ez a képernyőfelbontás, másrészt a bitrátát is valami normális értékre, nem olyan őrültnagyra meghagyni. Tapasztalataim szerint az olyan videóra amiben sok a mozgás, az 1200-as bitráta általában megfelelő, ami azonban igazán „tutorial” jellegű, nincs benne sok képváltás hirtelen hanem inkább csak duma, ott a 800 is elegendő, sőt néha a 600 is, de volt olyan ami már 400-nál is kielégítő eredményt hozott.
Akinek a képernyője nem 1200x900 felbontású, az egyszerűen írja át e két számot a szkriptben, ahol ezek globális változókként vannak megadva, könnyű megtalálni őket a kódban.
Íme a videóátkódoló bash-szkriptem - csak Linux alatt működik:
#!/bin/bash
# Képernyőfelbontás-meghatározó szubrutin:
function DetectScreenResolutionOfMovie
{
felbontas=`ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $filename`
# Levágjuk a felbontás string elejét, az x karakterig:
szelesseg=`echo $felbontas | cut -d\x -f1`
# Levágjuk a felbontás string végét, az x karaktertől:
magassag=`echo $felbontas | cut -d\x -f2`
}
# ************************************************** ****************************************
function bekodol
{
csend="-really-quiet -msglevel all=-1 -msglevel statusline=5"
c=$filename
kiterjesztes=${c##*.}
basenev=`basename $c .$kiterjesztes`
# Kiderítjük a film eredeti képernyőfelbontását:
DetectScreenResolutionOfMovie
# Most össze kell hasonlítanunk a film eredeti felbontását a mi képernyőfelbontásunkkal:
if [ "$szelesseg" -le "$szelessegem" ] && [ "$magassag" -le "$magassagom" ]; then
if [[ $flag == "" ]] ; then
echo "A film eredeti felbontása = $felbontas, ez kisebb mint $szelessegem x $magassagom, tehát nincs képernyőkorrekció."
parancs="mencoder $filename $csend -ovc xvid -forceidx -xvidencopts bitrate=$btr -oac mp3lame -o $basenev.br$btr.avi"
echo $parancs
$parancs
fi
else
# Valamelyik méret nagyobb mint az aktuális képernyőméret, így korrekcióra van szükség:
ujszelesseg=$szelessegem
ujmagassag=$magassagom
if [ "$szelesseg" -le "$szelessegem" ]; then
ujszelesseg=$szelesseg
fi
if [ "$magassag" -le "$magassagom" ]; then
ujmagassag=$magassag
fi
echo "A film eredeti felbontása = $felbontas, tehát képernyőméret-korrekció szükséges."
parancs="mencoder $filename $csend -ovc xvid -xvidencopts bitrate=$btr -vf scale=$ujszelesseg:$ujmagassag -oac mp3lame -o $basenev.br$btr.avi"
echo $parancs
$parancs
fi
}
# ************************************************** ****************************************
# ************************************************** ****************************************
# Ez a szkript tulajdonképpeni belépési pontja, a kezdete:
flag="-"
current_directory=$( pwd )
szelessegem="1600"
magassagom="900"
if [[ $1 == "" ]] ; then
echo "Használat:"
echo "kod bitrate filename"
echo "ahol a bitrate egy egész szám, például 1024 vagy 800 stb."
echo "A program így is indítható:"
echo "kod bitrate"
echo "Ebben az esetben az aktuális könyvtár minden állományára végrehajtja az átkódolást"
echo "(de az esetleges alkönyvtárakban már nem)"
echo "Ha így hívjuk meg:"
echo "kod bitrate -"
echo "akkor is meghívódik a szkript az aktuális könyvtár minden állományára,"
echo "de csak akkor történik átkódolás, ha a videó eredeti képernyőfelbontása nagyobb, mint"
echo "az a felbontás, amit e szkript szelessegem és magassagom nevű változóiban beállítottunk."
exit
fi
btr=$1
if [[ $2 == "-" ]] ; then
flag=$2
else
flag=""
fi
if [[ $2 == "" ]] || [[ $2 == "-" ]] ; then
#for i in *.* ; do
for i in `ls -1 | sort` ; do
filename=$i
bekodol
done
echo
exit
fi
filename=$2
bekodol
echo
exit
A szkriptnek a kod nevet adtam, mert ugyebár kódol... Használat:
kod bitráta eredeti_videofájl_neve
Ahhoz hogy működjön, feltelepítve kell legyen a mencoder és az ffprobe program.
Itt egy másik hasznos progi is, amivel kideríthetjük még átkódolás előtt a videofájl eredeti felbontását és bitrátáját (az időtartamot azaz „duration”-t is), ennek a res nevet adtam:
#!/bin/bash
# "Használat:"
# "res filename"
# "Vagy:"
# "res"
# "Ebben az esetben az aktuális könyvtár minden állományára végrehajtja a képernyőfelbontás kiderítését"
# "(de az esetleges alkönyvtárakban már nem)."
# Képernyőfelbontás-meghatározó szubrutin:
function DetectScreenResolutionOfMovie
{
hatvan=60
felbontas=`ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $filename`
durationsec=`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $filename`
# Levágjuk a felbontás string elejét, az x karakterig:
szelesseg=`echo $felbontas | cut -d\x -f1`
# Levágjuk a felbontás string végét, az x karaktertől:
magassag=`echo $felbontas | cut -d\x -f2`
bitrateline=`ffmpeg -i $filename 2>&1 | grep bitrate`
bitrate=`echo $bitrateline | cut -d\ -f6`
#echo $bitrateline
hours=`echo "scale=0 ; $durationsec / $hatvan / $hatvan" | bc`
minutess=`echo "scale=2 ; ($durationsec / $hatvan / $hatvan - $hours) * $hatvan" | bc`
minutes=`echo $minutess | cut -d\. -f1`
szekundumm=`echo "scale=0 ; $durationsec - $hours * $hatvan * $hatvan - $minutes * $hatvan" | bc`
szekundum=`echo $szekundumm | cut -d\. -f1`
echo "$filename"
echo "Felbontás = $felbontas Bitrate = $bitrate ... Duration = $hours:$minutes:$szekundum"
}
# ************************************************** ************************************************** *******
current_directory=$( pwd )
if [[ $1 == "" ]] ; then
for i in `ls -1 | sort` ; do
filename=$i
DetectScreenResolutionOfMovie
done
exit
fi
filename=$1
DetectScreenResolutionOfMovie
exit
(Persze ez is csak Linux alatt müxik, nincs semmi vindózom, az utolsó amit abból a bitszeméthalomból használtam, a Win98 volt).
Enjoy it! Azaz használd örömmel!
A fenti okok miatt kialakult nálam az a jó szokás, hogy egyes videókat amikről feltételezem hogy később is meg akarom nézni (különösen ilyenek nálam például a mindenféle csomók kötését bemutató tutorialok) LETÖLTÖM, és elmentem, hogy később offline is megnézegethessem.
A baj ezzel az, hogy némely videó bődületesen nagy helyet foglal el, akkor is ha amúgy rövid ideig tart, mert egyes eszement idióták akár harmincezres bitrátával veszik fel, nem tudom mi a francnak, talán hogy 5 méteres képátlójú kivetítőn is élvezhető legyen?! Miközben én csak a magam 1200x900 felbontású laptopján akarom nézni!
Hogy ne pocsékoljam a helyet az SSD egységemen, nyilvánvaló a teendő: át kell kódolni! Egyrészt, a méretet (ha eredetileg nagyobb ennél) 1200x900 -ra kell csökkenteni mert nálam ez a képernyőfelbontás, másrészt a bitrátát is valami normális értékre, nem olyan őrültnagyra meghagyni. Tapasztalataim szerint az olyan videóra amiben sok a mozgás, az 1200-as bitráta általában megfelelő, ami azonban igazán „tutorial” jellegű, nincs benne sok képváltás hirtelen hanem inkább csak duma, ott a 800 is elegendő, sőt néha a 600 is, de volt olyan ami már 400-nál is kielégítő eredményt hozott.
Akinek a képernyője nem 1200x900 felbontású, az egyszerűen írja át e két számot a szkriptben, ahol ezek globális változókként vannak megadva, könnyű megtalálni őket a kódban.
Íme a videóátkódoló bash-szkriptem - csak Linux alatt működik:
#!/bin/bash
# Képernyőfelbontás-meghatározó szubrutin:
function DetectScreenResolutionOfMovie
{
felbontas=`ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $filename`
# Levágjuk a felbontás string elejét, az x karakterig:
szelesseg=`echo $felbontas | cut -d\x -f1`
# Levágjuk a felbontás string végét, az x karaktertől:
magassag=`echo $felbontas | cut -d\x -f2`
}
# ************************************************** ****************************************
function bekodol
{
csend="-really-quiet -msglevel all=-1 -msglevel statusline=5"
c=$filename
kiterjesztes=${c##*.}
basenev=`basename $c .$kiterjesztes`
# Kiderítjük a film eredeti képernyőfelbontását:
DetectScreenResolutionOfMovie
# Most össze kell hasonlítanunk a film eredeti felbontását a mi képernyőfelbontásunkkal:
if [ "$szelesseg" -le "$szelessegem" ] && [ "$magassag" -le "$magassagom" ]; then
if [[ $flag == "" ]] ; then
echo "A film eredeti felbontása = $felbontas, ez kisebb mint $szelessegem x $magassagom, tehát nincs képernyőkorrekció."
parancs="mencoder $filename $csend -ovc xvid -forceidx -xvidencopts bitrate=$btr -oac mp3lame -o $basenev.br$btr.avi"
echo $parancs
$parancs
fi
else
# Valamelyik méret nagyobb mint az aktuális képernyőméret, így korrekcióra van szükség:
ujszelesseg=$szelessegem
ujmagassag=$magassagom
if [ "$szelesseg" -le "$szelessegem" ]; then
ujszelesseg=$szelesseg
fi
if [ "$magassag" -le "$magassagom" ]; then
ujmagassag=$magassag
fi
echo "A film eredeti felbontása = $felbontas, tehát képernyőméret-korrekció szükséges."
parancs="mencoder $filename $csend -ovc xvid -xvidencopts bitrate=$btr -vf scale=$ujszelesseg:$ujmagassag -oac mp3lame -o $basenev.br$btr.avi"
echo $parancs
$parancs
fi
}
# ************************************************** ****************************************
# ************************************************** ****************************************
# Ez a szkript tulajdonképpeni belépési pontja, a kezdete:
flag="-"
current_directory=$( pwd )
szelessegem="1600"
magassagom="900"
if [[ $1 == "" ]] ; then
echo "Használat:"
echo "kod bitrate filename"
echo "ahol a bitrate egy egész szám, például 1024 vagy 800 stb."
echo "A program így is indítható:"
echo "kod bitrate"
echo "Ebben az esetben az aktuális könyvtár minden állományára végrehajtja az átkódolást"
echo "(de az esetleges alkönyvtárakban már nem)"
echo "Ha így hívjuk meg:"
echo "kod bitrate -"
echo "akkor is meghívódik a szkript az aktuális könyvtár minden állományára,"
echo "de csak akkor történik átkódolás, ha a videó eredeti képernyőfelbontása nagyobb, mint"
echo "az a felbontás, amit e szkript szelessegem és magassagom nevű változóiban beállítottunk."
exit
fi
btr=$1
if [[ $2 == "-" ]] ; then
flag=$2
else
flag=""
fi
if [[ $2 == "" ]] || [[ $2 == "-" ]] ; then
#for i in *.* ; do
for i in `ls -1 | sort` ; do
filename=$i
bekodol
done
echo
exit
fi
filename=$2
bekodol
echo
exit
A szkriptnek a kod nevet adtam, mert ugyebár kódol... Használat:
kod bitráta eredeti_videofájl_neve
Ahhoz hogy működjön, feltelepítve kell legyen a mencoder és az ffprobe program.
Itt egy másik hasznos progi is, amivel kideríthetjük még átkódolás előtt a videofájl eredeti felbontását és bitrátáját (az időtartamot azaz „duration”-t is), ennek a res nevet adtam:
#!/bin/bash
# "Használat:"
# "res filename"
# "Vagy:"
# "res"
# "Ebben az esetben az aktuális könyvtár minden állományára végrehajtja a képernyőfelbontás kiderítését"
# "(de az esetleges alkönyvtárakban már nem)."
# Képernyőfelbontás-meghatározó szubrutin:
function DetectScreenResolutionOfMovie
{
hatvan=60
felbontas=`ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $filename`
durationsec=`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $filename`
# Levágjuk a felbontás string elejét, az x karakterig:
szelesseg=`echo $felbontas | cut -d\x -f1`
# Levágjuk a felbontás string végét, az x karaktertől:
magassag=`echo $felbontas | cut -d\x -f2`
bitrateline=`ffmpeg -i $filename 2>&1 | grep bitrate`
bitrate=`echo $bitrateline | cut -d\ -f6`
#echo $bitrateline
hours=`echo "scale=0 ; $durationsec / $hatvan / $hatvan" | bc`
minutess=`echo "scale=2 ; ($durationsec / $hatvan / $hatvan - $hours) * $hatvan" | bc`
minutes=`echo $minutess | cut -d\. -f1`
szekundumm=`echo "scale=0 ; $durationsec - $hours * $hatvan * $hatvan - $minutes * $hatvan" | bc`
szekundum=`echo $szekundumm | cut -d\. -f1`
echo "$filename"
echo "Felbontás = $felbontas Bitrate = $bitrate ... Duration = $hours:$minutes:$szekundum"
}
# ************************************************** ************************************************** *******
current_directory=$( pwd )
if [[ $1 == "" ]] ; then
for i in `ls -1 | sort` ; do
filename=$i
DetectScreenResolutionOfMovie
done
exit
fi
filename=$1
DetectScreenResolutionOfMovie
exit
(Persze ez is csak Linux alatt müxik, nincs semmi vindózom, az utolsó amit abból a bitszeméthalomból használtam, a Win98 volt).
Enjoy it! Azaz használd örömmel!