この記事を三行にまとめると
XHTMLを適切に修正できればファイルの復旧はできる履歴をさかのぼって破損する前のファイルを掘り起こす方法もある
いつか後悔する時が来るかもしれないですね
Twitterでも言ったんですがMotion5という動画編集ソフトを使っていたら思わぬところでプログラミングの知識が役に立ったという話です。
それはさておき、僕は最初動画を作るにあたってKeynoteというプレゼンテーション作成用のソフトを使っていました。KeynoteはMac版のパワポと言ったようなものなんですが、動画を書き出すこともできる上にiMovieに匹敵するほどの面白いエフェクトがいろいろ使えるので、おかげで動画編集用のソフトを使いこなせない初心者の僕でも何とか動画を作ることができていました。僕のYouTubeチャンネルではUnityで簡単な脱出ゲームを作ろうというシリーズの動画がいくつか上がっていますが、それらは全てこのKeynoteで作成したものです。
でも最近になって上記でも触れたMotion5という動画編集用のソフトを購入しまして……今はそのMotion5を使って動画を作成しています。つい先日アップロードした脱出ゲームのWalkthrough動画もMotion5で作りました。
このMotion5なんですが、まだまだ使い慣れていない部分もありまして……今でも悪戦苦闘の日々を送っておるわけなんですが、こないだ、保存したファイルを再度開こうとしたらこんなアラートが出てしまいましてね。
書類”movie.motn”を開ませんでした
破損したのか何なのか、ファイルが開けなかったんですよ。一応完成まで漕ぎ着けたファイルが急に開けなくなったもんだから焦りましてね。「まさか一から作り直しかよ!?」と。
でも特に変な操作したわけではなかったので、何でいきなり開けなくなったのか全く分からなくてですね……頑張って一から作り直すこともできなくはなかったんですが、でもその前にもしかして同じような症例に頭を抱えた人がいるんじゃないかと思って試しにググってみたら、やはりいましたよ。
https://aim-artist-from29.com/wp/motion5-bug-solution/
まさに僕が直面した問題と同じ状態になっている方がいました。この方が言うにはMotion5ではたびたび起こり得る現象のようで……でも頑張れば修復も可能という希望の光が差し込んだありがたい記事でした。この場を借りてお礼申し上げます。
僕も初めて知ったんですが、Motion5で作成したファイルは内部的にはXHTMLでできているそうなんですね。この記事を読んで僕も試しにmotnファイルをテキストエディタで開いてみたんですけど、確かにXHTMLの構文がバーっと出てきました。これはプログラマ的には大変ありがたい事実です。何でかってーと、何らかの理由でファイルが破損したとしてもXHTMLを適切に修正できればファイルの復旧はできることを意味しているからです。
実際、今回の僕もXMLの構文エラーが出ている箇所を修正したらファイルが正常に開けるようになりました。生まれて初めてプログラマやってて良かったと思いました。
というわけでその時にやった修正の手順をざっくりとですが紹介したいと思います。
xmllintというコマンドを使うとXHTMLやXMLのエラーをチェックすることができるので、ターミナルを起動して以下のコマンドを実行します。
エラーだけを見たい場合は「–noout」をつけた方が良いです。xmllintはデフォルトだとファイルの中身をドバーッと出力するので、XHTMLが数千行とかある場合、これをつけとかないとエラーを見つけるのが大変です。movie.monthはエラーをチェックしたいファイル名です。ここではファイル名だけ入れていますが、状況に応じて任意のパスを入力してください。ファイルまでのパスがよく分からんって場合はFinderからターミナルにファイルをドラッグ&ドロップすればOKです。
実行すると例えばこんな感じの結果が返ってきます。
ここではファイルの3行目と3185行目にエラーがあるぞという結果が出ています。
3行目の方はDTDが定義されていないぞ的なエラーです。DTDは「童貞ダサい」の略で、つまりこのエラーは一度もそういう経験をしたことがない人を下に見てマウントを取りたがっているだけのメッセージなので無視して大丈夫です。本当は「Document Type Definition」の略です。これはXMLの構造を定義するための構文なのですが、別にこいつを定義しなくても動画の作成には影響がないので、どちらにしろここは無視しておきます。
問題は3185行目の方です。パースエラーが出ています。何か不正な文字が含まれてるとかそんな感じのエラーっぽいですね。
どんなエラーが出てくるかはともかくとして、このxmllintコマンドによって何行目にエラーが出ているかが確認できるので、テキストエディタでファイルを開いて該当箇所を修正すればファイルが正常に開くようになります。
そういう時は編集履歴をさかのぼって破損する前のファイルを掘り起こせば、最新の状態は無理ですが作業途中の状態のファイルを開くことは可能です。
Finderを開いて「ムービー → Motion Projects → Autosave Vault」とフォルダを追っていくと、中にMotion5の履歴ファイルが保存されています。この一覧の中から開ける状態のファイルを持ってくればそこから作業を再開できます。いつから構文エラーが発生していたかってのは分からないので、もしかしたらかなーりさかのぼってしまう可能性もありますが、一から作り直しになるよりはマシだと思って気持ちを切り替えやしょう。
まさかプログラマとしての知識と経験が動画作成の役に立つ日が来るとは思いませんでした。人生、いつどこで何が役に立つか分からんもんですね。まあ画像とかだって実際には0と1で構成されているテキストデータなわけだから、Base64エンコードしてその中の文字列が何を意味しているかを完璧に理解できれば画像編集ソフトを使わなくてもテキストを書き換えて画像の編集とかできるのかもしれないし、QRコードも仕組みを理解していれば目視で内容を読み取ることも可能かもしれない。編集ソフト使ったりスマホでQRコードを読む方が圧倒的に楽ですけどね。でも例えばSVGファイルなんかもテキストエディタで編集すれば色とか変えたりできますもんね。SVG画像に直接手を入れることは僕もやったことがあるんですが、シンプルな画像だったらいじるのはそこまで難しくないという印象です。SVGファイルも中身はXMLだからね。
個人的に編集履歴がひたすら溜まっていくのってあまり好きではないんですけど、でもやっぱりいざって時に履歴があると助かる部分はありますね。今回はたまたま履歴をさかのぼらなくても済んだけど、修復が無理だったら履歴から開くしかなかった。ちなみにKeynoteも過去の履歴をさかのぼれるようになっていて、こっちは実際に助けられたことがある。ファイルの破損ではないんですがすごく前に消してしまったやつを元に戻したいという状況があって、それを履歴から戻すことができた。このブログはデータベースにどんどんゴミが溜まっていくのを避けるためにWordpressの設定を変更して履歴を残さないようにしているんですが、そのせいでいつか後悔する時が来るかもしれないですね。しかしそれは今ではない。
それにしても何で今回こんなエラーが出たんだろう……正直、変な文字が使われているというエラーは出ていたけど、それっぽい文字は特に使った記憶がないのよね。普通の日本語のテキストだったし……まあ無事に直ったから今回はよしとしておきます。
最近 #Motion5 という動画編集ソフトを使っているのですが、Motionで作ったファイルは中身がXHTMLらしいので、XHTMLが書ければ何らかの理由でファイルが破損しても修復できる。人生で初めてプログラミングの知識があることに感謝したわ。
— 橘花紅月@YouTubeはじめました (@normnoiscom) October 3, 2020
前置き
YouTubeに動画を上げるようになって気がつけば一年近くが経とうとしているわけですが……いや、ごめん。一年近くと言いつつ本当はまだ9ヶ月ほどしか経ってないですが……まあ、動画を作り始めたのは去年のことなので、僕の中ではもう一年以上が経っているような感覚です。それはさておき、僕は最初動画を作るにあたってKeynoteというプレゼンテーション作成用のソフトを使っていました。KeynoteはMac版のパワポと言ったようなものなんですが、動画を書き出すこともできる上にiMovieに匹敵するほどの面白いエフェクトがいろいろ使えるので、おかげで動画編集用のソフトを使いこなせない初心者の僕でも何とか動画を作ることができていました。僕のYouTubeチャンネルではUnityで簡単な脱出ゲームを作ろうというシリーズの動画がいくつか上がっていますが、それらは全てこのKeynoteで作成したものです。
でも最近になって上記でも触れたMotion5という動画編集用のソフトを購入しまして……今はそのMotion5を使って動画を作成しています。つい先日アップロードした脱出ゲームのWalkthrough動画もMotion5で作りました。
このMotion5なんですが、まだまだ使い慣れていない部分もありまして……今でも悪戦苦闘の日々を送っておるわけなんですが、こないだ、保存したファイルを再度開こうとしたらこんなアラートが出てしまいましてね。
書類”movie.motn”を開ませんでした
破損したのか何なのか、ファイルが開けなかったんですよ。一応完成まで漕ぎ着けたファイルが急に開けなくなったもんだから焦りましてね。「まさか一から作り直しかよ!?」と。
でも特に変な操作したわけではなかったので、何でいきなり開けなくなったのか全く分からなくてですね……頑張って一から作り直すこともできなくはなかったんですが、でもその前にもしかして同じような症例に頭を抱えた人がいるんじゃないかと思って試しにググってみたら、やはりいましたよ。
https://aim-artist-from29.com/wp/motion5-bug-solution/
まさに僕が直面した問題と同じ状態になっている方がいました。この方が言うにはMotion5ではたびたび起こり得る現象のようで……でも頑張れば修復も可能という希望の光が差し込んだありがたい記事でした。この場を借りてお礼申し上げます。
僕も初めて知ったんですが、Motion5で作成したファイルは内部的にはXHTMLでできているそうなんですね。この記事を読んで僕も試しにmotnファイルをテキストエディタで開いてみたんですけど、確かにXHTMLの構文がバーっと出てきました。これはプログラマ的には大変ありがたい事実です。何でかってーと、何らかの理由でファイルが破損したとしてもXHTMLを適切に修正できればファイルの復旧はできることを意味しているからです。
実際、今回の僕もXMLの構文エラーが出ている箇所を修正したらファイルが正常に開けるようになりました。生まれて初めてプログラマやってて良かったと思いました。
というわけでその時にやった修正の手順をざっくりとですが紹介したいと思います。
エラーを探して修正する
まずファイルのどこにエラーがあるかを調べる必要があります。xmllintというコマンドを使うとXHTMLやXMLのエラーをチェックすることができるので、ターミナルを起動して以下のコマンドを実行します。
xmllint --noout --valid movie.motn
エラーだけを見たい場合は「–noout」をつけた方が良いです。xmllintはデフォルトだとファイルの中身をドバーッと出力するので、XHTMLが数千行とかある場合、これをつけとかないとエラーを見つけるのが大変です。movie.monthはエラーをチェックしたいファイル名です。ここではファイル名だけ入れていますが、状況に応じて任意のパスを入力してください。ファイルまでのパスがよく分からんって場合はFinderからターミナルにファイルをドラッグ&ドロップすればOKです。
実行すると例えばこんな感じの結果が返ってきます。
movie.motn:3: validity error : Validation failed: no DTD found !
<ozml version="5.11">
movie.motn:3185: parser error : invalid character in attribute value
ここではファイルの3行目と3185行目にエラーがあるぞという結果が出ています。
3行目の方はDTDが定義されていないぞ的なエラーです。DTDは「童貞ダサい」の略で、つまりこのエラーは一度もそういう経験をしたことがない人を下に見てマウントを取りたがっているだけのメッセージなので無視して大丈夫です。本当は「Document Type Definition」の略です。これはXMLの構造を定義するための構文なのですが、別にこいつを定義しなくても動画の作成には影響がないので、どちらにしろここは無視しておきます。
問題は3185行目の方です。パースエラーが出ています。何か不正な文字が含まれてるとかそんな感じのエラーっぽいですね。
どんなエラーが出てくるかはともかくとして、このxmllintコマンドによって何行目にエラーが出ているかが確認できるので、テキストエディタでファイルを開いて該当箇所を修正すればファイルが正常に開くようになります。
修正が難しい場合
今回は上記のような簡単なエラーしか出ていなかったので修正もそんなに難しくなかったのですが、場合によっては修正するのが極めて困難な状態になっていたり、そもそもXHTMLとかよく分からないから直接手を入れるのは不安だという場合もあると思います。そういう時は編集履歴をさかのぼって破損する前のファイルを掘り起こせば、最新の状態は無理ですが作業途中の状態のファイルを開くことは可能です。
Finderを開いて「ムービー → Motion Projects → Autosave Vault」とフォルダを追っていくと、中にMotion5の履歴ファイルが保存されています。この一覧の中から開ける状態のファイルを持ってくればそこから作業を再開できます。いつから構文エラーが発生していたかってのは分からないので、もしかしたらかなーりさかのぼってしまう可能性もありますが、一から作り直しになるよりはマシだと思って気持ちを切り替えやしょう。
まさかプログラマとしての知識と経験が動画作成の役に立つ日が来るとは思いませんでした。人生、いつどこで何が役に立つか分からんもんですね。まあ画像とかだって実際には0と1で構成されているテキストデータなわけだから、Base64エンコードしてその中の文字列が何を意味しているかを完璧に理解できれば画像編集ソフトを使わなくてもテキストを書き換えて画像の編集とかできるのかもしれないし、QRコードも仕組みを理解していれば目視で内容を読み取ることも可能かもしれない。編集ソフト使ったりスマホでQRコードを読む方が圧倒的に楽ですけどね。でも例えばSVGファイルなんかもテキストエディタで編集すれば色とか変えたりできますもんね。SVG画像に直接手を入れることは僕もやったことがあるんですが、シンプルな画像だったらいじるのはそこまで難しくないという印象です。SVGファイルも中身はXMLだからね。
個人的に編集履歴がひたすら溜まっていくのってあまり好きではないんですけど、でもやっぱりいざって時に履歴があると助かる部分はありますね。今回はたまたま履歴をさかのぼらなくても済んだけど、修復が無理だったら履歴から開くしかなかった。ちなみにKeynoteも過去の履歴をさかのぼれるようになっていて、こっちは実際に助けられたことがある。ファイルの破損ではないんですがすごく前に消してしまったやつを元に戻したいという状況があって、それを履歴から戻すことができた。このブログはデータベースにどんどんゴミが溜まっていくのを避けるためにWordpressの設定を変更して履歴を残さないようにしているんですが、そのせいでいつか後悔する時が来るかもしれないですね。しかしそれは今ではない。
それにしても何で今回こんなエラーが出たんだろう……正直、変な文字が使われているというエラーは出ていたけど、それっぽい文字は特に使った記憶がないのよね。普通の日本語のテキストだったし……まあ無事に直ったから今回はよしとしておきます。