読者です 読者をやめる 読者になる 読者になる

ゆーすけべー日記

はてなBlogってどーなの!?

壊れた Premiere (映像編集ソフト) のプロジェクトファイルが XML::Liberal (Perlモジュール) で直った

Perl

KC とはるみ姉さんの結婚式が31日にあるんだけど、その式や2次会で流す映像をいくつか頼まれて作っている。 映像編集ソフトは大学の頃から使ってる Premiere を使用する。で、まぁ KC、はるみ姉さんと確認とりながら作ってたんだけど、問題が発生。おそらく、いきなりブレーカーが落ちて PC が強制的にシャットダウンしたりってのが、原因だと思うんだけど、Premiere のプロジェクトファイルが急に開けなくなった。

「プロジェクトが壊れているため、開けません」

と怒られる。うわー><

premiere

今までの苦労が水の泡かよ、と思ったが、それが直った。Perl を使って。

Premiere のプロジェクトファイルというのは直接テキストエディタなどで見る限り、 XML 形式になっている模様。うんで、壊れたプロジェクトファイルを Firefox で開くと XML のパースエラーが出る。他の正常なファイルはエラーが出ない。

xml

ということは、なんとかして壊れたプロジェクトファイルを「well formed」な XML にすればいいじゃないのか!と思ったわけ。そこで活躍したのが「XML::Liberal」という miyagawa プロダクトな Perl モジュール。

Super liberal XML parser that parses broken XML

Tatsuhiko Miyagawa / XML-Liberal - search.cpan.org

つまり壊れたXMLでもパースできちゃうかもしれないという代物。 早速、以下のような捨てスクリプトを書いたら、パースできてかつ「well formed」なXMLも出力してくれた。 そして、しっかりとPremiere で読めた!

use strict;
use warnings;
use XML::Liberal;

my $parser = XML::Liberal->new('LibXML');
open my $fh, '<', 'endroll_copy.prproj';
binmode $fh;
my $doc = $parser->parse_fh($fh);
open my $out, '>', 'out.prproj';
binmode $out;
print $out $doc->toString();

すげー。あっさりいってびっくり。miyagawa++ まさか映像編集のために Perl 使うなんておもわなんだw 最近では、今回の Premiere のようにプロジェクトファイルや設定を XML で記述するケースって多いと思うので、それがぶっ壊れたら、XML::Liberal で直るかもしれませんね。 さて映像編集を再開します。