ccjensen / mp4tvtags

Automatically tags .h264 files using information from thetvdb.com

This URL has Read+Write access

Christopher Campbell Jensen (author)
Tue Oct 06 06:12:05 -0700 2009
name age message
file AtomicParsley32 Tue Oct 14 01:48:27 -0700 2008 modified version of AtomicParsley which allows ... [ccjensen]
file README Tue Oct 06 06:12:05 -0700 2009 updated to display new flag option [Christopher Campbell Jensen]
file cache.py Tue Oct 06 05:40:06 -0700 2009 updating tvdb_api and now compatible with snow ... [Christopher Campbell Jensen]
file mp4tvtags.py Tue Oct 06 06:10:56 -0700 2009 can input custom file extension to parse (defau... [Christopher Campbell Jensen]
file tvdb_api.py Tue Oct 06 05:40:06 -0700 2009 updating tvdb_api and now compatible with snow ... [Christopher Campbell Jensen]
file tvdb_exceptions.py Tue Oct 06 05:40:06 -0700 2009 updating tvdb_api and now compatible with snow ... [Christopher Campbell Jensen]
file tvdb_ui.py Tue Oct 06 05:40:06 -0700 2009 updating tvdb_api and now compatible with snow ... [Christopher Campbell Jensen]
README
++++++++++  mp4tvtags v0.5  ++++++++++
works on Mac OS X Leopard & Snow Leopard

This requires Python and a modified version of AtomicParsley (to allow it to write to the "long description" tag).
Below are instructions on how to edit the source version of AtomicParsley (thanks to creator of MetaX Rodney - 
http://kerstetter.net for the code snippets). Rather then build it yourself, it might be easier to download MetaX and 
copy the AtomicParsley32 from /../MetaX.app/Contents/Resources

No matter which method you choose, the modified version of AtomicParsley must be placed in the same directory as the the 
mp4tvtags files.

Usage:
Browse to the folder that contain the tv episodes. Must be in the structure:
/Show Name/Season [S#]/[S#]x[E#] <anything> .mp4
example: /The X-Files/Season 1/01x01 Pilot.mp4

Options:
  -h, --help            show this help message and exit
  -b, --batch           selects first search result, requires no human
                        intervention once launched
  -i, --interactive     interactivly select correct show from search results
                        [default]
  -c, --cautious        Writes everything to new files. Nothing is deleted
                        (will make a mess!)
  -d, --debug           shows all debugging info
  -v, --verbose         Will provide some feedback [default]
  -q, --quiet           For ninja-like processing
  -f, --force-tagging   Tags all valid files, even previously tagged ones
  -r, --remove-artwork  removes previously embeded artwork
  -n, --no-renaming     disables renaming
  -t, --no-tagging      disables tagging
  -x FILEEXTENSIONS, --file-ext=FILEEXTENSIONS
                        tells program to only parse inputted extensions.
                        Example: "-x m4v,mp4" (comma seperated list of
                        extensions)





HOW TO MAKE MODIFIED BUILD OF ATOMICPARSLEY

Bits edited in AtomicParsley:
main.ccp:
========================================================================
At about line 70, insert the long description command line definition-->

  #define Meta_description 'p'
  #define Meta_long_description   'j'

At about line 974, insert the long description definition -->

  { "description", required_argument, NULL, Meta_description },
  { "longDescription", required_argument, NULL, Meta_long_description},

At about line 1423, insert the code to handle the command line switch -->

  case Meta_description : {
      APar_ScanAtoms(ISObasemediafile);
      if ( !APar_assert(metadata_style == ITUNES_STYLE, 1, "description") ) {
        break;
      }
      
      AtomicInfo* descriptionData_atom = APar_MetaData_atom_Init("moov.udta.meta.ilst.desc.data",         optarg, 
      AtomFlags_Data_Text);
      APar_Unified_atom_Put(descriptionData_atom, optarg, UTF8_iTunesStyle_256glyphLimited, 0, 0);
      break;
    }
      
  case Meta_long_description : {
      APar_ScanAtoms(ISObasemediafile);
      if ( !APar_assert(metadata_style == ITUNES_STYLE, 1, "description") ) {
        break;
      }
      
      AtomicInfo* descriptionData_atom = APar_MetaData_atom_Init("moov.udta.meta.ilst.ldes.data",         optarg, 
      AtomFlags_Data_Text);
      APar_Unified_atom_Put(descriptionData_atom, optarg, UTF8_iTunesStyle_Unlimited, 0, 0);
      break;
    }
========================================================================