How to fully automate video conversion to mp4, iTunes friendly format

.mp4encodingfile conversionvideo

I am looking to implement a fully automated solution that will pick video files from an incoming directory, process them and put the result to iTunes special "Automatically Add to iTunes" directory.

Before starting to propose different products do read the requirements:

  • Command line interface, so we can use it with a cron
  • Do Pass Thru for video and audio streams if the source is already compatible with target format
  • Download subtitles from an external service (optional)
  • Embedding existing SRT files into the output video
  • Fixing metadata from an external service (optional)

Initially I would say that Handbrake should be able to do this, but I discovered that handbrake will never do Pass Thru for video (that's a statement that I got from the author).

Best Answer

z264

z264 will look at every file, but will only touch avi, flv, mpg, mpeg, wmv, vob, mkv and mp4 video files, copying video and audio streams and rewrapping if possible, transcoding just the audio if necessary, and transcoding only what video is necessary, and leave you with iTunes friendly, atom optimized mp4 files, leaving the originals in your Trash. It makes reasonably intelligent decisions for you about how to transcode files based on how you set its HandBrake variables (set at lines 312-333).

check file for AVC encoding and flv, wmv, or mkv wrapper and rewrap in mp4 container otherwise, if not already am mp4, transcode to AVC mp4

z264 has several dependencies (mediainfo, rmtrash, ffmpeg, SublerCLI, and HandBrakeCLI)

  • copy and paste binary install section into a new bash script and use it to download and install the dependencies into /usr/local/bin/ (create /usr/local and /usr/local/bin/ if not there already)

  • create 2GB ramdisk called 'Two' using command in ramdisk section

    diskutil quiet erasevolume HFS+ 'Two' `hdiutil attach -nomount ram://4194304`
    
  • double-check command definitions (locations of dependencies), and correct locations (to "/usr/local/bin/")

    change line 231 to read:  mediainfo="/usr/local/bin/mediainfo"
    change line 236 to read:  rmtrash="/usr/local/bin/rmtrash"
    change line 238 to read:  ffmpeg="/usr/local/bin/ffmpeg"
    change line 239 to read:  SublerCLI="/usr/local/bin/SublerCLI"
    change line 262 to read:  mediainfo="/usr/local/bin/mediainfo"
    change line 263 to read:  rmtrash="/usr/local/bin/rmtrash"
    change line 265 to read:  HandBrakeCLI="/usr/local/bin/HandBrakeCLI"
    
  • save as z264 in /usr/local/bin/

  • make executable

    sudo chmod +x /usr/local/bin/z264

  • use Terminal to call z264 on single file, directory of files, or call it from a cron to crawl entire file systems periodically

    z264 directory.full.of.mixed.video.filetypes/*
    

minor issues: user needs to be able to read, debug, and use bash. z264 does not yet count how many background_transcoder processes it spawns, meaning if there are a lot of transcodes, it will take awhile for them to complete, but they will complete. You also need a lot of memory (8GB is ok). Snow Leopard users will need to install purge command from xcode developer tools.