Názory k článku AVI 2 DVD pod Linuxem

  • Článek je starý, nové názory již nelze přidávat.
  • 5. 2. 2004 0:23

    tdc (neregistrovaný)

    Pro jednoho znameho jsem jako 'proof of concept' stvoril v pythonu generator BMP titulkovych slajdu pro jeden Windowsovsky DVD software (chvastal jsem se, ze je to prace na 10 minut :)). Nevim o jaky sw slo, vim jenom, ze jako vstupni soubory pro tvorbu VobSubu byla sada BMP souboru s titulky a jednoduchy TXT soubor urcujici jejich cas. Mym vstupem byl .SUB format a kreslilo to i texty kurzivou (v .SUB tusim jako {Y:i}). Mozna bych to jeste nekde vyhrabal, pokud by to nekdo chtel (i kdyz to byl opravdu jen 10ti minutovy ugly hack :))

  • 5. 2. 2004 10:47

    Petr Stehlik (neregistrovaný)

    Zkuste Avidemux2, nahradi 2/3 clanku, protoze ovladani je intuitivni. Skriptovatelny je taky.

  • 2. 2. 2006 8:52

    postup je OK! (neregistrovaný)
    Casem jsem postup zautomatizoval, pouzivam to hlavne na vytvareni DVD z DV capture (Kino), a prilezitostne nahravky z TV DVB-T, od znamych:


    ---- SKRIPT 3: AUTHORING -----

    #!/bin/sh

    ###############################################################################
    # Script: dvdmenu.sh
    # Purpose: This script creates a simple, DVD compliant menu.
    # Version: 0.13
    ###############################################################################

    ###############################################################################
    ########
    ###############################################################################

    TITLES=1

    ISO_FILE="/space/burn/thailand1.iso"
    DVD_DIR="/data/dvd/dvd"

    MENUTOPLEFTX=180
    MENUTOPLEFTY=300
    MENULINESPACING=90
    FONTSIZE=50

    FONTCOLOR="#f4f2bf"
    BACKGROUNDCOLOR="THIS IS IGNORED IF BACKGROUND IMAGE SPECIFIED"
    CURSORCOLORSELECTED="#d2ad19"
    CURSORCOLOR=$FONTCOLOR

    BACKGROUNDIMAGE="/data/dvd/mpg/jpg/thailand1m.jpg"
    DVDNAME=""
    DVDNAMEX="140"
    DVDNAMEY="110"

    CHAPS="0:00,5:00,10:00,15:00,20:00,25:00,30:00,35:00,40:00,45:00,50:00,55:00,1:00:00,1:05:00,1:10:00,1:15:00,1:20:00,1:25:00,1:30:00,1:35:00,1:40:00,1:45:00,1:50:00,1:55:00,2:00:00,2:05:00,2:10:00,2:15:00,2:20:00,2:25:00,2:30:00,2:35:00,2:40:00,2:45:00,2:50:00,2:55:00,3:00:00"

    M_TITLE[1]="Thajsko 2002 (I/V)"
    M_FILE_PART_ONE[1]="/space/digital8/mpg/thailand1.mpg"
    M_FILE_PART_TWO[1]="/space/digital8/mpg/thailand21.mpg"
    M_FILE_PART_THREE[1]=""
    M_FONTCOLOR[1]=$FONTCOLOR

    M_TITLE[2]=""
    M_FILE_PART_ONE[2]=""
    M_FILE_PART_TWO[2]=""
    M_FILE_PART_THREE[2]=""
    M_FONTCOLOR[2]=$FONTCOLOR

    M_TITLE[3]=""
    M_FILE_PART_ONE[3]=""
    M_FILE_PART_TWO[3]=""
    M_FILE_PART_THREE[3]=""
    M_FONTCOLOR[3]=$FONTCOLOR

    M_TITLE[4]=""
    M_FILE_PART_ONE[4]=""
    M_FILE_PART_TWO[4]=""
    M_FILE_PART_THREE[4]=""
    M_FONTCOLOR[4]=$FONTCOLOR

    M_TITLE[5]=""
    M_FILE_PART_ONE[5]=""
    M_FILE_PART_TWO[5]=""
    M_FILE_PART_THREE[5]=""
    M_FONTCOLOR[5]=$FONTCOLOR

    M_TITLE[6]=""
    M_FILE_PART_ONE[6]=""
    M_FILE_PART_TWO[6]=""
    M_FILE_PART_THREE[6]=""
    M_FONTCOLOR[6]=$FONTCOLOR

    ###############################################################################
    #####
    ###############################################################################

    W=720
    H=576

    echo -e "\n\n\n=============================================================="
    echo "Creating background image: $W x $H ..."

    if [ -z "$BACKGROUNDIMAGE" ]; then
    convert -size "$W"x"$H" \
    xc:$BACKGROUNDCOLOR menu-tmp0.png > /dev/null 2>&1
    else
    echo "Using background image: $BACKGROUNDIMAGE"
    convert -scale "$W"x"$H" $BACKGROUNDIMAGE menu-tmp0.png > /dev/null 2>&1
    fi

    if [ -z "$DVDNAME" ]; then
    mv -f menu-tmp0.png menu-tmp1.png
    else
    echo "Adding DVD name: $DVDNAME"
    convert -font helvetica-bold \
    -pointsize $FONTSIZE \
    -antialias \
    -fill $FONTCOLOR \
    -draw "text $DVDNAMEX,$DVDNAMEY '$DVDNAME'" \
    "menu-tmp0.png" "menu-tmp1.png"
    fi

    for TITLE_NO in $(seq $TITLES)
    do
    echo "Adding movie title #$TITLE_NO: ${M_TITLE[$TITLE_NO]}"

    X=$MENUTOPLEFTX
    Y=`echo $TITLE_NO*$MENULINESPACING | bc`
    Y=`expr $MENUTOPLEFTY + $Y - $MENULINESPACING`
    echo "X=$X"
    echo "Y=$Y"

    TITLE_NO_NEXT=`expr $TITLE_NO + 1`
    convert -font helvetica-bold \
    -pointsize $FONTSIZE \
    -antialias \
    -fill ${M_FONTCOLOR[$TITLE_NO]} \
    -draw "text $X,$Y '${M_TITLE[$TITLE_NO]}'" \
    "menu-tmp$TITLE_NO"".png" "menu-tmp$TITLE_NO_NEXT"".png"
    done

    mv -f "menu-tmp$TITLE_NO_NEXT"".png" menu_background.png
    convert -quality 100 menu_background.png menu_background.jpg
    rm -rf menu-tmp*

    gqview menu_background.jpg

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Creating cursors..."

    convert -size "$W"x"$H" \
    xc:white highlight-tmp1.png > /dev/null 2>&1

    convert -size "$W"x"$H" \
    xc:white nav-tmp1.png > /dev/null 2>&1

    for TITLE_NO in $(seq $TITLES)
    do
    echo "Creating cursor #$TITLE_NO: ${M_TITLE[$TITLE_NO]}"

    X=$MENUTOPLEFTX
    Y=`echo $TITLE_NO*$MENULINESPACING | bc`
    Y=`expr $MENUTOPLEFTY + $Y - $MENULINESPACING`
    echo "X=$X"
    echo "Y=$Y"

    RX0=`expr $X - 50`
    RY0=$Y
    RX1=`expr $X - 10`
    RY1=`expr $Y - 30`

    TITLE_NO_NEXT=`expr $TITLE_NO + 1`

    convert -fill ${M_FONTCOLOR[$TITLE_NO]} \
    -transparent "white" \
    -depth 4 \
    -draw "rectangle $RX0,$RY0 $RX1,$RY1" \
    "highlight-tmp$TITLE_NO"".png" "highlight-tmp$TITLE_NO_NEXT"".png"

    convert -fill $CURSORCOLORSELECTED \
    -transparent "white" \
    -depth 4 \
    -draw "rectangle $RX0,$RY0 $RX1,$RY1" \
    "nav-tmp$TITLE_NO"".png" "nav-tmp$TITLE_NO_NEXT"".png"

    done

    mv -f "highlight-tmp$TITLE_NO_NEXT"".png" highlight.png
    rm -rf highlight-tmp*
    mv -f "nav-tmp$TITLE_NO_NEXT"".png" nav.png
    rm -rf nav-tmp*

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Generating XML: Phase 1: Cursors..."

    echo "<subpictures>
    <stream>
    <spu start=\"00:00:00.0\" end=\"00:00:00.0\"
    highlight=\"highlight.png\"
    select=\"nav.png\"
    autooutline=\"infer\"
    autoorder=\"rows\"/>
    </stream>
    </subpictures>" > highlight.xml
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Generating menu MPEG..."

    echo "Converting the menu background image into a DVD-likeish video stream..."
    jpeg2yuv -n 75 -I p -f 25 -j menu_background.jpg | mpeg2enc -n p -f 8 -o menu_background.m2v

    echo "Creating menu audio track (silence) ..."
    dd if=/dev/zero bs=4 count=1920 | toolame -b 128 -s 48 /dev/stdin menu_audio.m2a

    echo "Merging menu video/audio tracks into an MPEG2 file..."
    mplex -f 8 -o menu.mpg menu_background.m2v menu_audio.m2a

    echo "Finalising menu..."
    spumux highlight.xml < menu.mpg > menu_final.mpg

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Preparing XML file for authoring..."

    AUTHOR_XML_FILE="./author.xml"

    echo "<dvdauthor>
    <vmgm>
    </vmgm>
    <titleset>
    <menus>
    <pgc>" > $AUTHOR_XML_FILE
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Adding jump sections..."

    for TITLE_NO in $(seq $TITLES)
    do
    echo "==> $TITLE_NO"
    echo "<button> jump title $TITLE_NO; </button>" >> $AUTHOR_XML_FILE
    done
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Adding menu..."
    echo "<vob file=\"menu_final.mpg\" pause=\"inf\"/>
    </pgc>
    </menus>
    <titles>" >> $AUTHOR_XML_FILE
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Adding vobs (MPEGs)..."

    for TITLE_NO in $(seq $TITLES)
    do
    echo "<pgc>" >> $AUTHOR_XML_FILE

    if [ -n "${M_FILE_PART_ONE[$TITLE_NO]}" ]; then
    echo "Adding: ${M_FILE_PART_ONE[$TITLE_NO]}"
    echo "<vob file=\"${M_FILE_PART_ONE[$TITLE_NO]}\" chapters=\"$CHAPS\" />" >> $AUTHOR_XML_FILE
    fi

    if [ -n "${M_FILE_PART_TWO[$TITLE_NO]}" ]; then
    echo "Adding: ${M_FILE_PART_TWO[$TITLE_NO]}"
    echo "<vob file=\"${M_FILE_PART_TWO[$TITLE_NO]}\" chapters=\"$CHAPS\" />" >> $AUTHOR_XML_FILE
    fi

    if [ -n "${M_FILE_PART_THREE[$TITLE_NO]}" ]; then
    echo "Adding: ${M_FILE_PART_THREE[$TITLE_NO]}"
    echo "<vob file=\"${M_FILE_PART_THREE[$TITLE_NO]}\" chapters=\"$CHAPS\" />" >> $AUTHOR_XML_FILE
    fi

    echo "<post>
    call menu;
    </post>
    </pgc>" >> $AUTHOR_XML_FILE
    done

    echo "</titles>
    </titleset>
    </dvdauthor>" >> $AUTHOR_XML_FILE
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Preparing destination DVD directory..."
    rm -rf $DVD_DIR
    mkdir $DVD_DIR
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Authoring the DVD..."
    dvdauthor -o $DVD_DIR -x author.xml

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Making the ISO image..."
    mkisofs -dvd-video -o $ISO_FILE $DVD_DIR

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Cleaning up the mess left behind..."
    rm -rf menu*.jpg > /dev/null 2>&1
    rm -rf menu*.m2v > /dev/null 2>&1
    rm -rf menu*.m2a > /dev/null 2>&1
    rm -rf menu*.mpg > /dev/null 2>&1
    rm -rf *.xml > /dev/null 2>&1
    rm -rf *.png > /dev/null 2>&1
    echo "Done."

    ###############################################################################
    echo -e "\n\n\n=============================================================="
    echo "Finished."


    ----- SKRIPT2: KONVERZE pomoci novejsich Mplayers - 1.0.x ---------

    #!/bin/sh

    AVI="/data/dvd/backup/CT2-captured.avi"
    SUB="N/A"
    MOVIE="tg1"
    YEXP=-121
    NORM="p"
    SPEED=25000
    SUBPOS=83

    killall mplayer > /dev/null 2>&1
    rm -rf ./stream.yuv

    mkfifo ./stream.yuv
    mplayer "$AVI" \
    -sub "$SUB" \
    -speed 25000/$SPEED \
    -autosync 30 \
    -benchmark \
    -noframedrop \
    -vop scale=720:576,expand=-1:$YEXP:-1:-1 \
    -subpos $SUBPOS \
    -vo yuv4mpeg \
    -ao pcm:file=audio.wav:waveheader &


    cat ./stream.yuv | mpeg2enc -n $NORM -v 1 -f 8 -I 0 -F 3 -o ./$MOVIE.m2v

    sleep 5
    cat audio.wav | mp2enc -v 1 -r 48000 -o ./$MOVIE.m2a

    sleep 5
    mplex -f 8 -o $MOVIE.mpg $MOVIE.m2v $MOVIE.m2a


    ------ SKRIPT 1: zjisteni parametru AVI --------

    #!/bin/sh

    if [ -z "$1" ];then
    echo -e "\nERROR: Movie file not specified!"
    echo -e "USAGE: $0 /path/to/my_movie.avi\n"
    exit -1
    fi

    _MOVIE_TYPE="`echo $1 | awk '{pos=split($0,p,".");
    print p[pos]}'`"

    if [ $_MOVIE_TYPE = "mpg" ] || [ $_MOVIE_TYPE = "MPG" ]; then
    MOVIE_TYPE="MPEG"
    _FPS=`mplayer -vo null -ao null -frames 5 "$1" 2>/dev/null | grep VIDEO | awk '{print $6}'`
    _RESOLUTION=`mplayer -vo null -ao null -frames 5 "$1" 2>/dev/null | grep VIDEO | awk '{print $3}'`
    fi


    if [ $_MOVIE_TYPE = "avi" ] || [ $_MOVIE_TYPE = "AVI" ]; then
    MOVIE_TYPE="AVI"
    _FPS=`mplayer -vo null -ao null -frames 5 "$1" 2>/dev/null | grep VIDEO | awk '{print $5}'`
    _RESOLUTION=`mplayer -vo null -ao null -frames 5 "$1" 2>/dev/null | grep VIDEO | awk '{print $3}'`
    fi

    _RES_X="`echo $_RESOLUTION | awk '{split($0,p,"x");
    print p[1]}'`"
    _RES_Y="`echo $_RESOLUTION | awk '{split($0,p,"x");
    print p[2]}'`"
    _YEXP=`expr $_RES_X \* 8 / 10 - $_RES_Y`

    echo ""
    echo "CONTAINER=$MOVIE_TYPE"

    case "$_FPS" in
    23.976 ) _SPEED=23976;;
    23.98 ) _SPEED=23976
    _SPEED_ALT="(or 23980)";;
    25 ) _SPEED=25000;;
    25.00 ) _SPEED=25000;;
    29.97 ) _SPEED=29970
    _SPEED_ALT="(OUT OF EXPECTED RANGE)";;
    \? ) _SPEED_ALT="OUT OF RANGE";;
    esac

    echo "FPS=$_FPS"
    echo "RESOLUTION=$_RESOLUTION"
    echo "---------------------"
    echo "SPEED=$_SPEED $_SPEED_ALT"
    echo "YEXP=($_RES_X*0.8)-$_RES_Y=$_YEXP"
    echo ""
  • 5. 2. 2004 15:02

    PSIkappa (neregistrovaný)

    Neviem ci tento clanok bude mat aj nejake pokracovanie, ale celkom pekny serial o tom ako si vytvorit DVD aj s menu je na http://www.abclinuxu.cz

  • 6. 2. 2004 8:50

    Tomas Kolda (neregistrovaný)

    Super clanek. Neznate neco jako avisynth pod Linux? Je to vinikajici nastroj a urcite mi v tomto systemu chybi. Avisynth-linux na sourceforge vypada mrtve...

  • 6. 2. 2004 14:21

    hkmaly (neregistrovaný)

    No nevim. Vzhledem k tomu ze HW DVD prehravac nemam a DVD prehravam mplayerem, nevidim jediny duvod proc na DVD nepalit rovnou .avi. Usetri to spoustu mista.

    Nacpat titulky natvrdo do obrazu je priserna prasarna, omluvitelna jen v pripade ze na stejny disk hodite zdrojove .avi i titulky, aby si to kdokoliv mohl pustit normalne alespon na pocitaci.

  • 27. 7. 2005 9:03

    morganx (neregistrovaný)
    No prostě proto, že spousta lidí DVD přehrávač má a pak jaksi přehrávání videa na PC (větráky, malý monitor oproti TV) není to pravé ořechové :-).
  • 6. 2. 2004 17:11

    Imro Konkol (neregistrovaný)

    Pekny postup ako z AVI na DVD. Skor by ma ale zaujimala nejaka odporucana modifikacia postupu/nastrojov na konverziu AVI -> SVCD. Existuje pod Linuxom nastroj na napalenie mpeg2(s vhodnym rozlisenim a fps) vo formate SVCD?

  • 7. 2. 2004 20:31

    tajkes (neregistrovaný)

    skript mencvcd s parametrom -svcdout vyrobi svcd-cko s hocicoho co prehrate mplayer-om, je sucastou mplayer-u, mozno treba stiahnut zdrojaky, alebo prebrowsit cvs tree

  • 6. 2. 2004 17:13

    Imro Konkol (neregistrovaný)

    Ospravedlnujem sa za chybajuci Subj. v mojom predchadzajucom komentari.

  • 17. 3. 2004 17:54

    Buchar (neregistrovaný)

    Snad Vas to vsechny bude zajimat. STRANECKU KTERA POJEDNAVA O PREHOZENI DVD-ROM MECHANIKY VE STOLNIM DVD PREHRAVACI JSEM DAL NA http://www.bigosi.com/phprs/view.php?cisloclanku=2004031701

  • 25. 3. 2004 10:13

    Buchar (neregistrovaný)

    Protoze se mnozi dotazy proc neni dostupna stranka o PREHOZENI DVD-ROM MECHANIKY VE STOLNIM DVD PREHRAVACI DAL JSEM JI I NA http://www.aviatic.cz/phprs/view.php?cisloclanku=2004031701

  • 20. 10. 2005 11:11

    stefan (neregistrovaný)
    V odstavci 3-5 autor píše: "nutno dodržet název "stream.yuv", je interně hardcoded v mplayeru" a navrhuje příkaz
       $ mplayer chickflick.avi
             -sub chickflick.sub
             -speed 25000/23976
             -autosync 30
             -benchmark
             -noframedrop
             -ao pcm
             -aofile audio.wav
             -vo yuv4mpeg
             -vop scale=720:576,expand=-1:-153:-1:-1
             -subpos 84 &

    Právě jsem to zkoušel, ale nefungovalo mi to (MPlayer 1.0pre7-3.4.1). Jednak se podle dokumentace volba -ao používá trochu jinak, a jednak to vypadá, že jméno roury 'stream.yuv' není v mplayeru natvrdo. Mě fungoval příkaz
       $ mplayer chickflick.avi
             -sub chickflick.sub
             -speed 25000/23976
             -autosync 30
             -benchmark
             -noframedrop
             -ao pcm:file=audio.wav
             -vo yuv4mpeg:file=stream.yuv
             -vop scale=720:576,expand=-1:-153:-1:-1
             -subpos 84 &

    Toť vše.
  • 29. 10. 2005 10:40

    user (neregistrovaný)
    Starsi verze Mplayeru (0.9x) se chovaly opravdu viz. autoruv popis.
    1.0-pre7 je novejsi generace, a chova se v nekterych aspektech jinak.
    Princip ovsem zustava.
  • 30. 1. 2006 21:06

    ernie (neregistrovaný)
    Přednastavené formáty jsou dva 8 a 9 co který znamená? v helpu jsem nenašel víc , než že je to DVD formát.
  • 3. 2. 2006 8:11

    autor (neregistrovaný)
    ...od doby psani clanku prodelal vyvoj. Velmi pouzitelny software. Z postupu pouzivam hlavne authoringovou cast (viz. skript v komentarich/reakcich, kdesi vyse v tomto threadu).