Skip to main content
Eleventy Base Blog v9

Downloading FMA:B Dubtitles

I'm trying to watch Fullmetal Alchemist: Brotherhood with a friend. Due to the way we watch TV remotely together (without headphones), we try to keep our TVs turned down, and despite this there is quite a bit of noise bleed (I can hear his TV coming through my phone, and I assume he can hear mine). It makes it hard to hear, so I'd like to turn on subtitles.

The problem, however, is that we want to watch the dub of the anime, and the subtitles were written to be watched with the Japanese audio (they do not even closely match the localized English dialogue).

My dream is to be able to watch the show, with the dubbed English voice acting, and then have subtitles which match the dub (sometimes called dubtitles) visible as well.

The problem is that apparently nobody cares about dubtitles. I did a few Google searches and all of the Reddit questions about this are replied to derisively ("why do you want subtitles if they're speaking in English"? Because I CAN'T HEAR, OBVIOUSLY).

I happen to know that Crunchyroll offers a dub of Fullmetal Alchemist: Brotherhood, and their dubs come with 'closed captioning' which includes subtitles matching the dub as it is spoken in English. I am a paying customer for Crunchyroll but I don't actually want to watch it there. I guess I want to prove that my Jellyfin server can be just as good of an experience? There's also the fact that the closed captioning seems to break every time we finish an episode.

I had a bit of a breakthrough today: I opened my 'network' tab in Firefox's Developer Tools, clicked on episode 1 of Fullmetal Alchemist: Brotherhood with the closed captioning enabled, and then filtered the network requests for 'vtt'. I found exactly one API request which matched. I copied it as a Powershell expression and am pasting it here for posterity:

	Invoke-WebRequest -OutFile E05.vtt -UseBasicParsing -Uri "https://v.vrv.co/evs3/73b7a79663826a2c15eab7106aae19d9/assets/n27yss80xy2tdjz_776.txt/sub-f1.vtt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMzLzczYjdhNzk2NjM4MjZhMmMxNWVhYjcxMDZhYWUxOWQ5L2Fzc2V0cy9uMjd5c3M4MHh5MnRkanpfNzc2LnR4dC9zdWItZjEudnR0IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjc3NTU4NzIxfX19XX0_&Signature=kSZ92l2GOZpl59LsipyxAxGUfVbhIjk3c578FQgYk4b~ms8fCeB9hY3~4UposfIrb1U8-6o6Fh~NthVhXsgE5ymR3ABZbMgFIOPUAy2zSnOfc24adjIwVSYs4ArSSCiCe1CNSpJRwJN9UV9OkCk~cw5zrfMCHzUzS31vSTC2ZlOKPXD29xpcKY6efHI~1Ww1iX9WDoDf61hwuig0JaHL-dEIavbdXHWhrY3p7zfOUF0M0DNhrfLMFcn6goGfKWn1HUexGh74uQDjv8gU-jnv9BaWxvU4T441LzeDtc2-j0KzaL7ZF1G7Dj7NG9vcy0hGKJ9Xt5Qu5uZ5ndMX6vjoVg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA"

Sadly, it looks like the request is sent to some sort of CDN or media bucket, and the path is not clearly related to the content (who knows? Maybe f36509cd02d18628d24f62d51b632f85 is an internal identifier which represents Fullmetal Alchemist: Brotherhood?), so it'll be hard or maybe impossible for me to write a script to downlod all 60 something subtitle files automatically. That might be okay? We usually only watch 3 episodes at a time together.

Anyways, the file that is downloaded as a result of this looks something like this:

	WEBVTT

	STYLE
	::cue(Default) {
	color: #ffffffff;
	font-family: "Arial", sans-serif;
	font-size: 020px;
	text-shadow: #000000ff -2px 0px 2px, #000000ff 0px 2px 2px, #000000ff 0px -2px 2px, #000000ff 2px 0px 2px;
	background-color: #00000000;
	}

	c0000000
	00:00:10.900 --> 00:00:13.940  size:040% line:12 align:center
	<Default><b>[Roy] The Freezing Alchemist?
	Really. He's here?</b></Default>

	c0000001
	00:00:13.940 --> 00:00:15.610  size:040% line:12 align:center
	<Default><b>[Bradley] We have information
	that he managed to slip</b></Default>

Interesting. So this 'WEBVTT' format contains a CSS-like style manifest, and then the text (with some styling, I guess)? which should appear at certain times in the video. Makes sense.

However, I tried to add this file to Jellyfin, and though the file does show up, it doesn't appear to show anything when it is selected as the subtitle track to use. I did some googling and it looks like VTT and MKV are supported together by Jellyfin, so this is unexpected..

I tried adding the .vtt file to VLC Player, to see if watching locally would work, and the subtitles do show up, but they are a light blue color, very small, and appear near the left center of the screen.

I already have ffmpeg installed on this computer for yt-dlp purposes.. it sounds like there is a way to use ffmpeg to convert .vtt files to .srt files. I tried a command like this:

    .\ffmpeg.exe -i sub-f1.vtt -c:s subrip E01.srt

Which resulted in..

    Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)

Indeed, the output file E01.srt was empty. I deleted it and decided to try something else.

There is a GitHub repo which I discovered, containing an npm package called vtt-to-srt which promises to do what I need. I installed it with npm install -g vtt-to-srt and tried running it:

    vtt-to-srt /\sub-f1.srt E01.srt

That appears to have done it. Now, the E01.srt file looks something like this:

	c0000000
	00:00:10,900 --> 00:00:13,940  size:040% line:12 align:center
	[Roy] The Freezing Alchemist?
	Really. He's here?</Default>
	c0000001
	00:00:13,940 --> 00:00:15,610  size:040% line:12 align:center
	[Bradley] We have information
	that he managed to slip</Default>
	c0000002

I have no perspective or context but this.. looks correct...? Unfortunately, adding the produced E01.srt file to VLC Player when playing episode 1 results in no subtitles being shown.

Geez! I can't catch a break! I'll try to revisit this later.

Update: 2023-02-25

Woohoo! So, I don't know why I can't convert the files with ffmpeg.exe, but Subtitle Edit does the trick! Using this command:

    SubtitleEdit /convert E02.vtt srt

We get a file that works in VLC and Jellyfin! Woohoo!

So, I sat down, ready to copy and paste a bunch of .VTT file URLs, script their download and then eventually conversion and upload to Jellyfin, when I noticed that I wasn't seeing a .VTT file for Episode 6. It turns out that Crunchyroll is missing subtitles for episode 6. And 8. And 12. And so on.

What a disappointment. I guess Crunchyroll or VRV (after all, the hostname that the VTT files come from is VRV) must have had to commission someone to do the subtitles for this dub? I will say that the quality is not exactly what I would call "professional" (the subtitle editor chose to include closed captioning for the train that appears by writing "choo choo", which, to me, exhibits a sense of humor that I would have expected from a fan translation).