X-Git-Url: http://git.pippins.net/embedvideo/.git/static/gitweb.js?a=blobdiff_plain;f=organize_videos;fp=organize_videos;h=c606da3fb266a971f5fa0aedd51d0794ccc0b2a5;hb=be9a9d1914a8f80b031631f902c9daae0b8f6d90;hp=0000000000000000000000000000000000000000;hpb=6ab397855fde341417761a2e91667c85cbfc41ef;p=videoscripts%2F.git diff --git a/organize_videos b/organize_videos new file mode 100755 index 0000000..c606da3 --- /dev/null +++ b/organize_videos @@ -0,0 +1,188 @@ +#!/usr/bin/perl + +use File::Copy; +use File::Basename; +use Getopt::Std; +use File::stat; +use Time::localtime; + +# Configuration parameters +my $srcpathname = "/naspool/pictures/New Photos"; # Path to look for photos to move from +my $dstpathname = "/naspool/videos/HomeVideos"; # Path to move the photos to +my $merge_videos_by_day = "/naspool/videos/bin/merge_videos_by_day"; +my $minage = "+10"; # Files must be older than X minutes to move +my $owner = "ajp"; # The owner of the files after they are moved +my $group = "pip"; # The group of the files after they are moved +my $mode = "664"; # The mode to set on each file after they are moved +my $find_cmd = "find \"$srcpathname/\" -cmin $minage -a \\( -iregex \".*\.mov\" -o -iregex \".*\.3gp\" -o -iregex \".*\.mp4\" -o -iregex \".*\.mts\" -o -iregex \".*\.mkv\" \\)"; + +# Sanity check +if(! -d $srcpathname) { print "-E- Can't find srcpath: $srcpathname\n"; exit 1; } +if(! -d $dstpathname) { print "-E- Can't find dstpath: $dstpathname\n"; exit 1; } +if(! -x $merge_videos_by_day) { print "-E- Can't find required script: $merge_videos_by_day\n"; exit 1; } + +my %monthname2month = ( + "Jan" => "01", + "Feb" => "02", + "Mar" => "03", + "Apr" => "04", + "May" => "05", + "Jun" => "06", + "Jul" => "07", + "Aug" => "08", + "Sep" => "09", + "Oct" => "10", + "Nov" => "11", + "Dec" => "12" + ); + +my %month2monthname = ( + "01" => "Jan", + "02" => "Feb", + "03" => "Mar", + "04" => "Apr", + "05" => "May", + "06" => "Jun", + "07" => "Jul", + "08" => "Aug", + "09" => "Sep", + "10" => "Oct", + "11" => "Nov", + "12" => "Dec" + ); + +getopts("htv"); + +sub usage { + print "usage: $0 [-v] [-t]\n"; + print " -v = verbose; print file being moved (to)\n"; + print " -t = test; print what will happen, but don't do anything\n"; + return 1; +} + +sub is_folder_empty { + my $dirname = shift; + opendir(my $dh, $dirname) or die "Not a directory"; + return scalar(grep { $_ ne "." && $_ ne ".." } readdir($dh)) == 0; +} + +if(defined $opt_h) { usage(); exit 1; } + +# Only proceed if there are video files to organize +$video_files_found=`$find_cmd`; +if(!$video_files_found) { exit 0; } + +# Only one instance of this script running at a time +use File::Pid; +my $pidfile = File::Pid->new({file => "/tmp/organize_videos.pid"}); +exit if $pidfile->running(); +$pidfile->write(); + +# Print the date +system("date"); + +# Merge videos prior to copying them over to the destination path +my $errno = 0; +if(defined $opt_t) { + $errno=system("$merge_videos_by_day -s \"$srcpathname\" -t"); +} else { + $errno=system("$merge_videos_by_day -s \"$srcpathname\""); +} +if($errno > 0) { $errno = $errno - 255; } +if($errno) { die "-E- $merge_videos_by_day encountered some errors with exit code $errno\n"; } + +# Copy the videos over to the destination path +chdir "$srcpathname"; +print "$find_cmd\n" if($opt_v); +foreach $file (`$find_cmd`) { + + chomp($file); + $srcdir = dirname($file); + $file = basename($file); + $srcfile = $file; + $ext = $file; $ext =~ s/.*\.(\S+)$/$1/; $ext = lc($ext); + + print "Found movie: srcdir: $srcdir srcfile: $srcfile ext: $ext\n" if($opt_v); + + # Throw out files not in the current srcpath + if((! -f "$srcfile") && (! -f "$srcdir/$srcfile")) { next; } + + # Change all spaces to underscores in the filename + #$srcfile =~ s/ /_/g; + + # Make a note of the month, year, and day this video was taken (from the modification time of the file) + $date_taken = ctime(stat("$srcdir/$srcfile")->mtime); + + # Get the date taken from the filename + if($srcfile =~ /^(\d+)-(\d+)-(\d+)/) { + $year = $1; + $month = $2; + $day = sprintf("%02d",$3); + $monthnum = $month; + $monthname = lc($month2monthname{$month}); + } + # Get the date taken from the modification time + elsif($date_taken =~ /\S+\s+(\S+)\s+(\d+)\s+\S+\s+(\d+)/) { + $year = $3; + $month = $1; + $day = sprintf("%02d",$2); + $monthnum = $monthname2month{$month}; + $monthname = lc($month2monthname{$month}); + } else { + print "-E- Unable to parse year and month from this file: $srcdir/$srcfile\n"; + next; + } + + # We are ready to pick a destination folder to put the picture in + $dstdir = $dstpathname . "/" . $year; + $dstfile = $dstdir . "/" . $year . "-" . $monthnum . "-" . $day; + + # Check for duplicate filenames at the destination + $newfile = $dstfile . "." . "000"; + if(-e "$newfile.$ext") { + foreach $i ('001' .. '999') { + $newfile = $dstfile . "." . $i; + if(! -e "$newfile.$ext") { last; } + } + $dstfile = $newfile; + } + $dstfile = "$newfile.$ext"; + + if(defined $opt_t) { + print "-> Moving \"$srcdir/$srcfile\" to \"$dstfile\"\n"; + } else { + # Make sure the destination directories exist + $errno=system("mkdir -p \"$dstdir\""); + if($errno) { print "-E- Error creating dstdir: $dstdir\n"; next; } + # Perform the move operation from $srcdir/$srcfile -> $dstfile + if($opt_v) { print "-> Moving \"$srcdir/$srcfile\" to \"$dstfile\"\n"; } + # Make sure the dstfile doesn't exist, if it does, don't do the move + if(! -f "$dstfile") { + $errno=system("mv \"$srcdir/$srcfile\" \"$dstfile\" 2>/dev/null"); + if($errno) { print "-E- Error moving srcfile to dstfile: $srcdir/$srcfile -> $dstfile\n"; next; } + } else { + if($opt_v) { print "-> Skipping \"$srcdir/$srcfile\". Destfile \"$dstfile\" already exists.\n"; } + } + # Fix the permissions + system("chown $owner \"$dstfile\""); + system("chgrp $group \"$dstfile\""); + system("chmod $mode \"$dstfile\""); + } + + # Check to see if there is an empty sub directory to remove + if(($srcdir ne $srcpathname) && ($srcpathname ne ".")) { + if(is_folder_empty($srcdir)) { + print "-> Subdir detected for videos ($srcdir != $srcpathname)\n" if($opt_v); + if(! defined $opt_t) { + $tmpdir=`tempfile`; + system("rm $tmpdir"); + system("mv \"$srcdir\" $tmpdir > /dev/null 2>/dev/null"); + print "-> Moved empty subdir $srcdir to $tmpdir\n" if($opt_v); + } + } + } +} + +$pidfile->remove(); + +print "\n\n";