L-SMASH Works Muxer の文字化けする原因を探ってみた
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

L-SMASH Works Muxer の文字化けする原因を探ってみた

2017-09-23 11:38
  • 1
  • 1

AviUtl で L-SMASH Works Muxer を使ってエクスポートするときに、ファイル名に日本語を使うと文字化けする原因を探ってみました。

L-SMASH Works Muxer とは MP4 を無劣化でカット編集したいときに使用するエクスポートプラグインです。
【AviUtl】動画を再圧縮無しで編集・出力する方法【無劣化】 - AviUtlの易しい使い方
http://aviutl.info/saiassyukunasi/

最初の見立てでは、L-SMASH Works は Unicode に対応していなく、日本語ではない環境でビルドされているので文字化けを起こすのではと思っていました。もしそうであれば自分の手でビルドしなおせばこの問題は解決すると思っていましたが、そうではなかったようです。
ちなみに AviUtl 本体は Unicode に対応していません。このため、日本語以外の Windows では AviUtl が文字化けを起こします。 AviUtl が Unicode に対応していないので AviUtl 用のプラグインもマルチバイト文字セットでビルドする必要があります。(Unicodeでビルドしても文字列をマルチバイト文字セットに変換する処理を入れれば一応対応が可能)
AviUtlが文字化けします - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10116617745

自分の手でビルドしても文字化けが直らなかったので、デバッガを使用してより詳細に原因を探ることにしました。


ようやく原因を見つけることができました。L-SMASH Works Muxer ではなく L-SMASH が文字化けを起こす原因を作っていたことが判明しました。(common/osdep.c, common/osdep.h)

そもそも L-SMASH および、 L-SMASH Works は Visual C++ ではなく MinGW でコンパイルする前提で作られています。 一応 L-SMASH の方は Visual C++ 用のプロジェクトファイルが付属していますが…。

L-SMASHに付属している Visual C++ 用のプロジェクトファイルを開いてプロパティを確認すると使用する文字セットが一応「マルチバイト文字セット」になっていますが、Unicode 向けの関数を使用しています。
Visual C++ 用のプロジェクトファイル(および VC や Windows 対応のためのプリプロセッサ ディレクティブ)はとりあえず作っておきましたって感じですかねぇ…(´・ω・`)

MinGW を使用した場合は文字化けするのか確かめていませんが、MinGWにも tchar.h はあるので、これを使えば今よりもスマートなコードになると思う。
このコードを記述するに至る経緯と意図を知らないのでもしかしたらそんな単純な話じゃないかもしれない。


後ほど文字化けしない L-SMASH Works Muxer をビルドする方法を記事にする予定ですが、時間がかかりそうなので、ビルドの仕方はわかるのでどのコードを修正するのか知りたい方向けの記事を作成しました。

【AviUtl】L-SMASH Works Muxer の文字化けを直すためのコード【lwmuxer.auf】
http://ch.nicovideo.jp/lunaorbit/blomaga/ar1338352


2017/10/07 追記

意図を知らないのでそんな単純な話じゃないかも知れないとこの記事を公開して数日で訂正をしましたが、どうやらその通りだったみたいです。

文字化けが発生する原因として、正しくは L-SMASH ライブラリを Unicode 対応させた際に L-SMASH ライブラリを使用する Unicode 非対応 アプリ(プラグイン)側の対応漏れだそうです。

一応「L-SMASH Works Muxer の文字化けを直すためのコード」の記事で、Unicode に対応していない AviUtl 向けの修正であると念を押しましたが、やはりその通りでした。
開発者によると、当ブロマガで公開したコードの変更の場合、Unicode に対応していないアプリから利用する分には問題ありませんが、今度は逆に Unicode なアプリから利用すると問題が発生するそうです。(L-SMASH の cli アプリ、VapourSynth 用プラグインなど)

現在 L-SMASH Works の GitHub の fix ブランチにて L-SMASH ライブラリの Unicode 対応に対する適切な対処を施したコードがコミットされています。いずれ master ブランチにマージされると思います。

master にマージされればそれを使ったビルド済みバイナリが公開されると思うので自分でビルドするのが面倒だという方はもうしばらく待った方がいいです。

修正されたコードは以下の Git になります。
https://github.com/maki-rxrz/L-SMASH-Works/tree/fix

上記の Git は https://github.com/VFR-maniac/L-SMASH-Works からフォークしたものです。

自分には L-SMASH Works の開発事情は分からないのでこれが元のコードにマージされるのか分からないですし、このコードを元にしたビルド済みバイナリが RePOPn 様で公開されるのかも分かりません。

maki 氏がフォーク元に不具合報告しているみたいです。
https://github.com/VFR-maniac/L-SMASH-Works/issues/72

2018年6月12日 追記
現在は maki 氏の修正がマージされ、またそれをもとにビルドしたバイナリが RePOPn 氏のサイトで配布されています。


広告
×
しろみちさん、はじめまして!Dunfermlineと申します。以前L-SMASHプラグインの文字化け関連の記事が投稿されていたので、興味を持っていました。今回の記事もとても興味深いですね。ありがとうございます!
11ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。