{"id":66,"date":"2013-11-24T23:26:06","date_gmt":"2013-11-25T04:26:06","guid":{"rendered":"http:\/\/dogphilosophy.net\/?page_id=66"},"modified":"2013-11-26T21:41:00","modified_gmt":"2013-11-27T02:41:00","slug":"id3v2-3-mp3-to-vorbiscomment-opus-ogg-flac-conversions","status":"publish","type":"page","link":"https:\/\/dogphilosophy.net\/?page_id=66","title":{"rendered":"id3v2.3 (mp3) to vorbiscomment (opus, ogg, flac) conversions"},"content":{"rendered":"<h1>Recommended Equivalents between vorbiscomment tags and id3v2.3 tags<\/h1>\n<p>Consider this a &#8220;living document&#8221; &#8211; I&#8217;ll be adding to it as I go along. You&#8217;re welcome to comment below if you&#8217;re wondering about other tags&#8217; equivalents or believe I&#8217;m wrong about something here (HERESY!)<\/p>\n<p><b>Some general notes\/reminders:<\/b><\/p>\n<ul>\n<li><b>I have no authority here<\/b>: Until I am properly installed as Emperor of Online Audio, this list is not an official standard but rather my own suggestions on what I think is correct. I will update this list if my mind is ever changed on any of these opinions (quite possible)<\/li>\n<li>Vorbiscomment tags may be used multiple times in a file, while generally ID3v2.3 tags may only appear once. For example, no matter how many &#8220;performers&#8221; there are in a track, there can still only be one TPE1 frame. If you have a duet with Paul Simon and Miley Cyrus, the mp3 version should have one TPE1 frame that says &#8220;Paul Simon\/Miley Cyrus&#8221;, while the opus\/ogg\/flac\/speex files should have both an &#8220;artist=Paul Simon&#8221; tag <em>and<\/em> an &#8220;artist=Miley Cyrus&#8221; tag.<\/li>\n<li>When using ID3 TXXX frames to store vorbiscomment tags, my recommendation is to set the frame&#8217;s description to the tag name, then place every instance of that tag on its own line in the TXXX frame&#8217;s contents (including the &#8220;[tag name]=&#8221; part, on the assumption that it&#8217;ll make parsing the ID3-stored vorbiscomments a little easier. I may change my mind on this.)<\/li>\n<style>\ntable { border: solid; }\n  colgroup, tbody { border: solid medium; }\n  td { border: solid thin; }\n<\/style>\n<table>\n<tr>\n<td><b>Vorbiscomment tag<\/b><\/td>\n<td><b>ID3v2.3 Frame<\/b><\/td>\n<\/tr>\n<tr>\n<td>title<\/td>\n<td>TIT2<\/td>\n<\/tr>\n<tr>\n<td>version<\/td>\n<td>TIT3<\/td>\n<\/tr>\n<tr>\n<td>artist<\/td>\n<td>TPE1 (&#8220;Lead artist(s)\/Lead performer(s)\/Soloist(s)\/Performing group&#8221;)<br \/>TOPE<span style=\"font-size:x-small\"><sub>[1]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>album<\/td>\n<td>TALB<\/td>\n<\/tr>\n<tr>\n<td>genre<\/td>\n<td>TCON<span style=\"font-size:x-small\"><sub>[2]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>tracknumber<\/td>\n<td>TRCK<span style=\"font-size:x-small\"><sub>[3]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>performer<\/td>\n<td>TPE1<span style=\"font-size:x-small\"><sub>[1]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>copyright<\/td>\n<td>TCOP<span style=\"font-size:x-small\"><sub>[4]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>license<\/td>\n<td>USER<br \/>WCOP<br \/>TCOP<span style=\"font-size:x-small\"><sub>[5]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>organization<\/td>\n<td>TPUB<br \/>TOWN<br \/>WOAR<br \/>etc.<span style=\"font-size:x-small\"><sub>[6]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>description<\/td>\n<td>COMM<\/td>\n<\/tr>\n<tr>\n<td>date<\/td>\n<td>TYER + TDAT &#8211; &#8220;-&#8220;<span style=\"font-size:x-small\"><sub>[7]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>location<\/td>\n<td>TXXX:location<sub>[8]<\/sub><\/td>\n<\/tr>\n<tr>\n<td>contact<\/td>\n<td>WOAF<br \/>TXXX:contact<sub>[9]<\/sub><\/td>\n<\/tr>\n<tr>\n<td>ISRC<\/td>\n<td>TSRC<\/td>\n<\/tr>\n<tr>\n<td>metadata_block_picture<br \/>(attached picture)<\/td>\n<td>APIC<span style=\"font-size:x-small\"><sub>[10]<\/sub><\/span><\/td>\n<\/tr>\n<tr>\n<td>geo_location<\/td>\n<td>TXXX:geo_location[11]<\/td>\n<\/tr>\n<tr>\n<\/table>\n<\/p>\n<p><span style=\"font-size:x-small\">[1]<\/span> Vorbiscomments specifies &#8220;artist&#8221; and &#8220;performer&#8221;, the latter for when the person you&#8217;re hearing isn&#8217;t the &#8220;artist&#8221; who made the original work (i.e. the &#8220;artist&#8221; will usually stay unchanged, and &#8220;performer&#8221; would be filled in if it&#8217;s different from the &#8220;artist&#8221;). ID3v2.3 does this a bit backwards: If the &#8220;artist&#8221; IS the &#8220;performer&#8221;, just use &#8220;TPE1&#8221;. If the &#8220;artist&#8221; is NOT the &#8220;performer&#8221;, put &#8220;artist&#8221; in &#8220;TOPE&#8221; and the &#8220;performer&#8221; in &#8220;TPE1&#8221;.<\/p>\n<p><span style=\"font-size:x-small\">[2]<\/span> The ID3 specifications still recommend just putting a number in here, taken from the <a href=\"http:\/\/eyed3.nicfit.net\/plugins\/genres_plugin.html\" target=\"_New\">oddly specific list of 148 or so ID3v1 Genre numbers<\/a> (note: only the first 80 are &#8220;official&#8221;, the rest are a &#8220;de-facto standard&#8221; defined by WinAmp). The TCON frame IS a text frame, though, so a normal text &#8220;genre&#8221; description of any kind is &#8220;valid&#8221; here. The vorbiscomment &#8220;genre&#8221; tag contents should be directly transferrable as a result.<\/p>\n<p><span style=\"font-size:x-small\">[3]<\/span> The ID3 specification allows an optional &#8220;\/(total number of tracks)&#8221; suffix, i.e. if this is the third track on an album containing 10 tracks, ID3v2.3 documents the use of either just &#8220;3&#8221; or &#8220;3\/10&#8221;. This latter usage is NOT documented (as of 2013-11-26) in the vorbiscomment recommendations, <em>but<\/em> it <a href=\"http:\/\/git.videolan.org\/?p=vlc.git;a=commit;h=6283a220d45b768f569903fd16e966d50aa66187\" target=\"_New\">it DOES appear to be in use in some places<\/a>.<\/p>\n<p><span style=\"font-size:x-small\">[4]<\/span> ID3v2.3 insists this frame&#8217;s text &#8220;must begin with a year and a space character (making five characters)&#8221;. The vorbiscomment &#8220;copyright&#8221; tag requires no such fussiness.<\/p>\n<p><span style=\"font-size:x-small\">[5]<\/span> The most direct equivalent is the ID3v2.3 USER frame, but if the vorbiscomment &#8220;license&#8221; tag contents is a URL, the WCOP frame is for links to websites with copyright\/terms-of-use information.<\/p>\n<p><span style=\"font-size:x-small\">[6]<\/span> ID3v2.3 doesn&#8217;t seem to have a direct equivalent here, either. The closest equivalent is probably &#8220;publisher&#8221; frame (TPUB). &#8220;File owner\/licensee&#8221; (TOWN) may also be appropriate. If the vorbiscomment &#8220;organization&#8221; is a URL, WOAR (if the &#8220;organization&#8221; is the band\/performing group\/etc.), WPUB (if it&#8217;s the website of the &#8220;publisher&#8221;), or possibly just &#8220;WOAF&#8221; (&#8220;Official audio file web page&#8221;) linking to the &#8220;organization&#8221; web site.<\/p>\n<p><span style=\"font-size:x-small\">[7]<\/span> Vorbiscomment dates use the ISO8601 standard &#8220;YYYY-MM-DD&#8221; format. ID3v2.3 has a &#8220;year&#8221; (TYER) frame (which &#8220;must be four characters&#8221;), left over from ID3v1 apparently, and a &#8220;date&#8221; (TDAT) frame (which ALSO &#8220;must be four characters&#8221;) in the reverse DDMM format (without any separators). Ugh.<br \/>ID3v2.<b>4<\/b> replaces this with several different date frames (TDEN,TDOR,TDRC,TDRL,TDTG) that DO use ISO8601 standard date format&#8230;but ID3v2.4 support is still not very widespread nearly a decade and a half after its publication&#8230;<\/p>\n<p><span style=\"font-size:x-small\">[8]<\/span>There seems to be no &#8220;location of recording&#8221; frame for ID3v2.3 at all. It&#8217;s probably easiest to just use the &#8220;user-defined text&#8221; (TXXX) frame with the description of &#8220;location&#8221;, and copy the whole vorbiscomment location tag into the field.<\/p>\n<p><span style=\"font-size:x-small\">[9]<\/span>There&#8217;s no single ID3v2.3 equivalent here. One of the <a href=\"http:\/\/id3.org\/id3v2.3.0#URL_link_frames\" target=\"_New\">W??? frames<\/a> is probably best, or a combination of them. Alternatively, just dump the vorbiscomment tag into a TXXX frame with the description &#8220;contact&#8221;.<\/p>\n<p><span style=\"font-size:x-small\">[10]<\/span> once you base64-decode the contents of the metadata_block_picture tag, you get a <a href=\"https:\/\/xiph.org\/flac\/format.html#metadata_block_picture\" target=\"_New\">flac attached picture data structure<\/a>, which has very similar information to the ID3v2.3 <a href=\"http:\/\/id3.org\/id3v2.3.0#Attached_picture\" target=\"_New\">APIC frame<\/a>, but you can&#8217;t directly extract the data from one and put it directly into the other without some rearrangement. The &#8220;picture type&#8221; number codes are the same between metadata_block_picture and APIC, as is the usage of the mime-type, &#8220;picture description&#8221; text, and the preference for PNG or JPG images, though.<\/p>\n<p><span style=\"font-size:x-small\">[11]<\/span> Like I said above, ID3 doesn&#8217;t seem to care about where anything was, physically. The best approach is to use the TXXX frame with the description &#8220;geo_location&#8221;, and each location tag on its own line in the text contents of the TXXX frame.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recommended Equivalents between vorbiscomment tags and id3v2.3 tags Consider this a &#8220;living document&#8221; &#8211; I&#8217;ll be adding to it as I go along. You&#8217;re welcome to comment below if you&#8217;re wondering about other tags&#8217; equivalents or believe I&#8217;m wrong about something here (HERESY!) Some general notes\/reminders: I have no authority here: Until I am properly [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/pages\/66"}],"collection":[{"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":3,"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/pages\/66\/revisions"}],"predecessor-version":[{"id":70,"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=\/wp\/v2\/pages\/66\/revisions\/70"}],"wp:attachment":[{"href":"https:\/\/dogphilosophy.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}