弾幕(XML) ASS変換ツール
BilibiliなどのXML形式の弾幕(コメント)を高品質なASS字幕に変換。PotplayerやIINA、VLCなどで、重なりのないスムーズな弾幕再生を実現します。
弾幕 XML → ASS 変換ツール
Bilibili / AcFun の弾幕 XML を VLC・PotPlayer・IINA で再生できる衝突防止 ASS 字幕に変換します。
よくある問題
IINAでBilibiliの弾幕を見る方法は?
BBDownなどで取得した .xml をアップロードし、解像度とフォントを動画に合わせて変換します。生成された .ass を動画と同じ名前で同じフォルダに置けば、IINAが自動で読み込んで流れる弾幕を再現します。
変換後に弾幕のタイミングがずれるのを直すには?
p属性の先頭は動画開始からの相対秒数で時間コードではありません。元のXMLからそのまま変換すれば合います。ずれる場合はXMLを手で編集したか、弾幕と動画のバージョンが違うことが原因です。
弾幕が重なって見づらいのを直すには?
変換時にトラックベースの衝突回避を有効にします。各弾幕をレーンに割り当て、前の弾幕が画面を抜けるまで同じレーンを使わないため、高能シーンでも重ならず読みやすくなります。
mpvやPotPlayerでASS弾幕を読み込むには?
.ass を動画と同じフォルダに同名(episode01.mp4 + episode01.ass)で置けば自動読み込みされます。手動なら字幕メニューから追加、mpvはコマンドラインで --sub-file=episode01.ass も使えます。
上下に固定すべき弾幕がスクロールしてしまうのは?
Bilibiliは p[1] で位置を表し、1〜3はスクロール、4は下固定、5は上固定です。すべてをスクロール扱いする変換器は固定弾幕も流してしまいます。本ツールはモード4・5を正しい配置で固定します。
ワークフロー
弾幕(XML) ASS変換ツール とは?
BBDownやyou-getなどでBilibiliの動画を保存すると、弾幕は <d p="...">コメント本文</d> が並んだ .xml ファイルとして別に出力されます。しかしIINA・mpv・VLC・PotPlayerはこのXMLを認識できず、動画に重ねても何も表示されません。本ツールは弾幕XMLをプレイヤー共通のASS字幕トラックに変換し、手動変換で必ずつまずく2点——タイムライン(pの最初の数値は時間コードではなく「相対秒数」)と重なり(同時刻に数百件のコメントが団子状に重なる)——も同時に解消します。
弾幕(XML) ASS変換ツール の使い方
XMLを貼り付けるか .xml をアップロードします。変換前に効果を左右する3つを設定してください。①解像度——動画に合わせます(1920×1080、1280×720 など)。ASSの座標はキャンバス(PlayResX/PlayResY)に対する絶対値なので、ずれると文字が浮いたり見切れたりします。②フォントサイズ——1080pなら36、720pなら28が目安。③表示時間——8秒が読みやすく、密集時は短めに。変換後、.ass を動画と同じ名前(movie.mp4 → movie.ass)で同じフォルダに保存すると自動で読み込まれます。
使用例
入力 (Bilibili XML):
<d p="12.53,1,25,16777215,1699...">前方高能</d>
p[0]=12.53 出現秒数 p[1]=1 スクロール p[2]=25 フォント p[3]=16777215 色(白)
出力 (ASS):
[Script Info]
PlayResX: 1920
PlayResY: 1080
[Events]
Dialogue: 0,0:00:12.53,0:00:20.53,R2L,,0,0,0,,{\move(1920,64,-260,64)}前方高能
注意: ASSの色は &HBBGGRR(バイト逆順)。RGB 0xFFFFFF は FFFFFF のままですが、0xFF0000 の赤は &H0000FF になります。活用例
1. macOSのIINA / mpvで、ダウンロードしたBilibili動画を元の流れる弾幕付きで視聴する。
2. ffmpeg (-vf "ass=movie.ass") で弾幕を焼き込み、外部字幕を読めない端末でも共有できるようにする。
3. 5万件超の大規模弾幕をローカルで変換し、視聴履歴を第三者サーバーに送らない。
4. 上下固定弾幕(モード4/5)を固定のまま保持し、歌詞や空耳系の弾幕に対応する。
5. 配信のコメントを永続的で検索可能な .ass ファイルとしてアーカイブする。
よくある質問
なぜVLCやIINAでXML弾幕が表示されないのですか?
これらのプレイヤーはASS/SRT/SSAなどの字幕形式しか描画できず、BilibiliのXML弾幕構造を直接は扱えません。先にXMLをASSへ変換する必要があり、本ツールが各 <d> を正しいタイムラインと動きを持つDialogue行へ変換します。
弾幕は出るのにタイミングが全体的にずれます。なぜ?
BilibiliのXMLでは p の最初の数値が動画開始からの「相対秒数」で、HH:MM:SSの時間コードではありません。元のXMLからそのまま変換すれば合いますが、ファイルを手で編集したり別バージョンの動画に当てるとずれます。
衝突回避(重なり防止)はどう動きますか?
各スクロール弾幕を横方向のトラック(レーン)へ割り当て、文字列の長さから画面を横切る時間を計算し、前の弾幕が抜けるまで同じレーンを再利用しません。これにより密集部でも団子状に重なりません。
4K動画で弾幕が大きすぎる/画面外に出るときは?
変換時の解像度を動画に合わせ、フォントを小さくします。ASSの座標は PlayResX/PlayResY に対する相対値なので、キャンバスが1080pで動画が2160pだとプレイヤーが全体を2倍に拡大します。