Difference between revisions of "Video file tagging"

From Official Kodi Wiki
Jump to: navigation, search
m (Tag field mapping table: was missing ''Title'' entry, the most important of all)
(Benefits of embedded video tags)
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
{{notice|This feature is currently for '''movies only'''. TV shows and music videos are not yet supported.}}<!--is this really true? TV-specific MP4 boxes are not supported, but I'm not sure whether the tags are really not parsed at all-->
 
{{notice|This feature is currently for '''movies only'''. TV shows and music videos are not yet supported.}}<!--is this really true? TV-specific MP4 boxes are not supported, but I'm not sure whether the tags are really not parsed at all-->
 
{{notice|This page describes an alternative way of adding movies to the library that is not dependent on file names or online scrapers.}}
 
{{notice|This page describes an alternative way of adding movies to the library that is not dependent on file names or online scrapers.}}
{{VideoLibraryCreate}}
+
 
  
 
<section begin="intro" />Kodi v18 Leia introduces support for embedded video tags using '''*.mkv''' and '''*.mp4''' video files. '''*.avi''' support is available since v18.x. They are similar in principle to the tags saved in audio files. Only limited support for video tags is available at this time.<section end="intro" />
 
<section begin="intro" />Kodi v18 Leia introduces support for embedded video tags using '''*.mkv''' and '''*.mp4''' video files. '''*.avi''' support is available since v18.x. They are similar in principle to the tags saved in audio files. Only limited support for video tags is available at this time.<section end="intro" />
Line 11: Line 11:
 
Media may already contain useful metadata (the reverse however is also true - many files contain "junk" metadata, hence why the feature defaults to off).
 
Media may already contain useful metadata (the reverse however is also true - many files contain "junk" metadata, hence why the feature defaults to off).
 
It gives one more control over the metadata than scrapers do (as scrapers may misclassify media and pull the wrong data).
 
It gives one more control over the metadata than scrapers do (as scrapers may misclassify media and pull the wrong data).
It does away with the need to have [[.nfo file]]s. Since metadata travels with the media file, there is no longer a need for potentially thousands of these smaller files and can make directory management even easier.
+
It does away with the need to have [[NFO files]]. Since metadata travels with the media file, there is no longer a need for potentially thousands of these smaller files and can make directory management even easier.
 
Using ultra-high resolution [[artwork]]/cover images that looks nicer on newer HD displays. (Pretty pictures!)
 
Using ultra-high resolution [[artwork]]/cover images that looks nicer on newer HD displays. (Pretty pictures!)
  
Line 98: Line 98:
 
: Two separate ones, only supported within Matroska (MKV) files currently.
 
: Two separate ones, only supported within Matroska (MKV) files currently.
  
== Tag field mapping table ==
+
== MP4 tag options ==
 +
 
 +
For MP4 tags, Kodi reads Title, Writing Credits, Plot, Plot Outline, Year, Album, Artist and Track information if available.
  
 
{| class="wikitable prettytable"
 
{| class="wikitable prettytable"
! Kodi !! FFmpeg !! MP4 box/atom !! AVI FourCC !! Mp3tag !! mp4tags/mp4v2 CLI !! Description
+
|+ Tag field mapping table
 +
! Kodi !! FFmpeg !! MP4 box / atom !! AVI FourCC !! [https://help.mp3tag.de/main_tags.html Mp3tag] !! mp4tags / mp4v2 CLI !! Description
 +
|-
 +
| || <code>album_artist</code> || <code>aART</code> ||  || <code>ALBUMARTIST</code> || <code>-R</code>, <code>-albumartist</code> || album artist
 
|-
 
|-
| || <code>album-sort</code>, <code>sort_album</code> || <code>soal</code> || || <code>ALBUMSORT</code> || ||
+
| '''''Album''''' || <code>album</code> || <code>©alb</code> || (<code>IPRD</code>) || <code>ALBUM</code> || <code>-A</code>, <code>-album</code> || album title
 
|-
 
|-
| || <code>album_artist</code> || <code>aART</code> ||  || <code>ALBUMARTIST</code> || <code>-R</code>, <code>-albumartist</code> || album artist
+
| || <code title="read">sort_album</code> (<code title="write">album-sort</code>) || <code>soal</code> ||  || <code>ALBUMSORT</code> || ||
 
|-
 
|-
| ''Album'' || <code>album</code> || <code>©alb</code> || <code>IPRD</code> || <code>ALBUM</code> || <code>-A</code>, <code>-album</code> || album title
+
| '''''Artist''''' || <code>artist</code> || <code>©art</code>, <code>©ART</code> || (<code>IART</code>) || <code>ARTIST</code> || <code>-a</code>, <code>-artist</code> || artist information
 
|-
 
|-
| || <code>artist-sort</code> || <code>soar</code> ||  || <code>ARTISTSORT</code> ||  ||  
+
| || <code title="read">artist</code> (<code title="write">author</code>) || <code>©aut</code> ||  || ||  || author information
 
|-
 
|-
| ''Artist'' || <code>artist</code>, <code>author</code> || <code>©art</code>, <code>©ART</code> || <code>IART</code> || <code>ARTIST</code> || <code>-a</code>, <code>-artist</code> || artist information
+
| || <code title="read">sort_artist</code> (<code title="write">artist-sort</code>) || <code>soar</code> || || <code>ARTISTSORT</code> || ||  
 
|-
 
|-
| || <code>comment</code> || <code>©cmt</code> || <code>ICMT</code> || <code>COMMENT</code> || <code>-c</code>, <code>-comment</code> || general comment
+
| || <code>comment</code> || <code>©cmt</code> (<code title="write-only">©des</code>) || (<code>ICMT</code>) || <code>COMMENT</code> || <code>-c</code>, <code>-comment</code> || general comment
 
|-
 
|-
 
| || <code>compilation</code> || <code>cpil</code> ||  || <code>COMPILATION</code> ||  ||  
 
| || <code>compilation</code> || <code>cpil</code> ||  || <code>COMPILATION</code> ||  ||  
 
|-
 
|-
| ''WritingCredits'' (split at slashes) || <code>composer</code> || <code>©wrt</code> ||  || <code>COMPOSER</code> || <code>-w</code>, <code>-writer</code> || composer information
+
| '''''WritingCredits''''' (split at slashes) || <code>composer</code> || <code>©wrt</code> ||  || <code>COMPOSER</code> || <code>-w</code>, <code>-writer</code> || composer information
 
|-
 
|-
| || <code>copyright</code> || <code>©cpy</code>, <code>cprt</code> || <code>ICOP</code> || <code>COPYRIGHT</code> || <code>-C</code>, <code>-copyright</code> || copyright information
+
| || <code>copyright</code> || <code>©cpy</code> (<code>cprt</code>) || (<code>ICOP</code>) || <code>COPYRIGHT</code> || <code>-C</code>, <code>-copyright</code> || copyright information
 
|-
 
|-
 
| || <code>creation_time</code> ||  ||  || <code>ENCODINGTIME</code> ||  ||  
 
| || <code>creation_time</code> ||  ||  || <code>ENCODINGTIME</code> ||  ||  
 
|-
 
|-
| ''Year'' || <code>date</code> ||  || <code>ICRD</code> || <code>RELEASETIME</code> ||  ||
+
| '''''Year''''' || <code title="read">date</code> || <code>©day</code> || <code>ICRD</code> || <code>RELEASETIME</code> ||  ||  
|-
 
| (''Premiered'') || <code>year</code> || <code>©day</code> ||  || <code>YEAR</code> || <code>-y</code>, <code>-year</code> || release date
 
|-
 
| ''PlotOutline'', (''Overview'') || <code>description</code> || <code>desc</code> ||  || <code>DESCRIPTION</code> || <code>-l</code>, <code>-longdesc</code> || long description
 
 
|-
 
|-
| || <code>disc</code> || <code>disk</code> ||  || <code>DISCNUMBER</code> || <code>-d</code>, <code>-disk</code> / <code>-D</code>, <code>-disks</code> || disk number / number of discs
+
| (''Premiered'') || <code title="write">year</code> || <code>©day</code> ||  || <code>YEAR</code> || <code>-y</code>, <code>-year</code> || release date
 
|-
 
|-
| || <code>encoded_by</code> || <code>©too</code> || <code>ITCH</code> || <code>ENCODEDBY</code> || <code>-e</code>, <code>-encodedby</code> || name of the person or company who encoded the file
+
| || <code>encoded_by</code> || || (<code>ITCH</code>) || <code>ENCODEDBY</code> || <code>-e</code>, <code>-encodedby</code> || name of the person or company who encoded the file
 
|-
 
|-
| || <code>encoder</code> || || <code>ISFT</code> || <code>ENCODERSETTINGS</code> || <code>-E</code>, <code>-tool</code> || software used for encoding
+
| || <code>encoder</code> || <code>©too</code> (<code>©swr</code>) || (<code>ISFT</code>) || <code>ENCODERSETTINGS</code> || <code>-E</code>, <code>-tool</code> || software used for encoding
 
|-
 
|-
 
| (''ProductionCode'') || <code>episode_id</code> || <code>tven</code> ||  || <code>TVEPISODEID</code> || <code>-o</code>, <code>-episodeid</code> || TV episode ID
 
| (''ProductionCode'') || <code>episode_id</code> || <code>tven</code> ||  || <code>TVEPISODEID</code> || <code>-o</code>, <code>-episodeid</code> || TV episode ID
Line 139: Line 140:
 
| || <code>episode_sort</code> || <code>tves</code> ||  || <code>TVEPISODE</code> || <code>-M</code>, <code>-episode</code> || episode number
 
| || <code>episode_sort</code> || <code>tves</code> ||  || <code>TVEPISODE</code> || <code>-M</code>, <code>-episode</code> || episode number
 
|-
 
|-
| ''Genre'' (split at slashes) || <code>genre</code> || <code>©gen</code>, <code>gnre</code> || <code>IGNR</code> || <code>GENRE</code> || <code>-g</code>, <code>-genre</code> / <code>-j</code>, <code>-genreid</code> || genre name / ID
+
| || <code>season_number</code> || <code>tvsn</code> ||  || <code>TVSEASON</code> || <code>-n</code>, <code>-season</code> || season number
 +
|-
 +
| '''''Genre''''' (split at slashes) || <code>genre</code> || <code>©gen</code>, <code>gnre</code> || (<code>IGNR</code>) || <code>GENRE</code> || <code>-g</code>, <code>-genre</code> / <code>-j</code>, <code>-genreid</code> || genre name / ID
 
|-
 
|-
| (''Set'') || <code>grouping</code> || <code>©grp</code> ||  || <code>CONTENTGROUP</code> || <code>-G</code>, <code>-grouping</code> || grouping name
+
| (''Set'') || <code>grouping</code> || <code>©grp</code> ||  || <code>CONTENTGROUP</code> || <code>-G</code>, <code>-grouping</code> || grouping name, set
 
|-
 
|-
| || <code>hd_video</code> || <code>hdvd</code> ||  || <code>ITUNESHDVIDEO</code> || <code>-H</code>, <code>-hdvideo</code> || HD flag (1/0)
+
| || <code>hd_video</code> || <code>hdvd</code> ||  || <code>ITUNESHDVIDEO</code> || <code>-H</code>, <code>-hdvideo</code> || HD flag (0 = SD, 1 = 720p, 2 = 1080p/i Full HD, 3 = 2160p UHD)
 
|-
 
|-
| || <code>language</code> ||  || <code>ILNG</code> || <code>LANGUAGE</code> ||  ||  
+
| || <code>language</code> ||  || (<code>ILNG</code>) || <code>LANGUAGE</code> ||  || main/original spoken/displayed language
 
|-
 
|-
 
| || <code>lyrics</code> || <code>©lyr</code> ||  || <code>UNSYNCEDLYRICS</code> || <code>-L</code>, <code>-lyrics</code> || unsynchronized lyrics
 
| || <code>lyrics</code> || <code>©lyr</code> ||  || <code>UNSYNCEDLYRICS</code> || <code>-L</code>, <code>-lyrics</code> || unsynchronized lyrics
Line 151: Line 154:
 
| || <code>media_type</code> || <code>stik</code> ||  || <code>ITUNESMEDIATYPE</code> || <code>-i</code>, <code>-type</code> || Media Type (TV Show, Movie, Music, Audiobook ...)
 
| || <code>media_type</code> || <code>stik</code> ||  || <code>ITUNESMEDIATYPE</code> || <code>-i</code>, <code>-type</code> || Media Type (TV Show, Movie, Music, Audiobook ...)
 
|-
 
|-
| (''Studio'') || <code>network</code> || <code>tvnn</code> ||  || <code>TVNETWORK</code> || <code>-N</code>, <code>-network</code> || TV network
+
| (''Studio'') || <code>network</code> || <code>tvnn</code> ||  || <code>TVNETWORK</code> || <code>-N</code>, <code>-network</code> || TV network, channel, station
 +
|-
 +
| (''Studio'') || <code>publisher</code> ||  ||  || <code>PUBLISHER</code> ||  || publisher
 +
|-
 +
|  || <code>producer</code> || <code>©PRD</code>, <code>©prd</code> ||  ||  ||  || producer
 
|-
 
|-
| (''Director'') || <code>performer</code> || <code>©con</code> ||  || <code>CONDUCTOR</code> ||  ||  
+
| (''Director'') || <code>performer</code> || <code>©con</code> ||  || <code>CONDUCTOR</code> ||  || conductor, performer
 
|-
 
|-
| (''Studio'') || <code>publisher</code> ||  ||  || <code>PUBLISHER</code> ||  ||  
+
| (''Director'') || <code title="read-only">composer</code> || <code>©com</code> ||  || ||  || composer
 
|-
 
|-
| || <code>season_number</code> || <code>tvsn</code> ||  || <code>TVSEASON</code> || <code>-n</code>, <code>-season</code> || season number
+
| (''Director'') || <code title="read-only">director</code> || <code>©dir</code> ||  || || || director
 
|-
 
|-
 
| (''ShowTitle'') || <code>show</code> || <code>tvsh</code> ||  || <code>TVSHOW</code> || <code>-S</code>, <code>-show</code> || TV show
 
| (''ShowTitle'') || <code>show</code> || <code>tvsh</code> ||  || <code>TVSHOW</code> || <code>-S</code>, <code>-show</code> || TV show
 
|-
 
|-
| ''Plot'' || <code>synopsis</code> || <code>ldes</code> ||  || <code>PODCASTDESC</code> || <code>-m</code>, <code>-description</code> || short description
+
| '''''Plot''''' || <code>synopsis</code> || <code>ldes</code> ||  || <code>PODCASTDESC</code> || <code>-m</code>, <code>-description</code> || short description
 +
|-
 +
| '''''PlotOutline''''', (''Overview'') || <code>description</code> || <code>desc</code> ||  || <code>DESCRIPTION</code> || <code>-l</code>, <code>-longdesc</code> || long description
 +
|-
 +
| '''''Title''''' || <code>title</code> || <code>©nam</code> || <code>INAM</code> || <code>TITLE</code> || <code>-s</code>, <code>-song</code> || song title, track name
 +
|-
 +
| (''SortTitle'') || <code title="read">sort_name</code> (<code title="write">title-sort</code>) || <code>sonm</code> ||  || <code>TITLESORT</code> ||  ||
 +
|-
 +
| (''TagLine'') || <code>subtitle</code> || <code>©st3</code> || (<code></code>) || <code>SUBTITLE</code> || <code>-</code>, <code>-</code> ||
 +
|-
 +
| '''''Track''''' || <code>track</code> || <code>trkn</code> (<code>©trk</code>) || (<code>IPRT</code>) || <code>TRACK</code> || <code>-t</code>, <code>-track</code> / <code>-T</code>, <code>-tracks</code> || track number / number of tracks
 +
|-
 +
| || <code>disc</code> || <code>disk</code> ||  || <code>DISCNUMBER</code> || <code>-d</code>, <code>-disk</code> / <code>-D</code>, <code>-disks</code> || disc number / number of discs
 +
|-
 +
| (''Rating'') || <code>rating</code> || <code>rtng</code> ||  || <code>ITUNESADVISORY</code> || <code>-X</code>, <code>-rating</code> || Rating (0 = none, 1 = clean, 2 = explicit)
 +
|-
 +
| (''Country'') || <code>location</code> || <code>©xyz</code> (<code>loci</code>) ||  ||  ||  || GPS coordinates
 +
|-
 +
| (''Trailer'') || <code></code> || <code></code> || (<code></code>) || <code></code> || <code>-</code>, <code>-</code> ||
 +
|-
 +
| (''PictureURL'') || <code></code> || <code></code> || (<code></code>) || <code></code> || <code>-</code>, <code>-</code> ||
 +
|-
 +
| (''Votes'') || <code></code> || <code></code> || (<code></code>) || <code></code> || <code>-</code>, <code>-</code> ||
 +
|-
 +
| (''UniqueIDs'') || <code></code> || <code></code> || (<code></code>) || <code></code> || <code>-</code>, <code>-</code> ||
 +
|-
 +
| (''Tags'') || (<code>keywords</code>) || (<code>keyw</code> (<code>©key</code>)) || (<code></code>) || <code></code> || <code>-</code>, <code>-</code> || tags, keywords
 +
|-
 +
| (''OriginalTitle'') || <code></code> || <code></code> ||  || <code></code> ||  ||
 +
|-
 +
| (''EpisodeGuide'') || <code></code> || <code></code> ||  || <code></code> ||  ||
 +
|-
 +
| (''Status'') || <code></code> || <code></code> ||  || <code></code> ||  ||
 +
|-
 +
| (''ShowLink'') || <code>URL</code> || <code>©url</code> ||  || <code></code> ||  ||
 +
|-
 +
| (''NamedSeasons'') || <code></code> || <code></code> ||  || <code></code> ||  || array
 +
|-
 +
| || <code>podcast</code> || <code>pcst</code> ||  || <code>PODCAST</code> || <code>-B</code>, <code>-podcast</code> || podcast flag (0/1)
 
|-
 
|-
| (''SortTitle'') || <code>title-sort</code> || <code>sonm</code> ||  || <code>TITLESORT</code> || ||  
+
| || <code>category</code> || <code>catg</code> ||  || <code>PODCASTCATEGORY</code> || <code>-O</code>, <code>-category</code> || category
 
|-
 
|-
| ''Title'' || <code>title</code> || <code>©nam</code> || <code>INAM</code> || <code>TITLE</code> || <code>-s</code>, <code>-song</code> || song title, track name
+
| (''UniqueID'') || || <code>cnID</code> || || <code>ITUNESCATALOGID</code> || <code>-I</code>, <code>-contentid</code>? || content ID
 
|-
 
|-
| ''Track'' || <code>track</code> || <code>trkn</code> || <code>IPRT</code> || <code>TRACK</code> || <code>-t</code>, <code>-track</code> / <code>-T</code>, <code>-tracks</code> || track number / number of tracks
+
| (''UniqueID'') || <code>episode_uid</code> || <code>egid</code> || || <code>PODCASTID</code> || <code>-I</code>, <code>-contentid</code>? || content ID
 
|}
 
|}
 
<!--
 
<!--
 
mp4tags/mp4v2 CLI:
 
mp4tags/mp4v2 CLI:
| || pcst || PODCAST || <code>-B</code>, <code>-podcast</code> || podcast flag
+
| || || (<code>covr</code>, <code>thmb</code>) || || || <code>-P</code>, <code>-picture</code> || picture as a .png, Cover
|  || ©grp? || CONTENTGROUP (PODCASTCATEGORY: catg) || <code>-O</code>, <code>-category</code> || category
+
| || || <code>tmpo</code> || || <code>BPM</code> || <code>-b</code>, <code>-tempo</code> || tempo (beats per minute)
|  || (thmb) || || <code>-P</code>, <code>-picture</code> || picture as a .png, Cover
+
| || || plID? || || || <code>-p</code>, <code>-playlistid</code> || playlist ID
| (''Rating'') || rtng || ITUNESADVISORY || <code>-X</code>, <code>-rating</code> || Rating (none, clean, explicit)
+
| || ||  || || || <code>-z</code>, <code>-artistid</code> || artist ID
|  || tmpo || BPM || <code>-b</code>, <code>-tempo</code> || tempo (beats per minute)
+
| || ||  || || || <code>-Z</code>, <code>-composerid</code> || composer ID
| (''UniqueID'') || cnID? || ITUNESCATALOGID (PODCASTID: egid) || <code>-I</code>, <code>-contentid</code> || content ID
+
 
|  || plID? || || <code>-p</code>, <code>-playlistid</code> || playlist ID
+
FFmpeg read MOV:
|  || || || <code>-z</code>, <code>-artistid</code> || artist ID
+
* <code>akID</code> "account_type"
| || || || <code>-Z</code>, <code>-composerid</code> || composer ID
+
* <code>apID</code> "account_id"
 +
* <code>pgap</code> "gapless_playback"
 +
* <code>purd</code> "purchase_date"
 +
* <code>©ed1</code> "edit_date"
 +
* <code>soaa</code> "sort_album_artist"
 +
* <code>soco</code> "sort_composer"
 +
* <code>sosn</code> "sort_show" 
 +
* <code>©chp</code> "chapter"  
 +
* <code>manu</code>, <code title="MOV write">©mak</code> "make"   
 +
* <code>modl</code>, <code title="MOV write">©mod</code> "model"   
 +
* <code>©enc</code> "encoder" (<code>@PRM</code> "premiere_version", <code>@PRQ</code> "quicktime_version")
 +
* <code>©hst</code> "host_computer"
 +
* <code>©req</code> "playback_requirements"
 +
* <code>©dis</code> "disclaimer"
 +
* <code>©inf</code> "comment" 
 +
* <code>©wrn</code> "warning" 
 +
* <code>©ope</code> "original_artist"
 +
* <code>©src</code> "original_source"
 +
* <code>©fmt</code> "original_format"
 +
* <code>©prf</code> "performers"
 +
* <code>FIRM</code> "firmware"
  
Kodi NFO metadata without tag field match:
+
FFmpeg 3GPP write:
* ''Country''
+
* <code>perf</code> artist
* ''TagLine'' (<code>subtitle</code>)
+
* <code>titl</code> title
* ''Trailer''
+
* <code>auth</code> author
* ''PictureURL''
+
* <code>gnre</code> genre
* ''Votes''
+
* <code>dscp</code> comment
* ''UniqueIDs''
+
* <code>albm</code> album
* ''Tags''
+
* <code>cprt</code> copyright
* ''OriginalTitle''
+
* <code>yrrc</code> date
* ''EpisodeGuide''
 
* ''Status''
 
* ''ShowLink''
 
* ''NamedSeasons''
 
 
-->
 
-->
 +
Kodi variables in parentheses are not supported at the moment, but if they are in the future, these are the most likely mappings.
  
 
== MKV tag options ==
 
== MKV tag options ==

Latest revision as of 21:05, 21 May 2020

Home icon grey.png   ▶ Video library ▶ Video file tagging
Incomplete.png INCOMPLETE:
This page or section is incomplete. Please add information or correct uncertain data which is marked with a ?
Emblem-important-yellow.png NOTICE:
This feature is currently for movies only. TV shows and music videos are not yet supported.
Emblem-important-yellow.png NOTICE:
This page describes an alternative way of adding movies to the library that is not dependent on file names or online scrapers.


Kodi v18 Leia introduces support for embedded video tags using *.mkv and *.mp4 video files. *.avi support is available since v18.x. They are similar in principle to the tags saved in audio files. Only limited support for video tags is available at this time.

1 Benefits of embedded video tags

There are multiple reasons why one would want to use this feature: Media may already contain useful metadata (the reverse however is also true - many files contain "junk" metadata, hence why the feature defaults to off). It gives one more control over the metadata than scrapers do (as scrapers may misclassify media and pull the wrong data). It does away with the need to have NFO files. Since metadata travels with the media file, there is no longer a need for potentially thousands of these smaller files and can make directory management even easier. Using ultra-high resolution artwork/cover images that looks nicer on newer HD displays. (Pretty pictures!)

1.1 How does it change/differ from the old model?

Kodi has two options for metadata import: using an online scraper or using local information, traditionally in the form of .nfo files. Local tag reading is bundled into the "Local Information" arm, as logically, metadata is still local (i.e not network-drawn) information. Thus, one can still use a combination of .nfo files and embedded information if they choose "Local Information" rather than to use a scraper.

It is important to note however that .nfo files will override embedded information. Not all of Kodi's NFO features are supported by embedded metadata yet, so many users may wish to still use the NFO method. (https://forum.kodi.tv/showthread.php?tid=326340)

1.2 Settings

Kodi settings have the option to enable or disable the reading of video file tags at Settings > Media Settings > Videos > Use video tags. The default setting is disabled.

This page assumes this setting has been enabled.

2 Folder & File Structure

The use of Video File Tags does not absolve you from using the correct Folder and File structure for Movies, TV Shows and Music Videos as detailed in the previous pages.

3 Tagging

Stop hand.png These pages are maintained by the community and should not be considered an endorsement or recommendation. *


Note: User-friendly options for adding and editing embedded metadata may be lacking for your given platform. Be prepared for challenges when going down this path.

3.1 Windows

MP3tag is a Windows-based metadata editor for many different files and tag types, including MP4 and MKV (despite what it's name may suggest). While somewhat complex, it provides very fine-grained control over tagging, and is a worthwhile asset in any media management library.

MetaX is a user-friendly tagging solution. However, it is proprietary and paid ($10). It features much the same core features as MP3tag, but adds an online search functionality to grab metadata from providers such as iTunes, Amazon and others, as well as an autotag feature. This can be useful to people with enormous media collections where the time saved manually tagging justifies the price.

3.2 Mac

  • MetaZ is a free and open source MP4 metadata lookup and editor for Mac OS.

3.3 Linux

  • mp4v2

3.4 Cross-platform

  • exiftool

3.5 A note on iTunes

Apple, in their wisdom, have created a subset of MP4 tags that are strictly speaking only meant for use with iTunes. However, most tagging software can read and write these iTunes tags. These tags are also quite useful but some will not work with Kodi. Tags include the ability to store Cast (actors), Screenwriter and Director information, as well as age restriction data such as MPAA ratings.

The important point to note here is that just because your tagging software allows you to add these does not mean they will be used by Kodi.

4 Core Tags

While there are an absolute myriad of tags that one can use, many, if not most of these are unnecessary for video files. Remember that MP4 tags have to have fields for everything - TV shows, movies, music videos, music, audiobooks, and even images! We usually do not want to populate tags related to music (such as Artist) in a movie file. As such here are some of the most critical tags for video (TV show and Movie) files.

4.1 Title

Kodi will not import a media file without a valid Title in the metadata tag. This makes it the most critical tag of all. An exception is made for MKV files which have an IMDBURL or TMDBURL metatag.

Title differs from filename - I may have a file called Blade_Runner_2049_(2017)Withalotofexcessinformation.mp4, But the title value can simply be "Blade Runner 2049". Kodi will then display "Blade Runner 2049".

Beware that many people who distribute video files do not care much for proper metadata within the file even if they are shipping proper NFO or XML files with them. Regardless, their files may still have tags, but with rubbish or spam content.

4.2 Description

This describes the movie/TV Show. A snippet from iTunes' description of Blade Runner 2049 is as follows: "Thirty years after the events of the first film, a new blade runner, LAPD Officer K (Ryan Gosling), unearths a long buried secret that has the potential to plunge what’s left of society into chaos."

Descriptions thus actually describe the character or basic plot of a movie or TV Show. These will be displayed in Kodi when the file is selected.

Best practice at this point seems to be to mirror the Long Description and Short Description, as there does not seem to be any practical distinction between the two.

When using this tag with TV Shows, every episode can be individually described according to the plot of that particular episode.

4.3 Content Type

In MP4 there should be four choices: Music, Music Video, Movie and TV Show. The choice does not seem to matter at this point as Kodi can not distinguish files based on this tag, but rather relies on the manual setting when the directory was added. It might be useful to set this properly when tagging however, as a future change to allow Kodi to distinguish these tags may prove invaluable.

4.4 Cover/Picture

For some users, the singular greatest benefit to tags is being able to set your own cover image. Don't like the standard cover? Use the Collectors Edition or Digital Download cover.

4.5 TV Show Specific Tags

There are three more tags that should be filled in for TV Shows: Show (tvsh), numeric Season (tvsn) and Episode Number (tves) and the unique Production Code (tven). At the moment these tags do not seem to be of any practical use in Kodi, but should nevertheless be filled out as this may change.

5 Supported Tags

Kodi relies on FFmpeg libraries to import MP4, MKV and AVI metadata. The documentation in the Multimedia.cx wiki is not always up to date, but is correct in general. For proper details, one needs to inspect the mov_write_****_tag() functions in the FFmpeg source code.

are the tags in this table for both mkv and mp4?
Both MP4 and MKV tags are supported, although they use fundamentally different methods of encoding metadata.
I cannot find these video related tags in mp3tag
To get to all the juicy video file related tags in mp3tag, right click on your video file and select "Extended Tags". From here one can see all the tags currently in a file. Add new ones by clicking on the Add button, selecting a Field (what tag to edit) and entering a value. The most critical one in all cases is TITLE, as it seems Kodi will not add a media file if this core tag is missing (and there is no .nfo file).
This will also allow you to add the cover artwork.
What format is this- id3, APE, Generic, MP4, other?
MP4 files use "moov" atoms embedded within the file. These are the same ones used in AAC audio files (such as m4a).
IMDBURL/TMDBURL is this one tag or two separate tags?
Two separate ones, only supported within Matroska (MKV) files currently.

5.1 MP4 tag options

For MP4 tags, Kodi reads Title, Writing Credits, Plot, Plot Outline, Year, Album, Artist and Track information if available.

Tag field mapping table
Kodi FFmpeg MP4 box / atom AVI FourCC Mp3tag mp4tags / mp4v2 CLI Description
album_artist aART ALBUMARTIST -R, -albumartist album artist
Album album ©alb (IPRD) ALBUM -A, -album album title
sort_album (album-sort) soal ALBUMSORT
Artist artist ©art, ©ART (IART) ARTIST -a, -artist artist information
artist (author) ©aut author information
sort_artist (artist-sort) soar ARTISTSORT
comment ©cmt (©des) (ICMT) COMMENT -c, -comment general comment
compilation cpil COMPILATION
WritingCredits (split at slashes) composer ©wrt COMPOSER -w, -writer composer information
copyright ©cpy (cprt) (ICOP) COPYRIGHT -C, -copyright copyright information
creation_time ENCODINGTIME
Year date ©day ICRD RELEASETIME
(Premiered) year ©day YEAR -y, -year release date
encoded_by (ITCH) ENCODEDBY -e, -encodedby name of the person or company who encoded the file
encoder ©too (©swr) (ISFT) ENCODERSETTINGS -E, -tool software used for encoding
(ProductionCode) episode_id tven TVEPISODEID -o, -episodeid TV episode ID
episode_sort tves TVEPISODE -M, -episode episode number
season_number tvsn TVSEASON -n, -season season number
Genre (split at slashes) genre ©gen, gnre (IGNR) GENRE -g, -genre / -j, -genreid genre name / ID
(Set) grouping ©grp CONTENTGROUP -G, -grouping grouping name, set
hd_video hdvd ITUNESHDVIDEO -H, -hdvideo HD flag (0 = SD, 1 = 720p, 2 = 1080p/i Full HD, 3 = 2160p UHD)
language (ILNG) LANGUAGE main/original spoken/displayed language
lyrics ©lyr UNSYNCEDLYRICS -L, -lyrics unsynchronized lyrics
media_type stik ITUNESMEDIATYPE -i, -type Media Type (TV Show, Movie, Music, Audiobook ...)
(Studio) network tvnn TVNETWORK -N, -network TV network, channel, station
(Studio) publisher PUBLISHER publisher
producer ©PRD, ©prd producer
(Director) performer ©con CONDUCTOR conductor, performer
(Director) composer ©com composer
(Director) director ©dir director
(ShowTitle) show tvsh TVSHOW -S, -show TV show
Plot synopsis ldes PODCASTDESC -m, -description short description
PlotOutline, (Overview) description desc DESCRIPTION -l, -longdesc long description
Title title ©nam INAM TITLE -s, -song song title, track name
(SortTitle) sort_name (title-sort) sonm TITLESORT
(TagLine) subtitle ©st3 () SUBTITLE -, -
Track track trkn (©trk) (IPRT) TRACK -t, -track / -T, -tracks track number / number of tracks
disc disk DISCNUMBER -d, -disk / -D, -disks disc number / number of discs
(Rating) rating rtng ITUNESADVISORY -X, -rating Rating (0 = none, 1 = clean, 2 = explicit)
(Country) location ©xyz (loci) GPS coordinates
(Trailer) () -, -
(PictureURL) () -, -
(Votes) () -, -
(UniqueIDs) () -, -
(Tags) (keywords) (keyw (©key)) () -, - tags, keywords
(OriginalTitle)
(EpisodeGuide)
(Status)
(ShowLink) URL ©url
(NamedSeasons) array
podcast pcst PODCAST -B, -podcast podcast flag (0/1)
category catg PODCASTCATEGORY -O, -category category
(UniqueID) cnID ITUNESCATALOGID -I, -contentid? content ID
(UniqueID) episode_uid egid PODCASTID -I, -contentid? content ID

Kodi variables in parentheses are not supported at the moment, but if they are in the future, these are the most likely mappings.

5.2 MKV tag options

MKV tagging currently does mostly ignore the Matroska tagging specification to fill library info. Instead, a Kodi standard NFO file can be embedded into MKV files.

  • An attachment named kodi-metadata will be scanned as an embedded .nfo file
  • An attachment named kodi-override-metadata will be scanned as a url nfo if combined with specifying IMDB/TMDB url. if alone, you get an override nfo

The only textual tags supported in MKV fields as of v18.6 are (case-insensitive) Title = title, Director = director (multiple entries may be separated by a forward slash) and Year = date_released.

5.3 AVI tag options

As of v18.6, Kodi only recognizes Title and Year variables from AVI tags.

6 Artwork

For MKV you can have embedded images. currently limited to:

  • 'small_cover.png' or 'small_cover.jpg' for thumb
  • 'cover.png' or 'cover.jpg' for poster
  • 'fanart.png' or 'fanart.jpg' for fanart

'poster' images can be embedded in MP4 files.

Return to top


Next step: Add Source & Scrape