Portál AbcLinuxu, 16. prosince 2025 00:15
Dnes jsem si pro svou vlastní potřebu vytvořil skriptík, který mi vytvoří DVD-VIDEO ISO obraz ze složky obsahující strukturu DVD. Používá to zenity a mkisofs a je to určené převážně pro nautilus (plugin nautilus-actions). A protože nejsem hajzl, tak vám ho tu pěkně vystavím. Je to pod licencí MIT, takže si s tím dělejte, co uznáte za vhodné.
#!/bin/bash
if [ -z "$1" ]; then
zenity --error --text="Zadejte název adresáře"
exit 1
fi
DIR="`sed -e \"s/'//g\" <<<\"$1\"`"
if [ ! -d "${DIR}" ]; then
zenity --error --text="Adresář neexistuje"
exit 1
fi
if [ ! -d "${DIR}/AUDIO_TS" -o ! -d "${DIR}/VIDEO_TS" ]; then
zenity --error --text="Adresář neobsahuje platnou strukturu DVD"
exit 1
fi
DVD_NAME_HINT="`basename \"${DIR}\"`"
DVD_NAME="`zenity --entry --text=\"Zadejte název DVD\" --entry-text=\"${DVD_NAME_HINT}\"`"
if [ $? != 0 -o "${DVD_NAME}" = "" ]; then
exit 1
fi
OUTPUT_DIR="`dirname \"${DIR}\"`"
OUTPUT_FILE="${OUTPUT_DIR}/${DVD_NAME}.iso"
LOG="${OUTPUT_DIR}/.${DVD_NAME}-mkdvdvideoiso.log"
mkisofs -dvd-video -V "$DVD_NAME" -o "${OUTPUT_FILE}" "${DIR}" >"${LOG}" 2>&1 &
MK_PID=$!
while true
do
step="`tail -n1 \"${LOG}\" | grep % | cut -d '.' -f1`"
echo $step
if [ -n "`cat \"${LOG}\" | grep extents`" ]; then
echo "100"
fi
sleep 0.5
done | zenity --progress --auto-close --title "Vytvářím obraz DVD ..." --text "Vytvářím obraz DVD ..."
if [ $? -eq 0 ]; then
zenity --info --title "Vytváření obrazu dokončeno." --text "Vytváření obrazu dokončeno."
wait ${MK_PID}
else
kill ${MK_PID} >/dev/null 2>&1
fi
rm -f "${LOG}"
Skript uložte třeba jako /usr/bin/mkdvdvideoiso a přidejte mu právo pro spuštění (chmod +x /usr/bin/mkdvdvideoiso). Dále je potřeba nastavit nautilus-actions.
V gnome vlezte do "Systém-Volby-Konfigurace akcí nautilus" a klikněte na "Přidat". Jmenovku dejte třeba "Vytvořit obraz DVD", ikonu "gtk-cdrom", cesta "/usr/bin/mkdvdvideoiso", parametry "%d/%f" (parametry včetně uvozovek). Na kartě podmínky přepněte na "Pouze složky". Potvrďte, zavřete. A jak to funguje?
Máme třeba adresář "/Users/Jarda/Filmy/Tarzan 2" a v něm strukturu DVD (AUDIO_TS a VIDEO_TS/*). Pravým myšítkem klikněte na adresář "/Users/Jarda/Filmy/Tarzan 2" a zvolte "Vytvořit obraz DVD". Zeptá se to na jmenovku disku (např "Tarzan 2" a v adresáři /Users/Jarda/Filmy to vytvoří soubor "Tarzan 2.iso". Proces vytváření indikuje progressbar zenity. Po skončení je zobrazena zpráva.
Má to určitě pár chybek a neměli byste spouštět více procesů v jednom adresáři, jinak se budou mlátit dočasné soubory
Když to někdo vylepší, muže mi to poslat do diskuse, rád si to u sebe vylepším také.
Trošičku jsem upravil ten skript, takže by teď mělo být možné výcenásobné spuštění v jednom adresáři.
Tiskni
Sdílej:
#!/bin/bash
# definitions
CHAPTER_SEC_SIZE=300
MAX_VIDEO_SEC_SIZE=36000
# usage:
# anyToDvd [ -p ] video.avi [subtitles.srt]
TMP_MPEG=".dvd_mpeg_file.$$.mpg"
TMP_DVD=".dvd.$$"
# check existence of utilities
FAIL=0
if ! which mplayer; then
echo "Missing mplayer"
let FAIL+=1
fi
if ! which mencoder; then
echo "Missing mencoder"
let FAIL+=1
fi
if ! which dvdauthor; then
echo "Missing dvdauthor"
let FAIL+=1
fi
if ! which mkisofs; then
echo "Missing mkisofs"
let FAIL+=1
fi
if [ "$FAIL" != "0" ]; then
exit 1
fi
# parse args
if [ "$1" == "-p" ]; then
SRC=$2
SUB=$3
else
SRC=$1
SUB=$2
fi
# if asked for play, do it, else encode video to dvd
if [ "$1" == "-p" ]; then
mplayer $SRC $SUB
# else encode
else
# copy cp1250 subtitles
# using subtitles?
if [ "$SUB" != "" ] && [ -e $SUB ]; then
mkdir -p ~/.mplayer/font/
cp /usr/share/mplayer/font/cp1250/arial-18/* /home/msk/.mplayer/font/
if [ "$?" != "0" ]; then
echo "Edit script and specify correct font to copy"
exit 1
fi
fi
# encode video
# base switches
MENCODER="mencoder -oac lavc -ovc lavc -of mpeg "
MENCODER="$MENCODER -mpegopts format=dvd -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=16/9 "
# using subtitles?
if [ "$SUB" != "" ] && [ -e $SUB ]; then
MENCODER="$MENCODER -sub $SUB "
fi
# closing options
MENCODER="$MENCODER -ofps 25 -o $TMP_MPEG $SRC"
# do it
$MENCODER
# create long chapter time list for dvdauthor
LTL="0"
for i in $(seq $CHAPTER_SEC_SIZE $CHAPTER_SEC_SIZE $MAX_VIDEO_SEC_SIZE); do
LTL="$LTL,$i"
done
# author dvd
dvdauthor -o $TMP_DVD -c $LTL $TMP_MPEG
dvdauthor -T -o $TMP_DVD
# make image
mkisofs -dvd-video -o $SRC.iso $TMP_DVD
# remove temp files
rm -rf $TMP_DVD $TMP_MPEG
# done
echo "Output created as $SRC.iso"
fi
Bez kontrol, titulkov a balastu okolo su to 4 commandy: mencoder, dvdauthor, dvdauthor -T, mkisofs.
#! /bin/sh # toto vytvori iso obraz, nutno upravit nazev filmu ISOFILE="navrat_krale_1.iso" cd /home/uzivatel/filmyiso; mkisofs -dvd-video -udf -o $ISOFILE /home/dalibor/isoobrazy;2) vypálení na DVD
# toto vypali iso obraz, nutno upravit nazev filmu ISOFILE="navrat_krale_1.iso" cd /home/uzivatel/filmyiso; growisofs -speed=1 -Z /dev/cdrom=$ISOFILE;
. Spíš mi to v logu ukazuje jako zápis 2,5x (nikoliv 1), což odpovídá těm odhadnutým 20 - 25 minutám. Ale tato rychlost mi vyhovuje, takže proč to nepálí zadanou rychlostí 1 nijak neřeším.
A pokud jde o převod mpg nebo avi souboru na DVD, používám mandvd, podporuje i české titulky a různá menu.
Ale o tom můj zápis není ...
To by se mi teda nechtělo to pokaždé editovat..
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.