Skip to main content
Background Image

Restoring / Archiving old mini-DV tapes

·627 words·3 mins
Mike Wyer
Author
Mike Wyer

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 includes dvpackager (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.


comments powered by Disqus