- # Check for duplicate filenames at the destination
- $newfile = $dstfile . "." . $video_suffix;
- if(-e "$newfile.$ext") {
- foreach $i ($video_suffix+1 .. '999') {
- $newfile = $dstfile . "." . sprintf("%03d",$i);
- if(! -e "$newfile.$ext") { last; }
- }
- $dstfile = $newfile;
- }
-
- # Set the name of our unique destination file
- $dstfile = "$newfile.$ext";
-
- # You can only merge videos into a single destination that have the same extension/type
- push(@{$videos{"$srcext"}{"$dstfile"}}, "\"$srcdir/$srcfile\"");
-}
-
-# For single videos, with the re-quantize option given, rename the destination file to mp4
-foreach $ext (sort keys %videos) {
- foreach $video (sort keys %{$videos{$ext}}) {
- # Get a count of the number of videos for this date
- # If we only have a single video, its extension will actually be mp4 if opt_q is specified
- my $num_videos = $#{$videos{$ext}{$video}} + 1;
- if((defined $opt_q) && ($num_videos <= 1)) {
- if($video =~ /(.*?)\.(\d+)\.(\w+)$/) {
- $dstfile = $1;
- $dstnum = $2;
- $new_dstvideo = "$1.$2.mp4";
- $videos{$ext}{$new_dstvideo} = $videos{$ext}{$video}; # make a new dst video entry with the src video being the same
- delete $videos{$ext}{$video}; # delete the old destination video from the hash
- }
- }
- }
-}
-
-# 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};
- }
- }
- }
- }
-}
-
-# Only merge the videos if there is more than 1 video to merge on a given day for a given ext
-# If there is only 1 video for a given day for a given ext, re-quantize it here if that option was given
-foreach $ext (sort keys %videos) {
- foreach $video (sort keys %{$videos{$ext}}) {
-
- # Get a count of the number of videos for this date
- my $num_videos = $#{$videos{$ext}{$video}} + 1;
-
- # Process any single videos now
- if($num_videos <= 1) {
-
- # Store the srcvideo name
- my $srcvideo = $videos{$ext}{$video}[0];
- my $pwd = `pwd`; chomp($pwd);
-
- # Make a note if this video is interlaced or not
- my $ffmpeg_cmd = "";
- if($use_compute_host) { $ffmpeg_cmd .= "ssh $compute_host 'cd \"$pwd\";"; }
- $ffmpeg_cmd .= "$ffmpeg -i $srcvideo 2>&1 | grep -q \"frame rate differs\"";
- if($use_compute_host) { $ffmpeg_cmd .= "'"; }
- my $progressive = system('$ffmpeg_cmd');
- if(!$progressive) { print " Detected interlaced video content: $srcvideo\n"; }
-
- # Re-quantize the input video to reduce the resulting output filesize
- # This also gives us a chance to deinterlace the video as well
- # Only do this for .MTS videos
- if((defined $opt_q) && ($ext =~ /mts/i)) {
-
- # Set our requantize factor accordingly
- my $requantize_option = "";
- if(!$progressive) { $requantize_option = "-q $interlaced_requantize_quality"; }
- else { $requantize_option = "-q $progressive_requantize_quality"; }
-
- # Set our de-interlace option accordingly
- my $deinterlace_option = "";
- if(!$progressive) { $deinterlace_option = "-d"; }
-
- # Use HandBrake to requantize/deinterlace the input video
- print " Re-quantizing input video content: $video\n";
- my $handbrake_cmd = "";
- if($use_compute_host) { $handbrake_cmd .= "ssh $compute_host 'cd \"$pwd\";"; }
- $handbrake_cmd .= "$handbrake $deinterlace_option $requantize_option -E ac3 -i $srcvideo -o \"$video\" > /dev/null 2>&1";
- if($use_compute_host) { $handbrake_cmd .= "'"; }
- if(! defined $opt_t) {
- my $errno = system("$handbrake_cmd");
- $errno = $errno >> 8;
- if($errno > 1) {
- unlink "$video";
- die "-E- handbrake encountered some errors with exit code $errno\n";
- } else {
- # Remove the original srcvideo since we created a new version of it that we are going to keep instead
- if(defined $opt_r) {
- system("rm -f $srcvideo\n");
- }
- }
- }
- }
-
- # Remove the video from the array since we already processed it above
- delete $videos{$ext}{$video};
- next;
- }
- }