I have a box of 50 mini-DV tapes that I recorded on my Panasonic NV-GS50 camcorder back in the noughties- shows I was in, shows friends were in, weddings, etc. I made some of them into DVDs at the time, but don’t have the original footage. Back then 13-20GB per tape was a lot of storage, and I only really had space for the final 4.3GB DVD image. It’s still a lot for an hour of 576i footage.
The box of tapes has been sitting on various shelves, tables, floors, and random horizontal surfaces for the past 15 years or so. I have been meaning to re-rip the tapes for archiving before they disintegrate, and I’ve finally found some time to do it.
I started by following Leo’s guide from 2021.
Four years later, some things still work and some don’t.
Good news- the Apple USB-c -> Thunderbolt (MDP) and Thunderbolt (MDP) -> FW800 adapters still work.
Bad news- it looks like I ditched my old MDP->FW800 adapter when I got rid of my old Saffire Pro 24 DSP interface. Ebay to the rescue.
Next is the software toolchain-
- DVRescue including the DVRescue GUI app and
dvrescue
cli. - The
dvrescue
homebrew formula includesdvpackager
(for splitting videos).
Leo’s blog suggests using ffmpeg-dl
to capture video from the DV cam, but it doesn’t include
deck controls so you have to press Play on the camera manually. That happens to be awkward on my
camcorder, though it’s probably more convenient on stand-alone DV decks.
Instead, I found myself using the dvrescue
CLI:
dvrescue device://0xHEX_DEVICE_ID -y --rewind-count 3 -m capture.dv
The DVRescue GUI is also pretty useful and functional too, and includes working transport
controls. After a bit of digging into the source code of
vecord (a BASH script with a GUI,
shudder), I found the commandline version of the transport controls, eg: dvrescue --cmd rew
That gives us the “repack” operation: dvrescue --cmd ff --foreground;dvrescue --cmd rew
to
fast forward to the end of the tape and then rewind to the beginning before capturing the
contents. Having worked this out, it would probably be possible to trigger a play
command for
the ffmpeg-dl
command, but dvrescue
has the nice feature of retrying errors. So I’ll stick
with dvrescue
for now.
The next part, using dvpackager
to split and package the DV file into clips, uses mov
in the
blog post, but the MOV files written by the current version of ffmpeg-dl are not valid (and
dvpackager would need the -F
option to use ffmpeg-dl instead of plain ffmpeg). MKV with the
stock ffmpeg works ok:
dvpackager -e mkv -s capture.dv
Then compressing to a HEVC version (~20x smaller than raw DV):
for f in *.mkv
do
DATE=$(mediainfo --Output="General;%Recorded_Date%" "$f" | cut -c1-19)
SAFE_DATE=$(echo "$DATE" | sed -e 's/://g' -e 's/ /_/g')
OUTPUT="$SAFE_DATE"_"${f%.*}.mp4"
echo "Converting $f..."
ffmpeg -i "$f" -vf "yadif=mode=send_field:parity=bff" -preset medium \
-vcodec hevc -tag:v hvc1 -crf 22 -pix_fmt yuv420p -movflags +faststart \
-c:a aac -b:a 256k -write_tmcd 0 -metadata creation_time="$DATE" \
-hide_banner "$OUTPUT"
done
This depends on the -preset
functionality of (I believe) libx264 which is not included in
ffmpeg-dl, so I used stock ffmpeg
for this part. Since it isn’t controlling a DV deck, that
doesn’t really matter.
Now we have a relatively low-interaction method for importing and converting video:
- Load the tape (manual)
- Repack it
- Run dvrescue to capture the whole tape (with retries for errors).
- Split into clips.
- Convert all clips into HEVC MP4 files with the timestamp in the filename.
- Move the converted files to their archive location (by date).
On a final note: a big shout-out to MIPoPS for their open tooling and commitment to inclusion, diversity, equity, and accessibility (aka IDEA or DEI for reductive types).
I’ve donated to support them.