home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / kb / Apps / AV / dv-to-dvd-howto < prev    next >
Text File  |  2004-07-15  |  13KB  |  338 lines

  1. DV-to-DVD-HOWTO
  2. ~~~~~~~~~~~~~~~
  3.  
  4.     v1.0, 2004/01/05, Florin Andrei <florin@andrei.myip.org>
  5.  
  6. http://www.zebra.fh-weingarten.de/~transcode/docs/DV-to-DVD-HOWTO.txt
  7.  
  8. Here are some suggestions on how to convert Digital Video material (DV) to DVD.
  9. This document is focused on material that's shot with DV camcorders. See the end
  10. of the document for helper scripts.
  11.  
  12. 1. About DV
  13. ~~~~~~~~~~~
  14. Digital Video is a format used by most of the modern digital camcorders, both 
  15. in the proffesional arena and in the amateur range. The compression used is 
  16. kind of similar to MJPEG; each image is compressed independently of the others 
  17. (unlike MPEG1/2/4) so DV is "editing-friendly".
  18. Usually, NTSC DV has a resolution of 720x480 and the pixels are non-square; the
  19. aspect ratio is usually either 4:3 or 16:9; the framerate is 29.97 fps and the 
  20. image is interlaced, with the bottom field first. 
  21. PAL is similar, but the resolution is 720x576 and the framerate is 25 fps. 
  22. Variations are possible on non-standard and/or expensive equipment (24 fps, 
  23. progressive, etc.) but are rare.
  24. Using the normal parameters above, 60 minutes of movie get compressed by normal 
  25. DV gear into approximately 10GB to 15GB of video data files.
  26.  
  27. 2. About DVD
  28. ~~~~~~~~~~~~
  29. Very popular digital media, it's using MPEG2 encoding for video and a variety 
  30. of encodings for sound (MP2, AC3, DTS, PCM). There are several resolutions 
  31. permitted by the standard, 720x480 (NTSC) and 720x576 (PAL) being the most 
  32. popular.
  33. The sum of the bitrates of the video track and of the current audio track 
  34. must not be higher than 10.08 Mbit/s, not even for a fraction of a second; 
  35. failure to comply generates DVDs that are unplayable on most standalone DVD 
  36. players. Usually, professional DVDs have their video tracks encoded at a peak 
  37. bitrate of 9800 kbps, hence leaving some room for an audio track. The average 
  38. video bitrate varies greatly, but it's usually between 2000 kbps and 7000 kbps.
  39.  
  40. 3. Capturing DV
  41. ~~~~~~~~~~~~~~~
  42. You need a FireWire card and the Linux utility "dvgrab" version 1.4 or newer.
  43. SuSE 9.0 only has version 1.2 of dvgrab, dvgrab-1.2-162.i586.rpm. Download and
  44. build the latest sources from http://kino.schirmacher.de, 1.5 is now released:
  45.   http://kino.schirmacher.de/filemanager/download/20/dvgrab-1.5.tar.gz
  46. Run the "grab.sh" script (see Appendix B below), then start the camcorder. 
  47. The script "grab.sh" is designed so that it will create a new file for each new
  48. scene on the tape (a new scene begins whenever you paused or stopped the 
  49. camcorder while shooting). If the entire tape was shot as one big scene, only 
  50. one file will be created.
  51. The utility dvgrab can create OpenDML AVI files, so don't worry about file size,
  52. OpenDML stuff can be as big as necessary.
  53. At the end, stop the camcorder if it doesn't stop by itself, then interrupt
  54. the script (using Ctrl-C).
  55. The order of the operations is important.
  56.  
  57. 4. Optional processing
  58. ~~~~~~~~~~~~~~~~~~~~~~
  59. You can preview the captured DV/AVI files using a media player. Currently, 
  60. Xine seems to be the only one supporting OpenDML.
  61. If you don't want a scene, you can simply delete the corresponding file.
  62. If you want to make changes inside a scene, you must use a video editor that 
  63. understands DV and OpenDML; Kino seems to work fine for this.
  64.  
  65. 5. Transcoding to DVD
  66. ~~~~~~~~~~~~~~~~~~~~~
  67. You need a recent transcode version, such as 0.6.11. You need a new 
  68. mjpegtools version as well, at least 1.6.1.92 (plain 1.6.1 won't work), or 
  69. 1.6.2 when it will get released. The homepage for mjpegtools is:
  70.   http://mjpeg.sourceforge.net/ 
  71. For an overview of mjpegtools, see:
  72.  http://linuxmafia.com/faq/Apps/AV/mjpegtools_overview.html 
  73. You also need a fairly recent dvdauthor version, such as 0.6.8.
  74. The script that does the job is "conv-dvd.sh", (see Appendix A below). 
  75. It is designed to work with a capture project directory created by the 
  76. script "grab.sh".
  77.  
  78. Let's discuss the "conv-dvd.sh" script:
  79. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  80. The $flags variable contains the parameters passed to mpeg2enc. You have to 
  81. choose one version and uncomment it; the first two are for high-quality 
  82. encoding, the last two are intended to reduce output file size. 
  83.  
  84. Explanation of the parameters:
  85.  
  86. -c means "all GOPs are closed"; this generates an MPEG2 stream that is more 
  87.    compatible with various apps and players
  88.  
  89. -q sets the quantization factor; 6 is a reasonable value for DV material 
  90.    converted to DVD; decrease it for higher quality, but be aware that you 
  91.    might create video tracks that are not accepted by the multiplexer; 
  92.    increase it for smaller file sizes at the expense of image quality
  93.  
  94. -4 2 -2 1 controls the motion estimation; an even better (quality-wise) value 
  95.           would be "-4 1" but the quality increase is almost imperceptible 
  96.           while the encoding speed decreases a lot; just leave it like it is
  97.  
  98. -K defines the encoder matrix; this script uses a matrix devised by Steven 
  99.    Schultz to maximize the image quality, or the tmpgenc matrix for a more 
  100.    efficient compression (at the expense of image quality)
  101.  
  102. -N is a very gentle low-pass filter that reduces the bitrate usage 
  103.    tremenduosly while not affecting the image too much
  104.  
  105. -E tells the encoder to simply discard bits that are hard to encode yet do 
  106.    not contribute to the image too much
  107.  
  108. -R controls the B frames; encoding with 0 B frames is unusual and some truly 
  109.    broken players may get upset, although it is perfectly legal from the DVD 
  110.    standard point of view; encoding with 2 B frames is normal for proffesional 
  111.    DVDs but it slows down encoding a lot (by 60%) and it makes the compression 
  112.    slightly less efficient for amateur DV stuff (material that's less than 
  113.    _perfect_). If you're like me and don't care about encoding speed (I let the
  114.    script run overnight), then encode with 2 B-frames; if you're in a rush or 
  115.    want to obtain better compression (your space on the DVD is limited) then 
  116.    encode with 0 B-frames, but be aware of the broken players.
  117.  
  118. The $asr variable controls the aspect ratio. Uncomment the appropriate value, 
  119. depending on how your camcorder was configured. An aspect ration of 4:3 would be
  120. for a normal TV screen, 16:9 would be for HDTV. You cannot use one of them if 
  121. your camcorder was configured with the other.
  122.  
  123. The $bitr variable controls the MPEG2 bitrate used for the DVD.
  124. WARNING: Do not increase it above 8500 regardless of what you've been told. 
  125. I know that proffesional DVDs are encoded at a peak value of 9800 kbps, I know 
  126. that various pieces of documentation recommend 9800 as "One Value To Rule Them 
  127. All". Just ignore them. Trust me. If you do otherwise, sooner or later you'll 
  128. create a DVD that will not be playable on some standalone players. I learned 
  129. that the hard way. You have been warned.
  130. Moreover, you don't truly need very high values. I did many evaluations, and 
  131. the results are pretty surprising: many scenes that I shot do not take the 
  132. peak bitrate above 7000 kbps, and the average is at 2000 or something! Only 
  133. very rarely you'll need such high bitrates.
  134.  
  135. Down below in the script you'll find the transcode command. Let's discuss
  136. some command-line parameters:
  137.  
  138. "-x ffmpeg" tells transcode to use ffmpeg as the DV decoder instead of the 
  139.             default Quasar codec. This way you'll obtain a compression which is
  140.             10% better, or thereabouts.
  141.  
  142. "--encode_fields b" tells transcode that the DV material is "bottom field 
  143.                     first". For some reason, that's true for any DV camcorder 
  144.                     in the world.
  145.  
  146. Commented out in the script, you'll find some parameters for generating AC3 
  147. sound for your DVD instead of MP2. While AC3 is more popular, for some reason 
  148. there are audio/video sync issues if you use it. I'm still investigating the 
  149. bug, meanwhile MP2 should be perfectly fine, you can use it with no problems.
  150.  
  151. After transcoding, the script will multiplex the audio and video files using 
  152. mplex. The results are a bunch of VOB files. You can test each one of them 
  153. individually with a media player, since they're essentially MPEG2 files on 
  154. steroids.
  155.  
  156. After multiplexing everything, the VOBs are transformed into a DVD image on the 
  157. hard-drive with the help of dvdauthor.
  158. The DVD is created so that each scene on the DV tape is translated into a 
  159. chapter on the DVD. I believe this makes a lot of sense and allows for a 
  160. simple way to jump to a specific scene while playing the DVD.
  161. This whole chapter affair is accomplished through the XML file that's built 
  162. while transcoding, which instructs dvdauthor to set chapter marks at the 
  163. beginning of each scene.
  164. Of course, you can change all that, see dvdauthor documentation.
  165.  
  166. At the end, there are a few chown/chmod commands, to normalize file ownership 
  167. and permissions. I am not sure if this is really required, I just put them 
  168. there just in case. Remove them if they annoy you.
  169.  
  170. 6. Test the DVD image
  171. ~~~~~~~~~~~~~~~~~~~~~
  172. You can test the newly created DVD image with xine like this:
  173.  
  174. xine dvd:///full/path/to/the/dvd/image/
  175.  
  176. The trailing slash is important. xine will play the image just as though it 
  177. were a true DVD, with chapters and all.
  178.  
  179. 7. Burn the DVD
  180. ~~~~~~~~~~~~~~~
  181. You need a fairly new version of dvd+rw-tools.
  182. SuSE 9.0 has dvd+rw-tools-5.12.4.7.4-11, which seems to be recent enough.
  183. dvd+rw-tools contains the "growisofs" utility, which is a combined mkisofs 
  184. frontend and DVD-recording program.
  185.  
  186. growisofs -speed=4 -Z /dev/scd0 -V "$label" -dvd-video $dvd-image
  187.  
  188. $label is the ISO label you desire. Usually, labels are all caps and do not 
  189. contain spaces. Example: MY_COOL_MOVIE
  190.  
  191. $dvd-image is the directory containing the DVD image.
  192.  
  193. Of course, you can change the speed and the DVD-Writer device to suit your 
  194. existing hardware.
  195.  
  196. Appendix A - the script "conv-dvd.sh"
  197. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  198.  
  199. ----------------snip----------------
  200. #!/bin/sh
  201.  
  202. if [ $# -ne "1" ]; then
  203.   echo "Usage: $0 dirname"
  204.   exit
  205. fi
  206.  
  207. name=$1
  208. pushd $name
  209.  
  210. # high quality, 80 min / DVD
  211. # fast encoding, slightly unusual MPEG2 (no B frames)
  212. flags="-c -q 6 -4 2 -2 1 -K file=matrix.txt -R 0"
  213. # slower encoding, classic MPEG2
  214. #flags="-c -q 6 -4 2 -2 1 -K file=matrix.txt -R 2"
  215. #
  216. # ok quality, 120 min / DVD
  217. # fast encoding, slightly unusual MPEG2 (no B frames)
  218. #flags="-c -q 6 -4 2 -2 1 -N 0.5 -E -10 -K tmpgenc -R 0"
  219. # slower encoding, classic MPEG2
  220. #flags="-c -q 6 -4 2 -2 1 -N 0.5 -E -10 -K tmpgenc -R 2"
  221.  
  222. # Aspect ratio of the original DV tape
  223. # 4:3
  224. asr="--export_asr 2"
  225. # 16:9
  226. #asr="--export_asr 3"
  227.  
  228. bitr="8500"
  229. xmlf="dvdauthor.xml"
  230.  
  231. # Steven Schultz's combined HQ matrix
  232. cat - > matrix.txt << MATRIX
  233. # High resolution INTRA table
  234. 8,16,18,20,24,25,26,30
  235. 16,16,20,23,25,26,30,30
  236. 18,20,22,24,26,28,29,31
  237. 20,21,23,24,26,28,31,31
  238. 21,23,24,25,28,30,30,33
  239. 23,24,25,28,30,30,33,36
  240. 24,25,26,29,29,31,34,38
  241. 25,26,28,29,31,34,38,42
  242. # TMPEGEnc NON-INTRA table
  243. 16,17,18,19,20,21,22,23
  244. 17,18,19,20,21,22,23,24
  245. 18,19,20,21,22,23,24,25
  246. 19,20,21,22,23,24,26,27
  247. 20,21,22,23,25,26,27,28
  248. 21,22,23,24,26,27,28,30
  249. 22,23,24,26,27,28,30,31
  250. 23,24,25,27,28,30,31,33
  251. MATRIX
  252.  
  253. rm -f $xmlf
  254. # dvdauthor XML config head
  255. cat - >> $xmlf << XMLHEAD
  256. <dvdauthor>
  257. <vmgm />
  258. <titleset>
  259. <titles>
  260. <pgc>
  261. XMLHEAD
  262.  
  263. for inp in `ls dv`; do
  264. out=`basename $inp .avi`
  265. transcode -i dv/$inp -x ffmpeg \
  266.     -V -w $bitr \
  267.     --encode_fields b \
  268.     ${asr} \
  269.     -F 8,"${flags}" \
  270.     -y mpeg2enc,mp2enc -b 224 -m $out \
  271.     -o $out \
  272.     --print_status 10
  273. ##################################################
  274. # stuff to copy/paste in the transcode parameters
  275. ##################################################
  276. # use this if DV sound is not sampled at 48kHz
  277. # (it almost ALWAYS is 48kHz!)
  278. #    -E 48000,16,2 -J resample \
  279. #
  280. # AC3 sound
  281. # (has A/V sync bugs, don't use it yet, still investigating...)
  282. #    -y mpeg2enc,raw -N 0x2000 -b 192 -m $out.ac3 \
  283. #
  284. # MP2 sound
  285. #    -y mpeg2enc,mp2enc -b 224 -m $out \
  286. ##################################################
  287.  
  288. # use this with MP2
  289. mplex -r 10000 -f 8 -S 4400 $out.m2v $out.mpa -o $out.vob
  290. # use this with AC3
  291. #mplex -r 10000 -f 8 -S 4400 $out.m2v $out.ac3 -o $out.vob
  292. echo "<vob file=\"$out.vob\" />" >> $xmlf
  293. done
  294.  
  295. # dvdauthor XML config tail
  296. cat - >> $xmlf << XMLTAIL
  297. </pgc>
  298. </titles>
  299. </titleset>
  300. </dvdauthor>
  301. XMLTAIL
  302.  
  303. dvdauthor -o $name -x $xmlf
  304.  
  305. # the next commands require the following line in visudo:
  306. # yourusername ALL = NOPASSWD: ALL
  307. sudo chown -R root:root $name
  308. sudo chmod -R 0755 $name
  309. sudo chmod 0644 $name/*_TS/*
  310. sync
  311. popd
  312. ----------------snip----------------
  313.  
  314.  
  315. Appendix B - the script "grab.sh"
  316. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  317.  
  318. ----------------snip----------------
  319. #!/bin/sh
  320.  
  321. if [ ! $1 ]; then
  322.   echo "Usage: $0 dirname"
  323.   exit
  324. fi
  325. name=$1
  326.  
  327. mkdir -v ${name} || exit
  328. pushd ${name}
  329. mkdir -v dv || exit
  330. pushd dv
  331.  
  332. dvgrab --autosplit --size 0 --format dv2 --opendml \
  333.   --noavc --buffers 200 ${name}-
  334. popd
  335. popd
  336. ----------------snip----------------
  337.  
  338.