This program can be used to transform AviSynth scripts, which produce RGBA output, to BDN XML+PNG format. This in turn can be transformed into a SUP file, which can be used to master a BluRay disc with subtitles. (Doom9 thread, Doom10 thread)
Usage instructions (possibly outdated, check one of the threads above):
If you want to build it:
make
Or, if you want to build for distribution:
make dist
Prepare subtitles. You can either produce subtitles in a normal format like SRT or ASS/SSA, or produce an RGBA video beforehand.
Create an AviSynth script. If you made a regular subtitle file, you can use something like this:
video=AviSource("video.avi")
# This requires at least VSFilter 2.39
MaskSub("subtitles.ext",video.width,video.height,video.framerate,video.framecount)
AviSource("subtitles_RGBA.avi")
FlipVertical()
Run the program:
avs2bdnxml -t Undefined -l und -v 1080p -f 23.976 -b1 -o output.xml input.avs
For some programs, you have to convert the PNG files to 8bit RGBA palette. avs2bdnxml can do this for you, using the -p switch. This isn't necessary for BDSupEdit.
You get BDN XML in the following format:
<?xml version="1.0" encoding="UTF-8"?>
<BDN Version="0.93" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="BD-03-006-0093b BDN File Format.xsd">
<Description>
<Name Title="Undefined" Content=""/>
<Language Code="und"/>
<Format VideoFormat="[ 480i / 480p / 576i / 720p / 1080i /1080p ]" FrameRate="[ 23.976 / 24 / 25 / 29.97 / 50 / 59.94 ]" DropFrame="false"/>
<Events LastEventOutTC="00:00:00:00" FirstEventInTC="00:00:00:00" ContentInTC="00:00:00:00"
ContentOutTC="00:00:00:00" NumberofEvents="[ number of encoded frames ]" Type="Graphic"/>
</Description>
<Events>
<Event Forced="[ False / True ]" InTC="00:00:00:00" OutTC="00:00:00:00">
<Graphic Width="0" Height="0" X="0" Y="0">000000.png</Graphic>
</Event>
</Events>
</BDN>
Use a program like BDSupEdit or BDSup2Sub to convert the BDN XML stuff to a BD-SUP file. The rest is left as an exercise for the reader.