2008年3月28日金曜日

m4aから3gpへのメタデータ変換

iTunesで作成したAACファイル(.m4a)のメタデータをAtomicParsleyで表示してみる。
$ ~/bin/AtomicParsley 16\ 後出し.m4a -t
Atom "©nam" contains: 後出し
Atom "©ART" contains: ケツメイシ
Atom "©wrt" contains: ケツメイシ
Atom "©alb" contains: ケツノポリス2
Atom "©gen" contains: Hip Hop/Rap
Atom "trkn" contains: 16 of 16
Atom "disk" contains: 1 of 1
Atom "©day" contains: 2002
Atom "cpil" contains: false
Atom "tmpo" contains: 0


PS3で作成した AAC ファイル(.3gp)のメタデータをAtomicParsleyで表示してみると
$ ~/bin/AtomicParsley_3gp スタート.3gp -t
User data "titl" [lang=jpn (utf16)] : スタート
User data "perf" [lang=jpn (utf16)] : ケツメイシ
User data "gnre" [lang=jpn (utf16)] : Rock
User data "albm" [lang=jpn (utf16)] : ケツノポリス5 | Track: 1
User data "yrrc" : 2007

なので'©nam'を'titl','©ART'を'perf',’©alb'を'albm','©gen'を'gnre'に書き込めばよい。

AtomicParsleyとrubyで変換スクリプトをquick hack。

#!/usr/bin/env ruby

# config
CMD_M4A = '/Users/nishio/bin/AtomicParsley'
CMD_3GP = '/Users/nishio/bin/AtomicParsley_3gp'

# convert m4a metadata to 3gp metadata
def m4a_to_3gp(file)
file = file.gsub(/"/) {|s| '\\' + s} # escape double quote
# parse .m4a atom
h = Hash.new
open("| #{CMD_M4A} \"#{file}\" -t") { |f|
while line = f.gets
line =~ /Atom "(.*)".* contains: (.*)/
h[$1] = $2.gsub(/"/) {|s| '\\' + s} # escape double quote
end
}

# put .3gp atom
h["trkn"] =~ /([0-9]*) of [0-9]*/
num = $1
args = "--3gp-title \"#{h["\302\251nam"]}\" lang=jpn --3gp-performer \"#{h["\302\251ART"]}\" lang=jpn --3gp-album \"#{h["\302\251alb"]}\" track=#{num} lang=jpn --3gp-genre \"#{h["\302\251gen"]}\" lang=jpn --3gp-year '#{h["\302\251day"]}' --overWrite"
system("#{CMD_3GP} \"#{file}\" #{args}")
end

# main begins.
file = ARGV[0]
m4a_to_3gp(file)

0 件のコメント: