Windows Media Player 9.0以降で使用されるプレイリストファイル(wpl形式)を、Linux等でも使用できるようにm3u形式に変換する。
Windows Media Player 9.0以降で使用されるプレイリスト(wpl形式)は、下記のような形式のXMLファイルとなっている(media要素にはsrc以外の属性が存在する場合もある)。
<smil> <head> <meta name="Generator" content="Microsoft Windows Media Player -- 9.0.0.2980"/> <author></author> <title>プレイリストのタイトル</title> </head> <body> <seq> <media src="Sample Album\01 xxxx.wma"/> <media src="Sample Album\02 yyyy.wma"/> <media src="Sample Album\03 zzzz.wma"/> </seq> </body> </smil>プレイリストのタイトル ]]>
また、m3u形式の(もっともシンプルな)フォーマットは下記のような形式のテキストファイルとなっている(単にファイル名を列挙しただけ)。
Sample Album/01 xxxx.wma
Sample Album/02 yyyy.wma
Sample Album/03 zzzz.wma
wpl形式のファイルから、media要素のsrc属性のみを取り出してファイルとして書き出せば、m3u形式のプレイリストとなる。
wpl形式のプレイリストをm3u形式に変換するPerlスクリプト。 XMLパーサ等を使用しない手抜き版、src属性の内容は正規表現で取得している。 第一引数に変換元wpl形式のプレイリストファイルのパス、第二引数に変換後(m3u形式)のプレイリストファイルのパスを指定して実行する。
#!/usr/bin/perl # # wpl2m3u.pl # # Usage: wpl2m3u.pl source.wpl dest.m3u # my $path_win = quotemeta( 'E:\\Musics\\' ); my $path_unix = '/home/santamarta/musics/'; # wpl形式のファイルを読み込む open( INPUT, "<$ARGV[0]" ) or die "couldn't open source '$ARGV[0]'"; my @lines = <INPUT>; close( INPUT ); # m3u形式のファイルを作成する open( OUTPUT, ">$ARGV[1]" ) or die "couldn't open destination '$ARGV[1]'"; foreach $line ( @lines ) { # media要素にマッチする行を取得する if ( $line =~ /^\s+\<media\ssrc\=\"([^\"]+)\".+$/ ) { my $path = $1; # パスをWindows形式からUNIX形式に変換 $path =~ s/$path_win/$path_unix/o; $path =~ s/\\/\//g; # エスケープされた文字を復元 $path =~ s/\>\;/\>/g; $path =~ s/\<\;/\</g; $path =~ s/\&apos\;/\'/g; $path =~ s/\"\;/\"/g; $path =~ s/\&\;/\&/g; print OUTPUT "$path\n"; } } close( OUTPUT );; close( INPUT ); # m3u形式のファイルを作成する open( OUTPUT, ">$ARGV[1]" ) or die "couldn't open destination '$ARGV[1]'"; foreach $line ( @lines ) { # media要素にマッチする行を取得する if ( $line =~ /^\s+\/g; $path =~ s/\<\;/\
$path_winと$path_unixは音楽ファイルのあるパスを表しているので、使用している環境にあわせて書き換えること。