Sestavení video DVD - který postup je správný ? (dlouhé)

Miroslav BENES miroslav_benes na zdas.cz
Úterý Duben 18 13:41:29 CEST 2006


  Přeji krásný den !

Asi se ptám na triviálnost, ale jaký postup používáte pro sestavení 
video DVD ? Nějak se mi nedaří.
Předem děkuji za tipy.

Systém : FC4, kernel 2.6.14-1.1653_4.rhfc4.cubbi_swsusp2
balíčky : avidemux2-2.0.40-1.2.fc4.rf, 
ffmpeg-libpostproc-0.4.9-0.3.20051207.2.fc4, 
ffmpeg-0.4.9-0.3.20051207.2.fc4, mplayer-1.0-0.20.pre7.2.fc4, 
pygtk2-2.6.2-0.fc4.4, wxGTK-2.6.2-0.2.2.fc4, 
wxPython-common-gtk2-unicode-2.6.3.2-fc4_py2.4, tovid-0.26 ...

Vstupní soubor : AVI získaný z TV vysílání (analog VCR -> DV Cam -> .. ) 
o délce cca 2:06  /  28 GB :
...
AVI file format detected.
AVI: ODML: Building odml index (2 superindexchunks)
VIDEO:  [dvsd]  720x576  24bpp  25.000 fps  1533.2 kbps (187.2 kbyte/s)
...
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 48000 Hz, 2 ch, s16le, 1536.0 kbit/100.00% (ratio: 192000->192000)
Selected audio codec: [pcm] afm:pcm (Uncompressed PCM)
...

Jen pro upřesnění - vstupní soubor je bez problémů přehratelný v mplayer-u.


a) postup č. 1 : tovid
======================
Podle návodu v časopise Linux+ (04/2005, str 28+) jsem použil utilitu 
tovid :

$ time tovid -pal -dvd -force -full -debug -in input.avi -out out-dvd


Po 6 hodinách proces skončil. Výsledkem jsou dva MPG soubory o délce 4,5 
a 3,1 GB. To je sice hezké, ale rád bych to stlačil na jedno DVD-R médium.
Jak se dá ovlivnit délka výsledného souboru ?


b) postup č. 1b : tovid
=======================
Zkusil jsem nastavit výstupní rozlišení na -half-dvd, což by IMHO mělo 
snížit výstupní objem dat na polovinu. Ale nefunguje to - výpis z logu :
...
[tovid]: Encoding video stream with the following commands:
[tovid]: nice -n 0 mplayer -benchmark -nosound -noframedrop -noautosub 
-vo yuv4mpeg   -vf-add scale=352:576  "input.avi"
[tovid]: cat stream.yuv |   nice -n 0 mpeg2enc --sequence-length 4300 
--nonvideo-bitrate 274  --aspect 2 -f 8 -b 4800 -g 4 -G 9 -K hi-res 
--frame-rate 3 -v 1 --video-norm p --reduction-4x4 2 --reduction-2x2 1 
-q 5 -o "out-dvd-half.m2v"
Using GNU internationalization
Original domain: messages
Original dirname: /usr/share/locale
Current domain: mplayer
Current dirname: /usr/share/locale

MPlayer 1.0pre7-4.0.2 (C) 2000-2005 MPlayer Team
CPU: Intel Pentium 4/Xeon/Celeron Foster (Family: 8, Stepping: 9)
Detected cache-line size is 64 bytes
CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1

Linux RTC init error in ioctl (rtc_irqp_set 1024): Permission denied
Try adding "echo 1024 > /proc/sys/dev/rtc/max-user-freq" to your system 
startup scripts.
Can't init input joystick
Opening joystick device /dev/input/js0
Can't open joystick device /dev/input/js0 : No such file or directory
Setting up LIRC support...
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support.
You will not be able to use your remote control.
Playing input.avi.
Playing /mnt/captive-big/pinacle-out/barbora-avi.avi.
AVI file format detected.
AVI: ODML: Building odml index (2 superindexchunks)
   INFO: [mpeg2enc] SETTING EXTENDED MMX for MOTION!
   INFO: [mpeg2enc] SETTING SSE and MMX for TRANSFORM!
   INFO: [mpeg2enc] SETTING EXTENDED MMX for PREDICTION!
AVI_NI: No audio stream found -> no sound.
VIDEO:  [dvsd]  720x576  24bpp  25.000 fps  1533.2 kbps (187.2 kbyte/s)
Using (default) progressive frame mode.Opening video filter: [scale 
w=352 h=576]
==========================================================================
Opening video decoder: [dshow] DirectShow video codecs
Decoder supports the following YUV formats: YUY2 UYVY
Decoder is capable of YUV output (flags 0x9)
VDec: vo config request - 720 x 576 (preferred csp: Packed YUY2)
[PP] Using codec's postprocessing, max q = 4.
VDec: using Packed YUY2 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
SwScaler: reducing / aligning filtersize 10 -> 12
SwScaler: reducing / aligning filtersize 10 -> 12
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 9 -> 8

SwScaler: BICUBIC scaler, from Packed YUY2 to Planar YV12 using MMX2
VO: [yuv4mpeg] 352x576 => 720x576 Planar YV12
Selected video codec: [qdv] vfm:dshow (Sony Digital Video (DV))
==========================================================================
Audio: no sound
Starting playback...


MPlayer interrupted by signal 11 in module: decode_video
- MPlayer crashed by bad usage of CPU/FPU/RAM.
  Recompile MPlayer with --enable-debug and make a 'gdb' backtrace and
  disassembly. Details in 
DOCS/HTML/en/bugreports_what.html#bugreports_crash.
- MPlayer crashed. This shouldn't happen.
  It can be a bug in the MPlayer code _or_ in your drivers _or_ in your
  gcc version. If you think it's MPlayer's fault, please read
  DOCS/HTML/en/bugreports.html and follow the instructions there. We 
can't and
  won't help unless you provide this information when reporting a 
possible bug.
   INFO: [mpeg2enc] Selecting DVD output profile
   INFO: [mpeg2enc] Progressive input - selecting progressive encoding.
   INFO: [mpeg2enc] Encoding MPEG-2 video to 
/mnt/video/barbora/barbora-DVD-half.m2v
   INFO: [mpeg2enc] Horizontal size: 352 pel
   INFO: [mpeg2enc] Vertical size: 576 pel
   INFO: [mpeg2enc] Aspect ratio code: 2 = 4:3 display
   INFO: [mpeg2enc] Frame rate code:   3 = 25.0 (PAL/SECAM VIDEO / 
converted FILM)
   INFO: [mpeg2enc] Bitrate: 4800 KBit/s
   INFO: [mpeg2enc] Quality factor: 5 (Quantisation = 5) (1=best, 31=worst)
   INFO: [mpeg2enc] Field order for input: none/progressive
   INFO: [mpeg2enc] New Sequence every 4300 Mbytes
   INFO: [mpeg2enc] Assuming non-video stream of 274 Kbps
   INFO: [mpeg2enc] Search radius: 16
   INFO: [mpeg2enc] DualPrime: no
   INFO: [mpeg2enc] Using one-pass rate controller
   INFO: [mpeg2enc] GOP SIZE RANGE 4 TO 9
   INFO: [mpeg2enc] Setting colour/gamma parameters to "PAL B/G"
   INFO: [mpeg2enc] Progressive format frames = 1
   INFO: [mpeg2enc] Setting hi-res intra Quantisation matrix
   INFO: [mpeg2enc] Buffering 21 frames
   INFO: [mpeg2enc] Signaling last frame = -1
   INFO: [mpeg2enc] SETTING MMX and MMX for QUANTIZER!
   INFO: [mpeg2enc] NEW GOP INIT length 9
/usr/local/bin/tovid: line 273: 29317 Done                    cat stream.yuv
     29318 Neoprávněný přístup do paměti (SIGSEGV)                     | 
nice -n 0 mpeg2enc --sequence-length 4300 --nonvideo-bitrate 274 
--aspect 2 -f 8 -b 4800 -g 4 -G 9 -K hi-res --frame-rate 3 -v 1 
--video-norm p --reduction-4x4 2 --reduction-2x2 1 -q 5 -o 
"out-dvd-half.m2v"


Proč to s parametrem -half-dvd nejde ??


c) postup č. 1c : tovid
=======================
Pro zajímavost jsem zkusil rozchodit tovidgui, ale ten nefunguje :
tovidgui requires wxPython 2.6; please install or upgrade wxPython.

Přitom wxPython mám ve verzi 2.6.3.2 a nepovedlo se mi pro FC4 najít 
novější.


d) postup č. 2 : avidemux2
==========================
Podle návodu na 
http://www.abclinuxu.cz/clanky/navody/prevod-filmu-na-dvd jsem zkusil 
použít avidemux2.
Dvouprůchodové zpracování odhadovalo trvání na cca 10 hodin, 
jednodprůchodové (ač mělo být rychlejší) nakonec také. Takže jsem 
nastavil pevnou bitrate abych se vešel do cca 4 GB a nechal to běžet 
přes noc.
Bohužel ani tady to nedopadlo dobře - avidemux se "zaseknul" těsně před 
koncem. Výsledný soubor má cca 3,7 GB (což je OK), ale jenom 2:00:56 
místo 2:06.
Jak jsem zjistil z jiného zdroje, není to u tohoto programu nic 
neobvyklého a nejsem sám, komu se zmrazil na 96%.


e) postup č. 3 : ffmpeg
=======================
Podle návodu na 
http://www.abclinuxu.cz/clanky/navody/jak-vytvorit-vlastni-dvd-pod-linuxem-i 
jsem zkusil použít ffmpeg, který by měl být relativně rychlý.
Sestavil jsem si skript :

input_video=input.avi
MAXRATE=9800
BITRATE=7500
MINRATE=150

ffmpeg -y -i ${input_video} -vcodec mpeg2video  -maxrate ${MAXRATE} -b 
${BITRATE} -minrate ${MINRATE}  -aspect 2 -passlogfile passlogfile.log 
-an  -pass 1 -f mpeg /dev/null

ffmpeg -y -i $* -vcodec mpeg2video  -maxrate ${MAXRATE} -b ${BITRATE} 
-minrate ${MINRATE}  -aspect 2 -passlogfile passlogfile.log -an -pass 2 
-f mpeg inter0_video.m2v


(hodnoty MAXRATE, MINRATE a BITARET jsou střelené od boku a asi by je 
bylo potřeba před finálním sestavením upravit).

Bohužel ani tato cesta nevede k cíli :

ffmpeg -y -i input.avi -vcodec mpeg2video  -maxrate 9800 -b 7500 
-minrate 150  -aspect 2 -passlogfile passlogfile.log -an  -pass 1 -f 
mpeg /dev/null
ffmpeg version CVS, build 3277056, Copyright (c) 2000-2004 Fabrice Bellard
  configuration:  --prefix=/usr --libdir=/usr/lib 
--mandir=/usr/share/man --enable-mp3lame --enable-libogg --enable-vorbis 
--enable-theora --enable-faad --enable-faac --enable-libgsm 
--enable-xvid --enable-x264 --enable-a52 --enable-a52bin --enable-dts 
--enable-pp --enable-shared-pp --enable-shared --enable-pthreads 
--enable-gpl --disable-opts --disable-strip
  built on Dec  9 2005 05:57:44, gcc: 4.0.1 20050727 (Red Hat 4.0.1-5)
Input #0, avi, from 'input.avi':
  Duration: 02:06:00.8, start: 0.000000, bitrate: 30339 kb/s
  Stream #0.0, 25.00 fps: Video: dvvideo, yuv420p, 720x576
  Stream #0.1: Audio: pcm_s16le, 48000 Hz, stereo, 1536 kb/s
Output #0, mpeg, to '/dev/null':
  Stream #0.0,   nan fps: Video: mpeg2video, yuv420p, 720x576, q=2-31, 
pass 1, 7500 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
[mpeg2video @ 0x3d08a68]a vbv buffer size is needed, for encoding with a 
maximum bitrate
Error while opening codec for output stream #0.0 - maybe incorrect 
parameters such as bit_rate, rate, width or height
ffmpeg -y -i  -vcodec mpeg2video  -maxrate 9800 -b 7500 -minrate 150  
-aspect 2 -passlogfile passlogfile.log -an -pass 2 -f mpeg inter0_video.m2v
ffmpeg version CVS, build 3277056, Copyright (c) 2000-2004 Fabrice Bellard
  configuration:  --prefix=/usr --libdir=/usr/lib 
--mandir=/usr/share/man --enable-mp3lame --enable-libogg --enable-vorbis 
--enable-theora --enable-faad --enable-faac --enable-libgsm 
--enable-xvid --enable-x264 --enable-a52 --enable-a52bin --enable-dts 
--enable-pp --enable-shared-pp --enable-shared --enable-pthreads 
--enable-gpl --disable-opts --disable-strip
  built on Dec  9 2005 05:57:44, gcc: 4.0.1 20050727 (Red Hat 4.0.1-5)
-vcodec: I/O error occured
Usually that means that input file is truncated and/or corrupted.




Tak teď už opravdu nevím.
Dřív než se zase ponořím do bádání a hledání správného postupu metodou 
pokus-omyl (za ohromné ztráty času) se raději ptám zkušenějších jak na 
to ? Jaký postup je ten nejsnáze reprodukovatelný, s kvalitními výsledky 
a netrvající víc než je nutné ?

A to jsem pro začátek zvolil pro jednoduchost soubor nagrabovaný z videa 
v PAL, tedy IMHO jednodušší než jiné možné varianty (jiné rozlišení, s 
titulky apod.)


Kde dělám chybu ?
To opravdu není v linuxu nějaký jednoduchý a spolelivý soft (a je celkem 
jedno jestli klikacé nebo konzolový) kterým by se tento krok přípravy 
videa pro DVD dal spáchat ?



Další informace o konferenci Linux