Eredmény 1 to 1 of 1

Topic: Videoátkódoló szkript Linux alá

  1. #1
    Senior Member Sztoikus's Avatar
    Csatlakozás dátuma
    Nov 2025
    Hozzászólások
    113
    Thumbs Up
    Received: 19
    Given: 25

    0 Not allowed!

    Videoátkódoló szkript Linux alá

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

    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
    
    (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!
    Last edited by Sztoikus; 01-07-2026 at 07:12 PM. Indoklás: Mert feliratkozni elfelejtettem a témára.

Posting Permissions

  • Te nem nyithatsz új topicot
  • Te nem szólhatsz hozzá
  • Te nem csatolhatsz fájlokat
  • Te nem szerkesztheted a hozzászólásaid
  •