Added code to better detect video codecs
[videoscripts/.git] / merge_videos_by_day
index ec00da97e7fe64f3ea8fe1a20240b5689a397ce8..146ac84bad6b8c38187ad78fc1a0ca96cdabc24f 100755 (executable)
@@ -41,6 +41,7 @@ $SIG{'INT'} = sub {die "-E- Killed by CTRL-C\n"};
 if((defined $opt_q || defined $opt_z) && !$use_compute_host && ! -x "$handbrake") { die "-E- Unable to find required program: handbrake\n"; }
 if(! -d $srcpathname) { &usage; print "-E- Can't find srcpath: $srcpathname\n"; exit 1; }
 if(defined $opt_h) { $compute_host = $opt_h; }
+if(! -x $ffmpeg) { die "-E- Missing required executable for ffmpeg: $ffmpeg\n"; }
 
 my %monthname2month = (
                       "Jan" => "01",
@@ -91,10 +92,10 @@ foreach $file (sort `$find_cmd`) {
     if((! -f "$srcfile") && (! -f "$srcdir/$srcfile")) { next; }
 
     # Throw out encoded files left over from a previous run
-    print "srcfile: $srcfile\n";
+    #print "srcfile: $srcfile\n" if($opt_v);
     if($srcfile =~ /.hb.mp4/) { next; }
 
-    print "Found movie: srcdir: $srcdir srcfile: $srcfile srcext: $srcext dstext: $ext\n" if($opt_v);
+    print "Found video: srcdir: $srcdir srcfile: $srcfile srcext: $srcext dstext: $ext\n" if($opt_v);
             
     # 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);
@@ -155,7 +156,7 @@ foreach $dstfile (sort keys %videos) {
 
     my $videos = join(',', @{$videos{$dstfile}});
     
-    if($dstfile =~ /(\d+)-(\d+)-(\d+)/) {
+    if($dstfile =~ /(\d+)-(\d+)-(\d+)$/) {
        $year = $1;
        $month = $2;
        $day = sprintf("%02d",$3);
@@ -175,7 +176,9 @@ foreach $dstfile (sort keys %videos) {
        print "$cmd\n";
        if(!defined $opt_k) { 
            foreach $video (@{$videos{$dstfile}}) {
-               if(($save_originals) && ($video =~ /\.$originals_file_ext/)) {
+               if($opt_v) { print "   $ffmpeg -i $video 2>&1 | grep \"compatible_brands\" | tail -n 1\n"; }
+               my $brands=`$ffmpeg -i $video 2>&1 | grep "compatible_brands" | tail -n 1`; chomp($brands);
+               if(($save_originals) && ($video =~ /\.$originals_file_ext/) && (!$brands || $brands !~ /$originals_no_copy_brands/)) {
                    print "-> Saving the original video $video\n";
                    if(index($video, basename(dirname($video))) == -1) { 
                        print("mv $video \"$origpathname/".basename(dirname($video))."_".basename($video)."\n");
@@ -190,7 +193,7 @@ foreach $dstfile (sort keys %videos) {
        }
     } else {
        # Create the merged video
-       print "$cmd" if($opt_v);
+       print "$cmd\n" if($opt_v);
        my $errno = system("$cmd");
        $errno = $errno >> 8;
        if($errno) { die "-E- make_mkv encountered some errors with exit code $errno\n"; }
@@ -199,12 +202,14 @@ foreach $dstfile (sort keys %videos) {
        # Fix the permissions
        system("chown $owner \"$dstfile\"*");
        system("chgrp $group \"$dstfile\"*");
-       system("chmod $mode \"$dstfile\"*");
+       system("find \"$dstfile\"* -type f -exec chmod $mode -- {} +");
 
        # Remove the individual video files
        if(!defined $opt_k) { 
            foreach $srcvideo (@{$videos{$dstfile}}) {
-               if(($save_originals) && ($srcvideo =~ /\.$originals_file_ext/)) {
+               if($opt_v) { print "   $ffmpeg -i $srcvideo 2>&1 | grep \"compatible_brands\" | tail -n 1\n"; }
+               my $brands=`$ffmpeg -i $srcvideo 2>&1 | grep "compatible_brands" | tail -n 1`; chomp($brands);
+               if(($save_originals) && ($srcvideo =~ /\.$originals_file_ext/) && (!$brands || $brands !~ /$originals_no_copy_brands/)) {               
                    print "-> Saving the original video $srcvideo to $origpathname\n";
                    if(index($srcvideo, basename(dirname($srcvideo))) == -1) { 
                        system("mv $srcvideo \"$origpathname/".basename(dirname($srcvideo))."_".basename($srcvideo));