Episode: 4596 Title: Adding voice-over audio track created using text to speech on the movie subtitles Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4596/hpr4596.mp3 Transcribed: 2026-07-31 16:14:44 (official HPR transcript) --- This is Hacker Public Radio Episode 4596, for 2026-03-16 Today's show is entitled, "Adding voice-over audio track created using text to speech on the movie subtitles" The host is Ken Fallon and the duration is 00:28:09 The flag is Clean, and the license is CC-BY-SA The summary is "Ken uses piper to convert srt subtitle files into a new audio track to add to foreign language movie" Hi everybody, my name is Ken Fallon and you're listening to another episode of Hacker Public Radio. Today I'm going to use the Piper text-to-speech engine to convert subtitle files into a new audio track that you can listen to alongside a movie. So a lot of my colleagues have been recommending movies to me and I've been asking them for their recommendations and they're quite often foreign language films by definition, languages that I don't speak which makes every movie I guess a foreign language movie to somebody. The subtitles can often be distracting and particularly in a fast-paced scene you're reading the subtitles and you're missing the action that's happening on the screen or the acting that's happening on the screen. So I've thought of doing this, it's called voiceover or lecturing and if you look it up in Wikipedia it was first used in Soviet countries to read newspaper propaganda from lectors and in Polish it says in Polish lector is often used to mean off-screen reader or voiceover artist. A lector is usually a male reader who provides the Polish voiceover on foreign language programs and films where voiceover translation technique is used. This is the standard localization technique on Polish television and as an option on many DVDs full dubbing is generally reserved for children's material, links in the show notes. So to give you an idea of what I mean by that what I'll do is I'll first play you a sample from a non-copyright movie Night of the Living Dead which was released mistakenly into the public domain. So first I'll play you a sample of the movie with the original soundtrack. They ought to make the day the time changes the first day of summer. What? Well it's eight o'clock and it's still light. A lot of good the extra daylight does us. Now we've still got a three hour drive back. We're not going to be home until after midnight. Well if it really bugged you Johnny you wouldn't do it. You think I want to blow Sunday on a scene like this? You know, I figure we're either going to have to move mother out here or move the grave in the Pittsburgh. She can't make a trip like this. Oh, don't that she can. And now the same segment with the Polish voiceover. So I don't know about you. But as a native English speaker I find that difficult to follow because the voiceover track I'm trying to focus on the underlying audio but talking to my Polish friends they said they didn't have a problem with that. So if you're Polish as your native language you're listening to the Polish. So to put this to the test I wanted to try out a movie to see if that indeed was the case. I asked a Mastodon for a non-English movie that would have English subtitles available and Windigo was able to point me to Nasty Old People which is a 2009 Swedish movie released under the CC BY non-commercial share alike license. So my idea was to take each bit of the subtitled text, convert it to audio then have the generated audio play at the same time that the subtitles appear on the screen. So we can use, we use Piper text-to-speech here in HPR all the intros are done with that and we also generate SRT sub-title files for each show so I'm also familiar with those. Links to all of this stuff is in the show notes. If you don't know the format of a sub-RIP file or an SRT file it's described as part of the Matroska multimedia container format as perhaps the most basic of all subtitle formats but that doesn't make it bad makes it actually quite good. So what you've got, there are four lines to each well four different parts to each segment the first is, and each segment is split up by a blank line. So you've got numbers generally starting at one, two, three, four, five, six so subtitle 56 is subtitle 56 and then there's a new line and then there's going to be a time code so if you haven't seen those before they're hour, minutes, seconds, comma, milliseconds and then after that is the subtitle text itself which can be one or more lines and then there's a blank line indicating that's the end of that subtitle segment. So I downloaded the movie from the Internet Archive used Piper Voice to convert it each of the subtitle lines to text Piper Voice is a fast local neural text-to-speech engine that embeds eSpeakNG for feminisations and are released under the GPL V3. So once I had the audio I prepared a sample for the subtitles and I brought it over to Audacity to create a new subtitle audio track and Audacity, if you don't know is the world's most popular audio editing and recording app. It's a GPL V2 or laser. So the timing of the segments would be a problem were it not for the fact that Audacity supports SRT files as labels. I've already done a show on labels in Audacity which I need to update but if you go to File, Import and Labels then select the SRT file the subtitle track with the text of the audio will be displayed along the lines so little lines telling you exactly where all the subtitle segments needed to be lined up. So I was able to do that, create an audio track and then go into KDN Live which is KD's non-linear video editor which works on Windows Mac OS, BSD and Linux of course GPL V3 or later and Jean-Marc had an excellent article on how to add subtitles easily to KDN Live Arcadian Live and you go to Project, Subtitles Add Subtitle Track it'll import the subtitle file and then you can select the subtitle file and you can align the subtitle track with the audio file and there's screenshots of all of this in the show notes and here also you can see the text that is in the subtitle and make sure that it's aligned and then I was able to render it and I had myself a sample movie and I was able to convince myself that this in fact was something worth doing. So the script itself will be linked in the show notes of this episode but rather than going through it line by line I'll give you the basic ideas and the script is only intended as a proof of concept. I firmly hope and probably believe that FFmpeg will shortly have an option to be able to do this and I really hope it does because there are intricacies which I will get to at the end. So what my script does it first of all creates a new audio track for the subtitles and it merges this with the original soundtrack to create a new selectable audio track. So basically as you're watching the movie you've got English you've got the native language say it's Swedish in this case and then you'll have another subtitle track which might be English and that's what you can switch between the two. So you can turn this off in the same way you can turn on and off subtitles you can turn this track on and off. So the script begins by creating a length of audio silence up to where the first subtitle timestamp begins. And the subtitles from the SRT file have a timestamp that it has the beginning when the subtitle should be shown and the end when the subtitle should be shown. It converts the first segment using text-to-speech into a WAV file I think and then the segment is added to the initial silence track. So fair enough. So somebody comes on and says hello world and somebody else says hello back. Yep. So the first subtitle is hello world and then silence hello world. So then what I do is I check the total length so far to see if the audio that we've recorded is longer or shorter than the next subtitle. So somebody's response to the question. If it's shorter then I add a filler piece of silence to bring it up to the start of the second subtitle. If it's not I just play the second subtitle immediately after which means there can be a pileup. And the pileup I was very worried about but actually it turns out to be not a problem in practice because you know it's there's action or there's movement or somebody picks up a cup of tea or something and there's always a slight delay in the narrative. So that's basically how it works and we do that over and over again right up to the very end of the movie and then at the end the new subtitle speech audio track is merged back into the media as a new audio track. Now I included some links in the show notes so you can see what the subtitle looks like on the screen and with screenshots from the movie as well and the time code paused so that you can see that it lines up at a particular time. So let's listen to a segment of this Swedish movie. First the original. and now the same segment but with the voiceover track as produced by my script. It will be two years before it's this big. But don't you bother by then I'll be long gone. It was just a question. Good morning. So that's the script and it works pretty well. I've done quite a lot of movies now and I've learned a lot of lessons over time. The script itself sometimes bails at the creation of the audio track and merging it back into the main file but I'll go through workarounds for that as well. The first thing though that you should do is the preparation of the subtitle file because that's going to be the basis of the voice that you're listening to and it should be good quality so that it matches when the audio actors speak. And some subtitle files are a lot better than others. Some go to for example if somebody's rhyming in the native language they will try and rhyme in English as well. So sometimes there will be a song and the subtitles will include the subtitles of the song. So stuff like that it's good to know. Sometimes they will have if there is a banner up and that's important to the plot and they're referring to the banner throughout the movie but they don't tell you what's on the banner then that can be an issue. So you know basically the standard stuff when getting a subtitle file but you also need to make sure it's aligned correctly. you should also make sure that the spelling is correct because the source of the subtitle files the best place that you can get them is from the DVDs themselves. There are several methods of putting subtitles on. The first is like with a text based stream in the MPEG and that's perfect because this is exactly what they wanted you to experience and sometimes they'll even have the you know floor creaks that sort of stuff track so you can choose which one you would prefer to hear and that's easy peasy lemon squeezy to get out. The other time the other type is they where the video the subtitles themselves are bitmap images so instead of hello world it's a picture of the words hello world and then that's run through optical character recognition and sometimes that can be very bad. So for example one of the movies had for every letters O capital letter O it had the letter the number zero so you would hear I L0 you very and I also L0 you you know that sort of stuff then there can also be HTML characters in there so you will be listening to you can put emphasis onto subtitles or perhaps they want to show that the person's in another room talking and they'll put it in italics so you're listening to a few hours of less than forward slash I greater than forward slash I another one was mixing up the capital letter I with the letter L so L I'm from Lindia so a lot of that can get very tedious so spell checking so spell checking your files is also a good thing to do but if they if you can get the subtitle files from the DVD directly you can use ffmpeg dash y to answer yes or overwrite dash height banner space dash log level space er so it's a lot less for both and then dash text underscore format space text dash I and that's the input movie and then the output can be the output file with the SRT extension one top tip is if you can keep the subtitle names the same as the movie name so if it's movie dot mp4 then keep your subtitles movie dot SRT and that by default a lot of players will try and play that same subtitle they will look and see if there's a subtitle and automatically use that just in general and by the way this isn't a replacement for the subtitles I sometimes turn on the subtitles anyway or not but at least I have the choice of doing it where to get them if you don't have them there is a large repository of subtitles at opensubtitles.org and you'll need an account probably so you select the language and the top tip is to pick the one with the highest rating and then you're kind of trying to pick it if you have a DVD version you look for ones from the DVD if you've got a Blu-ray version you look for ones from the Blu-ray version one way to once you have your subtitle files one way to check them is using the mpv media player which is based on mplayer and mplayer2 and it supports a wide variety of formats audios video codecs etc it's released under the gplv2 plus parts are under the lgplv2.1 plus and optional parts are under the gplv3 and links to that in the show notes as I said if you have the srt file with the same movie name then it'll play it automatically otherwise you can add the dash dash subs dash files equal option as well all of this is in the show notes extensive extensive show notes for this episode so you can scrub through left and right page up page down and you can toggle the subtitles using the j key so if you you can download a series of subtitles and then use the j to jump in between them top tip is search for people saying the word okay which tends to be a common word in many languages and then you will know if your subtitles are in sync or out of sync you don't usually have a problem with subtitles being in sync if you can get them from text from the dvd itself but if you're downloading them from the internet they can be out of sync very easily where they don't match up and it's usually usually the movie itself is correct but the start offset is wrong because maybe they're you're getting it from a different region so the person who the dvd in the netherlands is different to the dvd in ireland because the local warnings are different at the beginning but what you can do is adjust them usually then when the movie starts the subtitles are correct from then on so it's just the original offset that's wrong there's this really cool program called ff subsync which is a language agnostic automatic synchronization of subtitles with video files so the subtitles are aligned to the correct starting point within the video it's released under an MIT license you pip install it ffsubsync and then you use command ffs video.mb3 space dash i unsynchronized dot srt space dash o synchronized dot srt and what that does is it looks to the first speaking piece of tech of audio in the file and tries to match that up what I've noticed helps that works very well so long as the first piece of speech is actually coming from the movie and not from a government warning about ripping DVDs or not or a warning about smoking or tobacco or something so you can use a really cool tool called Lossless Cut Lossless Cut aims to be the ultimate cross-platform ffmpeg GUI for extremely fast and lossless operation on video, audio, subtitles and other related files gpl dash 2.0 license brilliant little tool use this all the time couldn't be simpler you just drag in the drop in the movie and you go start point end point press delete and away she goes outputs it without transcoding or anything just dumps it so it'll allow you to quickly remove additional trailer ads at the beginning so that ff subsync will have a better chance working if they're all trimmed away okay so if that fails to match up the subtitles you can use the mpv keyboard shortcuts to move to the first speech segment and then press ctrl shift left or ctrl shift right to adjust the subtitle delay so that the next and the previous subtitles are displayed so what this will do is if you're watching subtitles with mpv and somebody says hello you hear them speak and then a duration later the text hello comes up on the screen you can just rewind to when the person starts saying hello and then press ctrl shift right so that they match up now the thing to do then is scrub through the scrub means fast forwarding or moving forward in the movie towards the end and make sure that the sync is still there within your subtitle files so that when they say goodbye at the end that whatever the word is the subtitle matches the timing of the dialogue that's going on because sometimes there are different versions of the movies or there are cut scenes or they're just subtitles that are very poor and are where somebody has the first part of the movie done and the second part is just quotations from I don't know what message they're trying to send so check your subtitles the whole way through make sure they match but if they are in sync and they're just off by an offset of say in my example I'm using 148.416 is the millisecond offset which turns out to be minus 148.146 seconds you can use a command line tool called srt offset which says it is a simple command line tool to offset srt subtitle files this allows you to adjust the timing of subtitle srt files which can be useful when the subtitles are out of sync with videos and that's an MIT licensed and the command is srt dash offset space dash i input dot srt space dash offset the word space dash and the amount in my case minus 148.416 space dash o output dot srt so that's a lot about subtitle files my advice is spend a lot of time on this one if you're going to be watching a three or four hour movie there's nothing more annoying than this part wrong so I've been known to watch minutes of a movie found something annoying about it go back fix the srt files and reimport them again it's it's like that and sometimes it's it's actually just better to get a copy you know if you're having no luck with this DVD copy try and get another copy from somewhere else and fortunately I've been fortunate enough to have friends who have had good copies most of the time sometimes my script will create a mix down track but has a problem adding it back into the movie as a separate audio track so to get around that I use avi demux which is a free video editor designed for simple cutting filtering and encoding tasks it's released under the gpl v2 and if you go file open and select the movie then you go to audio track select audio track several will appear at least one and then you tick on the next available track in my case track then you click from the drop down menu add audio track and then you pick the mixed audio in my case it's dot tilde nasty old people underscore mixed mb3 and you add that back in then save the file and you'll have a saved track that will have the audio so that's it and in conclusion I'm finding it much easier to watch a movie with a voice over track than I thought the idea of somebody talking in my ear I would have thought would have been annoying particularly when I heard it in Polish initially but at some point you don't even notice it after a while if you're conscious about it yes it can be irritating but sometimes if you focus on the dialogue that's going on on the screen you just see the actors talking in their language and you know what they're saying so I find it a really good option for some movies particularly in if there's a dance or dialogue scene and the talking is fast say a rap scene where they're rapping over and back at each other I might turn it off and focus on the subtitles in that case but you have the options it's with MPV it's shift octatorp shift hashed sign shift three and you'll get it and you can switch and toggle subtitles using the J key so that's it hope you found this interesting there was quite a lot of tools here for messing around with video audio and subtitles which I think over a year I've gathered up and found all of them super useful particularly audacity caden live it's amazing that it can do that FFmpeg fantastic tool no doubt this will be added I know there are some pull requests for doing automatic translations they're better than not so like doing whisper on it and then if you point whisper which we used to do the translations in HPR you will get 80% of the way but with a movie you're going to be losing a lot of the nuance and I find that if you can get the original subtitles or subtitles from somebody who's very good at doing subtitles you'll get a lot more nuance of the language and the movie in fact will be a lot more enjoyable okay that's it hope you use this or you know if somebody comes on with a better tool please record a show on that because I would much prefer to be using somebody's tool than having to maintain my own but it has opened up a wide variety of movies for me now that I would normally not even bother watching or just too intense to watch and I can focus on the actors and actresses doing very good jobs okay and with that I'll probably give you some of the recommendations for movies that I've been watching lately and at some point if you actually have recommendations for your region movies from your region that say top three movies that everybody knows in your region that you would say would be representative of must watch movies feel free to record a show about that here on Hacker Public Radio perhaps it might be tomorrow's episode so tune in tomorrow for another exciting episode of Hacker Public Radio You have been listening to the Hacker Public Radio podcast, at hackerpublicradio.org. Today's show was contributed by a HPR listener like yourself. If you ever thought of recording a podcast, then visit the HPR site to find out how easy it really is. Hosting for HPR has been kindly provided by anhonesthost.com, the Internet Archive, rsync.net, and the HPR Community Content Delivery Network. Unless otherwise stated, today's show is released under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.