From: Alan J. Pippin Date: Sun, 23 Sep 2012 17:42:11 +0000 (-0600) Subject: Major changes to support common configuration file for organize_videos scripts. X-Git-Url: http://git.pippins.net/embedvideo/.git/?a=commitdiff_plain;h=c91b8b9feda0a1fc3221cffd3e28cee33e919b5a;p=videoscripts%2F.git Major changes to support common configuration file for organize_videos scripts. Fixed bug in "already running" pid check. Fixed bug in directory parsing to determine which dirs to recreate playlists in. --- diff --git a/make_mkv b/make_mkv index 00e1ce3..c3a2398 100755 --- a/make_mkv +++ b/make_mkv @@ -17,20 +17,12 @@ use DateTime::Duration; use DateTime::Format::Duration; #################################################################################################### -# Configuration parameters - CHANGE THESE TO SUITE YOUR NEEDS -my $mkvmerge='mkvmerge'; -my $ffmpeg='ffmpeg'; -my $handbrake='HandBrakeCLI'; -my $handbrake_options='--strict-anamorphic --crop 0:0:0:0 -E ac3'; -my $tmpfile = `tempfile`; chomp($tmpfile); -my $chapter_file = $tmpfile; -my $input_file_options = "-S"; -my $output_file_options = "--chapters $chapter_file --compression -1:none"; -my $timezone = `cat /etc/timezone`; chomp($timezone); -my $interlaced_requantize_quality=0.85; -my $progressive_requantize_quality=0.7; -#################################################################################################### - +# Configuration parameters +$mydir = `cd \$(dirname $0) 2>/dev/null; pwd`; chomp($mydir); unshift @INC,("$mydir"); +# Default configuration values +require "organize_videos.conf"; +# Override defaults with local customizations +if( -f "$mydir/organize_videos.conf.local") { require "organize_videos.conf.local"; } #################################################################################################### # Command Line Options diff --git a/merge_videos_by_day b/merge_videos_by_day index 4d96b93..6dce13c 100755 --- a/merge_videos_by_day +++ b/merge_videos_by_day @@ -13,21 +13,13 @@ getopts("qkh:tvs:"); my $srcpathname = $opt_s; #################################################################################################### -# Configuration parameters - CHANGE THESE TO SUITE YOUR NEEDS -my $compute_host = "pippin.pippins.net"; # I need this since this script is run from a virtual machine -my $use_compute_host = 1; # Set to 1 to use a remote compute host to run the mkvmerge command. Set to 0 to use the local host to run it. -my $make_mkv = "/naspool/videos/bin/make_mkv"; # Update this to be the path to the make_mkv script -my $requantize_input_video=1; # This will dramatically decrease the size of the video with minimal compute processing requirements. -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 $video_suffix = "000"; # What number to start with when adding an incrementing suffix to the end of the video clip to avoid name collisons -my $video_title_prefix = "HomeVideos:"; # What text to put on the front of the title for the merged video being created -my $find_cmd = "find \"$srcpathname/\" -iregex \".*\.mov\" -o -iregex \".*\.3gp\" -o -iregex \".*\.mp4\" -o -iregex \".*\.mts\""; -my $handbrake='HandBrakeCLI'; -my $handbrake_options='--strict-anamorphic --crop 0:0:0:0 -E ac3'; -my $interlaced_requantize_quality=0.85; -my $progressive_requantize_quality=0.7; +# Configuration parameters +$mydir = `cd \$(dirname $0) 2>/dev/null; pwd`; chomp($mydir); unshift @INC,("$mydir"); +# Default configuration values +require "organize_videos.conf"; +# Override defaults with local customizations +if( -f "$mydir/organize_videos.conf.local") { require "organize_videos.conf.local"; } + #################################################################################################### sub usage { diff --git a/organize_videos b/organize_videos index 0b252ea..4e1ad7f 100755 --- a/organize_videos +++ b/organize_videos @@ -10,19 +10,13 @@ use Time::localtime; use File::Pid; #################################################################################################### -# Configuration parameters - CHANGE THESE TO SUITE YOUR NEEDS -my $srcpathname = "/naspool/pictures/New Photos"; # Path to look for videos to move from -my $dstpathname = "/naspool/videos/HomeVideos"; # Path to move the videos to -my $merge_videos_by_day = "/naspool/videos/bin/merge_videos_by_day"; -my $minage = "+15"; # Video file creation dates must not have changed in the last X minutes to process any of the video files -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 $playlist_extension = "pls"; # The extension to use when creating playlist files -my $video_suffix = "000"; # What number to start with when adding an incrementing suffix to the end of the final video clip to avoid name collisions -my $movie_file_ext = "-iregex \".*\.mov\" -o -iregex \".*\.3gp\" -o -iregex \".*\.mp4\" -o -iregex \".*\.mts\" -o -iregex \".*\.mkv\""; -my $find_changed_cmd = "find \"$srcpathname/\" -not -cmin $minage -a \\( $movie_file_ext \\)"; -my $find_cmd = "find \"$srcpathname/\" $movie_file_ext"; +# Configuration parameters +$mydir = `cd \$(dirname $0) 2>/dev/null; pwd`; chomp($mydir); unshift @INC,("$mydir"); +# Default configuration values +require "organize_videos.conf"; +# Override defaults with local customizations +if( -f "$mydir/organize_videos.conf.local") { require "organize_videos.conf.local"; } + #################################################################################################### # Sanity check @@ -82,7 +76,7 @@ sub is_folder_empty { sub create_playlists { my ($dstdirs) = @_; - foreach $dstdir (@{$dstdirs}) { + foreach $dstdir (keys %{$dstdirs}) { print "-> Recreating playlists in: $dstdir\n"; print "-> Creating playlists for each month & year of clips from this directory: $video_directory\n"; opendir(VIDEODIR, "$dstdir") or die "-E- could not open: $dstdir\n"; @@ -114,8 +108,8 @@ sub create_playlists { if(defined $opt_h) { usage(); exit 1; } if(defined $opt_p) { if(defined $opt_d) { - my @dstdirs = ("$opt_d"); - create_playlists(\@dstdirs); + my %dstdirs = ("$opt_d",1); + create_playlists(\%dstdirs); } else { die "-E- You must specify the -d option when using the -p option\n"; } @@ -123,7 +117,7 @@ if(defined $opt_p) { } # Only proceed if there are video files to organize -$video_files_found=`$find_cmd`; +$video_files_found=`$find_cmd_with_mkv`; if(!$video_files_found) { exit 0; } # Only proceed if no files have changed in the past $cmin minutes @@ -131,7 +125,7 @@ $changed_files_found=`$find_changed_cmd`; if($changed_files_found) { exit 0; } # Only one instance of this script running at a time -my $pidfile = File::Pid->new({file => "/tmp/organize_videos.pid"}); +my $pidfile = File::Pid->new({file => "$pid_file", pid => "$$"}); exit if $pidfile->running(); $pidfile->write(); @@ -155,10 +149,10 @@ if(defined $opt_n) { } # Copy the videos over to the destination path -my @dstdirs; +my %dstdirs; chdir "$srcpathname"; -print "$find_cmd\n" if($opt_v); -foreach $file (`$find_cmd`) { +print "$find_cmd_with_mkv\n" if($opt_v); +foreach $file (`$find_cmd_with_mkv`) { chomp($file); $srcdir = dirname($file); @@ -182,6 +176,13 @@ foreach $file (`$find_cmd`) { $monthnum = $month; $monthname = lc($month2monthname{$month}); } + elsif($srcfile =~ /^(\d\d\d\d)(\d\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; @@ -196,7 +197,7 @@ foreach $file (`$find_cmd`) { # We are ready to pick a destination folder to put the video in $dstdir = $dstpathname . "/" . $year; - push(@dstdirs,$dstdir); + $dstdirs[$dstdir] = 1; $dstfile = $dstdir . "/" . $year . "-" . $monthnum . "-" . $day; # Check for duplicate filenames at the destination @@ -248,7 +249,7 @@ foreach $file (`$find_cmd`) { } # For each destination dir we copied new content into, recreate the playlists -create_playlists(\@dstdirs); +create_playlists(\%dstdirs); $pidfile->remove(); diff --git a/organize_videos.conf b/organize_videos.conf new file mode 100644 index 0000000..09b4a5f --- /dev/null +++ b/organize_videos.conf @@ -0,0 +1,102 @@ +# Force Emacs Perl Mode +# Local Variables: +# mode: perl +# End: + +################################################################################ +# This is a perl module included by the perl scripts for this application. +# You must modify these values to match your system configuration. +# Create a new file called "organize_videos.conf.local" in the same dir as "organize_videos.conf" +# and only put in it the variables you wish to override. +# This will prevent your localized settings from being overwritten by future code updates. +################################################################################ + +# Path to look for videos to move from +$srcpathname = "/naspool/pictures/New Photos"; + +# Path to move the videos to +$dstpathname = "/naspool/videos/HomeVideos"; + +# Path to merge_videos_by_day script +$merge_videos_by_day = "/naspool/videos/bin/merge_videos_by_day"; + +# Path to the make_mkv script +$make_mkv = "/naspool/videos/bin/make_mkv"; + +# mkvmerge path/command name +$mkvmerge = 'mkvmerge'; + +# ffmpeg path/command name +$ffmpeg = 'ffmpeg'; + +# handbrake path/command name +$handbrake = 'HandBrakeCLI'; + +# The pid file to use to indicate organize_videos is running +$pid_file = "/tmp/organize_videos.pid"; + +# The owner of the files after they are moved +$owner = "ajp"; + +# The group of the files after they are moved +$group = "pip"; + +# The mode to set on each file after they are moved +$mode = "664"; + +# The extension to use when creating playlist files +$playlist_extension = "pls"; + +# What number to start with when adding an incrementing suffix to the end of the final video clip to avoid name collisions +$video_suffix = "000"; + +# Which movie file extensions should be considered for merging +# NOTE: Script does not support merging multiple mkv files into a single mkv file +$movie_file_ext = "-iregex \".*\.mov\" -o -iregex \".*\.3gp\" -o -iregex \".*\.mp4\" -o -iregex \".*\.mts\" -o -iregex \".*\.m4v\""; + +# Video file creation dates must not have changed in the last X minutes to process any of the video files +# This is done to ensure that all videos from a given upload from a camera have completed prior to looking for videos to merge +$minage = "+30"; + +# What command should be used to find files that have changed (are at least $minage old) +$find_changed_cmd = "find \"$srcpathname/\" -not -cmin $minage -a \\( $movie_file_ext \\)"; + +# What command should be used to find all movie files +$find_cmd = "find \"$srcpathname/\" $movie_file_ext"; +$find_cmd_with_mkv = "find \"$srcpathname/\" $movie_file_ext -o -iregex \".*\.mkv\""; + +# Set the tmpfile to use +$tmpfile = `tempfile`; chomp($tmpfile); + +# Set the timezone to use +$timezone = `cat /etc/timezone`; chomp($timezone); + +# handbrake options used when re-encoding the videos +$handbrake_options='--strict-anamorphic --crop 0:0:0:0 -E ac3'; + +# tmp chapter file used by handbrake when creating mkv +$chapter_file = $tmpfile; + +# handbrake input file options +$input_file_options = "-S"; + +# handbrake output file options +$output_file_options = "--chapters $chapter_file --compression -1:none"; + +# handbrake quantization levels +$interlaced_requantize_quality=0.85; +$progressive_requantize_quality=0.75; + +# Remote compute host to farm handbrake encode job off to (I need this since this script is run from a virtual machine) +$compute_host = "pippin.pippins.net"; + +# Set to 1 to use a remote compute host to run the mkvmerge command. Set to 0 to use the local host to run it. +$use_compute_host = 1; + +# This will dramatically decrease the size of the video with minimal compute processing requirements. +$requantize_input_video=1; + +# What text to put on the front of the title for the merged video being created +$video_title_prefix = "HomeVideos:"; + +####################################################################################################