Skrypt do rekodowania filmów dla PDA (Linuks)

  • 0 Odpowiedzi
  • 397 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Tadzik

  • **
  • 119
  • Płeć: Mężczyzna
  • ...jeszcze tylko zbudować dom...
    • Mój blog z moim synem w roli głównej. :)
  • Sprzęt: MyPal A636 -> Cruser Sigma B43
Skrypt do rekodowania filmów dla PDA (Linuks)
« dnia: Marzec 17, 2007, 23:25:47 »
Witam.
Postanowiłem się podzielić skryptem napisanym w bashu do 'hurtowego' konwertowania filmów .avi do obejrzenia na PDA. Może się komuś przyda. Jeśli łamie w jakiś sposób regulamin czy też jest w złym miejscu na forum - proszę usunąć. Nie pogniewam się. :P

Po co ten skrypt? Mam taką pracę (drukarnia), że czasem mogę 2-3 filmy obejrzeć...  :proud: Żeby nie rekodować pojedynczych plików ręcznie napisałem 'automat'.

Do działania wymagany jest Linuks, duet MPlayer/MEncoder i kodek Lame  (reszta chyba jest standardowo w systemie - sed, grep, bc)
Co robi skrypt? Przekodowuje wszystkie pliki .avi z podanego katalogu do 320px w poziomie jednocześnie zmniejszając video bitrate (do 300kbps - dla PDA wystarczy a na 1GB SD wchodzą lekko 3 pełnometrażowe filmy) oraz audio (do 112kbps w joint stereo). Jeśli do filmu dodany jest plik .txt (ta sama nazwa) to zawarte napisy wkleja w film (TCPMP mi coś nie chce napisów z odrębnych plików odczytywać). Jeśli film jest mocno panoramiczny (bardziej niż 16/9) to go przycina do 16/9. Gotowe umieszcza w podkatalogu o nazwie skryptu. To tyle. Uwagi mile widziane.
#!/bin/bash

if [ -z $1 ]; then
echo "Brak parametrow!"
echo "Sposob uzycia:"
echo "     $0 sciezka/do/katalogu/z/filmami/avi/do/rekodowania"
else
#zdefiniowanie stalych elementow wiersza polecen
def_width=177    #domyslny max stosunek bokow filmu (16/9) wymnozony przez 100
def_vcodec="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=300"
def_acodec="-oac mp3lame -lameopts preset=112" #kodek audio - wymaga lame w systemie
def_vfilter_params="scale=320:-3" #proporcjonalne przeskalowanie do 320 px w poziomie
def_afilter_params="-af resample=44100:0:0" #resampling audio do 44100 (wiekszosc filmow ma 48000)
def_subs_params="-fontconfig -subfont-text-scale 5 -subpos 100 -subcp cp1250 -subfont-encoding unicode" #domyslne parametry do napisow
def_ffourcc="-ffourcc XviD" # TCPMP zna kodek FMP4 ale na wszelki wypadek ustawmy, ze to jednak XviD...

#petla glowna
for plik in $1/*.avi;
do
    params="$def_vcodec $def_acodec $def_afilter_params $def_fourcc" #zbudowanie domyslnych parametrow
    file=$(basename "$plik") #
    file2=`echo $file | sed 's/.avi//g'`
    echo "Film: $file"
    temp=`mplayer "$1/$file" -identify -frames 0 -msglevel all=-1 2> /dev/null | grep ID_VIDEO_WIDTH`
    szerokosc=`echo $temp | sed 's/ID_VIDEO_WIDTH=//g'`
    temp=`mplayer "$1/$file" -identify -frames 0 -msglevel all=-1 2> /dev/null | grep ID_VIDEO_HEIGHT`
    wysokosc=`echo $temp | sed 's/ID_VIDEO_HEIGHT=//g'`
    stosunek=`echo "scale=3; ($szerokosc/$wysokosc)/10" | bc`
    temp=`echo "scale=2; $szerokosc/$wysokosc" | bc`
    stosunek2=`echo $stosunek | sed 's/\.//g'`
    echo "Stosunek boków wynosi: $temp:1"
    if [ "$stosunek2" -gt $def_width ]; then
        echo "Film $file do przyciecia."
        newwidth=`echo "$wysokosc * $def_width / 100" | bc`
        params="$params -vf crop=$newwidth:0,$def_vfilter_params"
         else
        echo "Tylko skalujemy."
        params="$params -vf $def_vfilter_params"
    fi
   
    if [ ! -d $1/$0 ]; then
        mkdir $1/$0
    fi

    if  [ -e "$(echo $plik | sed 's/.avi/.txt/g')" ]; then
        echo "Sa napisy ($file2.txt). Dokladamy."
        mencoder "$1/$file" $params -sub "$1/$file2.txt" $def_subs_params -o "$1/$0/$file"
    else
        mencoder "$1/$file" $params -o "$1/$0/$file"
    fi
done
fi


Instalacja:
1. Tworzymy czymkolwiek i gdziekolwiek plik tekstowy i wklejamy powyższą zawartość
2. Nadajemy uprawnienia do uruchamiania (chmod a+x nazwa_skryptu)
3. Używamy. :)

PS. Dziękuję kilku osobom z forum.ubuntu.pl, które były pomocne przy tworzeniu powyższego skryptu.  :)
640K of memory should be enough for anybody.
[Bill Gates,1981]