From 32193a0980bab03d55744456402770cacba4fc71 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Sat, 28 Apr 2012 09:18:32 -0700 Subject: [PATCH] add a script to encode DVDs with HandBrake, and another to encode new DVDs --- encode | 11 +++++++++++ encode-new-dvds | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100755 encode create mode 100755 encode-new-dvds diff --git a/encode b/encode new file mode 100755 index 0000000..53ed919 --- /dev/null +++ b/encode @@ -0,0 +1,11 @@ +#!/bin/zsh + +source="$1" +dest="$2" +if [[ -e "$dest" ]]; then + # echo "$source -> $dest (skipped, exists)" +else + echo "$source -> $dest" + # echo HandBrakeCLI --preset=\'iPad\' -e x264 --main-feature --markers -i \'$source\' -o \'$dest\' + noglob HandBrakeCLI --preset='iPad' -e x264 --main-feature --markers -i "$source" -o "$dest" >>'/var/log/encode.log' 2>>'/var/log/encode.err' +fi diff --git a/encode-new-dvds b/encode-new-dvds new file mode 100755 index 0000000..16cecb8 --- /dev/null +++ b/encode-new-dvds @@ -0,0 +1,50 @@ +#!/usr/bin/env ruby + +SourceDir = '/Volumes/Atlas/DVD/Movies' +DestDir = '/Volumes/Atlas/Purchased/Movies' + +def quote(s) + '"' + s.gsub(/(["$`])/, '\\\\\1') + '"' +end + +def files_to_encode + files = Dir[File.join(SourceDir, '*')].inject({}) do |files, source| + basename = File.basename(source) + unless basename == 'scrub.json' || File.exists?(File.join(source, 'noencode')) + outname = basename.sub(/\.dvdmedia$/, '').sub(/Disc/, 'Part') + dest = File.join(DestDir, outname) + '.m4v' + files[source] = dest + end + files + end + + # If only one disc is to be encoded strip the "(Part X of Y)" suffix. + # Otherwise make sure the # of parts matches how many are actually encoded. + sources = files.keys + sources.grep(/^.*\(Disc\s/).each do |source| + prefix = source.match(/^(.*)\(Disc\s/)[1] + parts = sources.select { |source| source[prefix] } + if parts.length == 1 + files[source].sub!(/\s\(Part[^)]+\)/, '') + else + parts.each do |source| + files[source].sub!(/Part (\d) of \d/, "Part \\1 of #{parts.length}") + end + end + end + + files +end + +def main + files_to_encode.each do |source, dest| + if File.exists?(dest) + puts "#{source} -> #{dest} (skipped, exists)" + else + puts "#{source} -> #{dest}" + `encode #{quote(source)} #{quote(dest)}` + end + end +end + +main if $0 == __FILE__