You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
319 lines
11 KiB
319 lines
11 KiB
|
|
+-----------------+
|
|
| DV-to-DVD-HOWTO |
|
|
+-----------------+
|
|
|
|
v1.0, 2004/01/05, Florin Andrei <florin@andrei.myip.org>
|
|
|
|
|
|
Here are some suggestions on how to convert Digital Video material (DV) to
|
|
DVD. This document is focused on material that's shot with DV camcorders. See
|
|
the end of the document for helper scripts.
|
|
|
|
1. About DV
|
|
Digital Video is a format used by most of the modern digital camcorders, both
|
|
in the proffesional arena and in the amateur range. The compression used is
|
|
kinda similar to MJPEG; each image is compressed independently of the others
|
|
(unlike MPEG1/2/4) so DV is "editing-friendly".
|
|
Usually, NTSC DV has a resolution of 720x480 and the pixels are non-square;
|
|
the aspect ratio is usually either 4:3 or 16:9; the framerate is 29.97 fps
|
|
and the image is interlaced, with the bottom field first. PAL is similar, but
|
|
the resolution is 720x576 and the framerate is 25 fps. Variations are
|
|
possible on non-standard and/or expensive equipment (24 fps, progressive,
|
|
etc.) but are rare.
|
|
At the normal parameters above, 60 minutes of movie get compressed by normal
|
|
DV gear at approx. 10...15 GB of video files.
|
|
|
|
2. About DVD
|
|
Very popular digital media, it's using MPEG2 encoding for video and a variety
|
|
of encodings for sound (MP2, AC3, DTS, PCM). There are several resolutions
|
|
permitted by the standard, 720x480 (NTSC) and 720x576 (PAL) being the most
|
|
popular.
|
|
The sum of the bitrates of the video track and of the current audio track
|
|
must not be higher than 10.08 Mbit/s, not even for a fraction of a second;
|
|
failure to comply generates DVDs that are unplayable on most standalone DVD
|
|
players. Usually, proffesional DVDs have their video tracks encoded at a peak
|
|
bitrate of 9800 kbps, hence leaving some room for an audio track. The average
|
|
video bitrate varies greatly, but it's usually between 2000...7000 kbps.
|
|
|
|
3. Capturing DV
|
|
You need a FireWire card and dvgrab version 1.4 or newer.
|
|
Run the "grab" script, then start the camcorder. "grab" is designed so that
|
|
it will create a new file for each new scene on the tape (a new scene begins
|
|
whenever you paused or stopped the camcorder when shooting). If the entire
|
|
tape was shot in one big scene, only one file will be created.
|
|
dvgrab can create OpenDML AVI files, so don't worry about file size, OpenDML
|
|
stuff can be as big as necessary.
|
|
At the end, stop the camcorder if it doesn't stop by itself, then CTRL-C the
|
|
script.
|
|
The order of the operations is important. Follow this document carefully.
|
|
|
|
4. Optional processing
|
|
You can preview the captured DV/AVI files with a media player. Currently,
|
|
Xine seems to be the only one supporting OpenDML.
|
|
If you don't want a scene, you can simply delete the corresponding file.
|
|
If you wanna make changes inside a scene, you must use a video editor that
|
|
understands DV and OpenDML; Kino seems to be working fine.
|
|
|
|
5. Transcoding to DVD
|
|
You need a recent transcode version, such as 0.6.11. You need a new
|
|
mjpegtools version as well, at least 1.6.1.92 (plain 1.6.1 won't work), or
|
|
1.6.2 when it will get released. You also need a fairly recent dvdauthor
|
|
version, such as 0.6.8.
|
|
The script that does the job is "conv-dvd". It is designed to work with a
|
|
capture project directory created by the "grab" script.
|
|
Let's discuss the script:
|
|
|
|
The $flags variable contains the parameters passed to mpeg2enc. You have to
|
|
choose one version and uncomment it; the first two are for high-quality
|
|
encoding, the last two are for efficient file size. Explanation of the
|
|
parameters:
|
|
|
|
-c means "all GOPs are closed"; this generates an MPEG2 stream that's more
|
|
compatible with various apps and players
|
|
|
|
-q sets the quantization factor; 6 is a reasonable value for DV material
|
|
converted to DVD; decrease it for higher quality, but be aware that you might
|
|
create video tracks that are not accepted by the multiplexer; increase it for
|
|
smaller file sizes at the expense of image quality
|
|
|
|
-4 2 -2 1 controls the motion estimation; an even better (quality-wise) value
|
|
would be "-4 1" but the quality increase is almost imperceptible while the
|
|
encoding speed decreases a lot; just leave it like it is
|
|
|
|
-K defines the encoder matrix; this script uses a matrix devised by Steven
|
|
Schultz to maximize the image quality, or the tmpgenc matrix for a more
|
|
efficient compression (at the expense of image quality)
|
|
|
|
-N is a very gentle low-pass filter that reduces the bitrate usage
|
|
tremenduosly while not affecting the image too much
|
|
|
|
-E tells the encoder to simply discard bits that are hard to encode yet do
|
|
not contribute to the image too much
|
|
|
|
-R controls the B frames; encoding with 0 B frames is unusual and some truly
|
|
broken players may get upset, although it is perfectly legal from the DVD
|
|
standard p.o.v.; encoding with 2 B frames is normal for proffesional DVDs but
|
|
it slows down encoding a lot (by 60%) and it makes the compression slightly
|
|
less efficient for amateur DV stuff (material that's less than _perfect_).
|
|
If you're like me and don't care about encoding speed (i let the script run
|
|
overnight), then encode with 2 B-frames; if you're in a rush or want to
|
|
obtain better compression (your space on the DVD is limited) then encode with
|
|
0 B-frames, but be aware of the broken players.
|
|
|
|
The $asr variable controls the aspect ratio. Uncomment the appropriate value,
|
|
depending on how your camcorder was configured. 4:3 is normal TV screen, 16:9
|
|
is HDTV. You cannot use one of them if your camcorder was configured with the
|
|
other.
|
|
|
|
The $bitr variable controls the MPEG2 bitrate used for the DVD.
|
|
WARNING: Do not increase it above 8500 regardless of what you've been told. I
|
|
know that proffesional DVDs are encoded at a peak value of 9800 kbps, i know
|
|
that various pieces of documentation recommend 9800 as One Value To Rule Them
|
|
All. Just ignore them. Trust me. If you do otherwise, sooner or later you'll
|
|
create a DVD that will not be playable on some standalone players. I learned
|
|
that the hard way. You have been warned.
|
|
Moreover, you don't truly need very high values. I did many evaluations, and
|
|
the results are pretty surprising: many scenes that i shot do not take the
|
|
peak bitrate above 7000 kbps, and the average is at 2000 or something! Only
|
|
very rarely you'll need such high bitrates.
|
|
|
|
Down below in the script you'll find the transcode command. Let's discuss
|
|
some command-line parameters:
|
|
|
|
-x ffmpeg tells transcode to use ffmpeg as the DV decoder instead of the
|
|
default Quasar codec. This way you'll obtain a compression better by 10% or
|
|
so.
|
|
|
|
--encode_fields b tells transcode that the DV material is "bottom field
|
|
first". For some reason, that's true for any DV camcorder in the world.
|
|
|
|
Commented out in the script you'll find some parameters for generating AC3
|
|
sound for your DVD instead of MP2. While AC3 is more popular, for some reason
|
|
there are audio/video sync issues if you use it. I'm still investigating the
|
|
bug, meanwhile MP2 should be perfectly fine, you can use it with no problems.
|
|
|
|
After transcoding, the script will multiplex the audio and video files using
|
|
mplex. The results are a bunch of VOB files. You can test each one of them
|
|
individually with a media player, since they're essentially MPEG2 files on
|
|
steroids.
|
|
|
|
After multiplexing everything, the VOBs are transformed in a DVD image on the
|
|
hard-drive with the help of dvdauthor.
|
|
The DVD is created so that each scene on the DV tape is translated into a
|
|
chapter on the DVD. I believe this makes a lot of sense and allows for a
|
|
simple way to jump to various scenes while playing the DVD.
|
|
This whole chapter affair is accomplished through the XML file that's built
|
|
while transcoding, which instructs dvdauthor to set chapter marks at the
|
|
beginning of each scene.
|
|
Of course, you can change all that, see dvdauthor documentation.
|
|
|
|
At the end, there are a few chown/chmod commands, to normalize file ownership
|
|
and permissions. I am not sure if this is really required, i just put them
|
|
there just in case. Remove them if they annoy you.
|
|
|
|
6. Test the DVD image
|
|
You can test the newly created DVD image with xine like this:
|
|
|
|
xine dvd:///full/path/to/the/dvd/image/
|
|
|
|
The trailing slash is important. xine will play the image just like it were a
|
|
true DVD, with chapters and all.
|
|
|
|
7. Burn the DVD
|
|
You need a fairly new version of dvd+rw-tools.
|
|
|
|
growisofs -speed=4 -Z /dev/scd0 -V "$label" -dvd-video $dvd-image
|
|
|
|
$label is the ISO label you desire. Usually, labels are all caps and do not
|
|
contain spaces. Example: MY_COOL_MOVIE
|
|
|
|
$dvd-image is the directory containing the DVD image.
|
|
|
|
Of course, you can change the speed and the DVD-Writer device to suit your
|
|
existing hardware.
|
|
|
|
+--------------------------+
|
|
| Appendix A - conf-dvd.sh |
|
|
+--------------------------+
|
|
|
|
----------------snip----------------
|
|
#!/bin/sh
|
|
|
|
if [ $# -ne "1" ]; then
|
|
echo "Usage: $0 dirname"
|
|
exit
|
|
fi
|
|
|
|
name=$1
|
|
pushd $name
|
|
|
|
# high quality, 80 min / DVD
|
|
# fast encoding, slightly unusual MPEG2 (no B frames)
|
|
flags="-c -q 6 -4 2 -2 1 -K file=matrix.txt -R 0"
|
|
# slower encoding, classic MPEG2
|
|
#flags="-c -q 6 -4 2 -2 1 -K file=matrix.txt -R 2"
|
|
#
|
|
# ok quality, 120 min / DVD
|
|
# fast encoding, slightly unusual MPEG2 (no B frames)
|
|
#flags="-c -q 6 -4 2 -2 1 -N 0.5 -E -10 -K tmpgenc -R 0"
|
|
# slower encoding, classic MPEG2
|
|
#flags="-c -q 6 -4 2 -2 1 -N 0.5 -E -10 -K tmpgenc -R 2"
|
|
|
|
# Aspect ratio of the original DV tape
|
|
# 4:3
|
|
asr="--export_asr 2"
|
|
# 16:9
|
|
#asr="--export_asr 3"
|
|
|
|
bitr="8500"
|
|
xmlf="dvdauthor.xml"
|
|
|
|
# Steven Schultz's combined HQ matrix
|
|
cat - > matrix.txt << MATRIX
|
|
# High resolution INTRA table
|
|
8,16,18,20,24,25,26,30
|
|
16,16,20,23,25,26,30,30
|
|
18,20,22,24,26,28,29,31
|
|
20,21,23,24,26,28,31,31
|
|
21,23,24,25,28,30,30,33
|
|
23,24,25,28,30,30,33,36
|
|
24,25,26,29,29,31,34,38
|
|
25,26,28,29,31,34,38,42
|
|
# TMPEGEnc NON-INTRA table
|
|
16,17,18,19,20,21,22,23
|
|
17,18,19,20,21,22,23,24
|
|
18,19,20,21,22,23,24,25
|
|
19,20,21,22,23,24,26,27
|
|
20,21,22,23,25,26,27,28
|
|
21,22,23,24,26,27,28,30
|
|
22,23,24,26,27,28,30,31
|
|
23,24,25,27,28,30,31,33
|
|
MATRIX
|
|
|
|
rm -f $xmlf
|
|
# dvdauthor XML config head
|
|
cat - >> $xmlf << XMLHEAD
|
|
<dvdauthor>
|
|
<vmgm />
|
|
<titleset>
|
|
<titles>
|
|
<pgc>
|
|
XMLHEAD
|
|
|
|
for inp in `ls dv`; do
|
|
out=`basename $inp .avi`
|
|
transcode -i dv/$inp -x ffmpeg \
|
|
-V -w $bitr \
|
|
--encode_fields b \
|
|
${asr} \
|
|
-F 8,"${flags}" \
|
|
-y mpeg2enc,mp2enc -b 224 -m $out \
|
|
-o $out \
|
|
--print_status 10
|
|
##################################################
|
|
# stuff to copy/paste in the transcode parameters
|
|
##################################################
|
|
# use this if DV sound is not sampled at 48kHz
|
|
# (it almost ALWAYS is 48kHz!)
|
|
# -E 48000,16,2 -J resample \
|
|
#
|
|
# AC3 sound
|
|
# (has A/V sync bugs, don't use it yet, still investigating...)
|
|
# -y mpeg2enc,raw -N 0x2000 -b 192 -m $out.ac3 \
|
|
#
|
|
# MP2 sound
|
|
# -y mpeg2enc,mp2enc -b 224 -m $out \
|
|
##################################################
|
|
|
|
# use this with MP2
|
|
mplex -r 10000 -f 8 -S 4400 $out.m2v $out.mpa -o $out.vob
|
|
# use this with AC3
|
|
#mplex -r 10000 -f 8 -S 4400 $out.m2v $out.ac3 -o $out.vob
|
|
echo "<vob file=\"$out.vob\" />" >> $xmlf
|
|
done
|
|
|
|
# dvdauthor XML config tail
|
|
cat - >> $xmlf << XMLTAIL
|
|
</pgc>
|
|
</titles>
|
|
</titleset>
|
|
</dvdauthor>
|
|
XMLTAIL
|
|
|
|
dvdauthor -o $name -x $xmlf
|
|
|
|
# the next commands require the following line in visudo:
|
|
# yourusername ALL = NOPASSWD: ALL
|
|
sudo chown -R root:root $name
|
|
sudo chmod -R 0755 $name
|
|
sudo chmod 0644 $name/*_TS/*
|
|
sync
|
|
popd
|
|
----------------snip----------------
|
|
|
|
|
|
+----------------------+
|
|
| Appendix B - grab.sh |
|
|
+----------------------+
|
|
|
|
----------------snip----------------
|
|
#!/bin/sh
|
|
|
|
if [ ! $1 ]; then
|
|
echo "Usage: $0 dirname"
|
|
exit
|
|
fi
|
|
name=$1
|
|
|
|
mkdir -v ${name} || exit
|
|
pushd ${name}
|
|
mkdir -v dv || exit
|
|
pushd dv
|
|
|
|
dvgrab --autosplit --size 0 --format dv2 --opendml \
|
|
--noavc --buffers 200 ${name}-
|
|
popd
|
|
popd
|
|
----------------snip----------------
|