0
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:
A szkriptnek a kod nevet adtam, mert ugyebár kódol... Használat:Kód:#!/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
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:
(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).Kód:#!/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
Enjoy it! Azaz használd örömmel!
Last edited by Sztoikus; 01-07-2026 at 07:12 PM. Indoklás: Mert feliratkozni elfelejtettem a témára.