From: Alan J. Pippin <alan@pippins.net>
Date: Sat, 19 Nov 2011 00:07:01 +0000 (-0700)
Subject: Major overhaul of destination video merging.
X-Git-Url: http://git.pippins.net/%27%20%20%20%20.%20%24GLOBALS%5B%27phpgw%27%5D-%3Elink%28%27inc/jquery/jquery.tablesorter.css%27%29.%27?a=commitdiff_plain;h=e47e6977db0498c8b59328a1a122e6c11b571a73;p=videoscripts%2F.git

Major overhaul of destination video merging.
- You can't combine videos of different types into the same mkv.
  Changes were made to keep videos of different types merged into separate mkv files.
---

diff --git a/merge_videos_by_day b/merge_videos_by_day
index cd98040..b285f1a 100755
--- a/merge_videos_by_day
+++ b/merge_videos_by_day
@@ -83,9 +83,11 @@ foreach $file (sort `$find_cmd`) {
     $srcdir = dirname($file);
     $file = basename($file);
     $srcfile = $file;
+    $srcext = "";
+    if($srcfile =~ /\.(\w+)$/) { $srcext = $1; }
     $ext = "mkv";
     
-    print "Found movie: srcdir: $srcdir srcfile: $srcfile ext: $ext\n" if($opt_v);
+    print "Found movie: srcdir: $srcdir srcfile: $srcfile srcext: $srcext dstext: $ext\n" if($opt_v);
 
     # Throw out files not in the current srcpath
     if((! -f "$srcfile") && (! -f "$srcdir/$srcfile")) { next; }
@@ -126,64 +128,103 @@ foreach $file (sort `$find_cmd`) {
 	}
 	$dstfile = $newfile;
     }
+
+    # Set the name of our unique destination file
     $dstfile = "$newfile.$ext";
 
-    push(@{$videos{"$dstfile"}}, "\"$srcdir/$srcfile\"");
+    # You can only merge videos into a single destination that have the same extension/type
+    push(@{$videos{"$srcext"}{"$dstfile"}}, "\"$srcdir/$srcfile\"");
 }
 
-# Tell the user which videos we are going to merge
-foreach $video (sort keys %videos) {
-    # Only merge the videos if there is more than 1
-    my $num_videos = $#{$videos{$video}} + 1;
-    if($num_videos <= 1) { next; }
+# Only merge the videos if there is more than 1 video to merge on a given day for a given ext
+foreach $ext (sort keys %videos) {
+    foreach $video (sort keys %{$videos{$ext}}) {
+	my $num_videos = $#{$videos{$ext}{$video}} + 1;
+	if($num_videos <= 1) {
+	    delete $videos{$ext}{$video};
+	    next;
+	}
+    }
+}
+    
+# Check for duplicate filenames in the dstfiles being created for other exts
+foreach $ext (sort keys %videos) {
+    foreach $video (sort keys %{$videos{$ext}}) {
+	# Make sure this video name is not in use as a destination for any other ext
+	foreach $checkext (sort keys %videos) {
+	    if($checkext eq $ext) { next; }
+	    foreach $checkvideo (sort keys %{$videos{$checkext}}) {
+	     	if("$video" eq "$checkvideo") {
+		    if($video =~ /(.*?)\.(\d+)\.(\w+)$/) {
+			$dstfile = $1;
+			$dstnum = $2;
+			$dstext = $3;
+		    }
+		    foreach $i ($dstnum .. '999') {
+			$newfile = $dstfile . "." . sprintf("%03d",$i);
+			if("$video" ne "$newfile.$dstext") { last; }
+		    }
+		    $videos{$ext}{"$newfile.$dstext"} = $videos{$ext}{$video};
+		    delete $videos{$ext}{$video};
+		}
+	    }
+	}
+    }
+}
 
-    foreach $srcfile (@{$videos{$video}}) { 
-	print "   merging \"$srcfile\" into \"$video\"\n";
+# Tell the user which videos we are going to merge
+foreach $ext (sort keys %videos) {
+    foreach $video (sort keys %{$videos{$ext}}) {
+	foreach $srcfile (@{$videos{$ext}{$video}}) { 
+	    print "   merging \"$srcfile\" into \"$video\"\n";
+	}
     }
 }
-print "\n";
 
 # Now actually do the merging
-foreach $video (sort keys %videos) {
-
-    my $videos = join(',', @{$videos{$video}});
-
-    # Only merge the videos if there is more than 1
-    my $num_videos = $#{$videos{$video}} + 1;
-    if($num_videos <= 1) { next; }
-    
-    if($video =~ /(\d+)-(\d+)-(\d+)/) {
-	$year = $1;
-	$month = $2;
-	$day = sprintf("%02d",$3);
-    }
-    
-    my $pwd = `pwd`; chomp($pwd);
-    my $cmd = "";
-    if($use_compute_host) { $cmd .= "ssh $compute_host 'cd \"$pwd\";"; }
-    $cmd .= "$make_mkv -t \"$video_title_prefix $year-$month-$day\" -o \"$video\" -i $videos";
-    if($use_compute_host) { $cmd .= "'"; }
-    if(defined $opt_t) {
-	print "\n-> Creating \"$video\"\n";
-	print "$cmd\n";
-	if(defined $opt_r) { 
-	    foreach $video (@{$videos{$video}}) {
-		print("rm -f $video\n");
-	    }
+print "\n";
+foreach $ext (sort keys %videos) {
+    foreach $video (sort keys %{$videos{$ext}}) {
+
+	my $videos = join(',', @{$videos{$ext}{$video}});
+	
+	# Only merge the videos if there is more than 1
+	#my $num_videos = $#{$videos{$ext}{$video}} + 1;
+	#if($num_videos <= 1) { next; }
+	
+	if($video =~ /(\d+)-(\d+)-(\d+)/) {
+	    $year = $1;
+	    $month = $2;
+	    $day = sprintf("%02d",$3);
 	}
-    } else {
-	# Create the merged video
-	my $errno = system("$cmd");
-	$errno = $errno >> 8;
-	if($errno) { die "-E- make_mkv encountered some errors with exit code $errno\n"; }
-	# Fix the permissions
-	system("chown $owner \"$video\"");
-	system("chgrp $group \"$video\"");
-	system("chmod $mode \"$video\"");
-	# Remove the individual video files
-	if(defined $opt_r) { 
-	    foreach $video (@{$videos{$video}}) {
-		system("rm -f $video");
+	
+	my $pwd = `pwd`; chomp($pwd);
+	my $cmd = "";
+	if($use_compute_host) { $cmd .= "ssh $compute_host 'cd \"$pwd\";"; }
+	$cmd .= "$make_mkv -t \"$video_title_prefix $year-$month-$day\" -o \"$video\" -i $videos";
+	if($use_compute_host) { $cmd .= "'"; }
+	if(defined $opt_t) {
+	    print "\n-> Creating \"$video\"\n";
+	    print "$cmd\n";
+	    if(defined $opt_r) { 
+		foreach $video (@{$videos{$ext}{$video}}) {
+		    print("rm -f $video\n");
+		}
+	    }
+	} else {
+	    # Create the merged video
+	    my $errno = system("$cmd");
+	    $errno = $errno >> 8;
+	    if($errno) { die "-E- make_mkv encountered some errors with exit code $errno\n"; }
+	    # Fix the permissions
+	    system("chown $owner \"$video\"");
+	    system("chgrp $group \"$video\"");
+	    system("chmod $mode \"$video\"");
+	    # Remove the individual video files
+	    if(defined $opt_r) { 
+		foreach $video (@{$videos{$ext}{$video}}) {
+		    system("rm -f $video");
+		}
 	    }
 	}
     }