archiving mini dv
This details how I'm pulling all video off of my mini dv tapes for easy access on my computers or PS3.
- rip footage to iMovie
- re-encode .dv files with MPEG Streamclip
- rename files according to my archive scheme
- I then use MediaTomb to automatically read certain directories and make these videos available for my PS3 to stream
iMovie
- Open a new iMovie project, in either DV or DV Widescreen format (depending on how you recorded the video onto your tape)
- Allow iMovie to import the entire tape into clips
- Save the project and close iMovie
MPEG Streamclip
- create a preset with the following:
- MPEG-4 container
- H.264 video encoding
- AAC audio encoding, stereo, 128 kbps
- 60% Quality
- Multipass
- Limit Data Rate to 1000 Kbps
- Deinterlace Video
- 640 x 480 (4:3) frame size (or 854 x 480, 16:9 for widescreen)
- if encoding many files
- go to List → Batch List
- click the Add Files… button
- select “All Files” from the filter at the bottom
- go to where your iMovie project is and expand to the Media folder (or open any folder with the files you want to encode if you didn't use iMovie)
- select all files and click “To Batch”
- select Export to MPEG-4 as the task and click OK
- click Presets…
- select your preset and click Load
- click To Batch
- click start to begin encoding all files in the batch
- if encoding one file
- open a single file
- go to File → Export to MPEG-4…
- click Presets…
- select your preset and click Load
- click Make MP4
rename files
All of my dv tapes are numbered, such as 001, 013, 021, etc… I put the encoded files into a folder of the same name. I then wrote a php script that would take the iMovie named files such as Clip 01.dv (which after encoding is probably Clip 01.mp4), and name them as 001_01.mp4.
rename_home_movies.php
<?php /* usage: php rename_home_movies.php <dirname> * * all files in <dirname> will be renamed if they begin with "Clip " to * "dirname_" + file suffix */ if( !isset($argc) || $argc < 2 ) exit(basename(__FILE__) . " <dir>\n"); if( !is_dir($argv[1]) || !is_readable($argv[1]) ) exit("$argv[1] is not a readable directory\n"); $dirpath = $argv[1]; chdir($dirpath); $dh = opendir($dirpath); $dirname = str_replace(realpath("../") . "/", "", realpath(".")); $noFilesRenamed = true; while( $file = readdir($dh) ){ if( preg_match("/^Clip (.*)$/", $file, $matches) == 0 ) continue; $newName = "{$dirname}_{$matches[1]}"; $result = rename($file, $newName); // $result = true; // use this line to test if( !$result ){ echo "FAILED to rename $file\n"; }else{ echo "renamed $file to $newName\n"; $noFilesRenamed = false; } } closedir($dh); if( $noFilesRenamed ) echo "no files were found to rename\n";