'How can I automate the subtitle adding process in FFMPEG?
The situation is, that I have 10 MP4 videos and a folder for each of them that has the same name as its video. In each of folders there are around 30 SRT files I need to add. I would like to automate this. I mean a script that would add each SRT file to the video and add the correct handler for the subtitles, so that the subtitle would appear as "English" instead of "Subtitle #12" in a movie player. I made a python script; it's far from perfect and it does not add the handlers correctly.
The name of each SRT file is something like "20_Hebrew.srt"
import os
file_dir = r"Path/to/my/files"
sub_dir = file_dir + "/Subs"
def add_sub(file, file_name):
cmd = f"ffmpeg -i '{file}' "
sub_list = []
no_extension = file_name.replace(".mp4", "")
for sub_name in os.listdir(sub_dir + f"/{no_extension}"):
s = os.path.join(sub_dir + f"/{no_extension}", sub_name)
if os.path.isfile(s):
cmd += f"-i '{s}' "
sub_list.append(s)
cmd += "-map 0:v -map 0:a "
for i, v in enumerate(sub_list):
cmd += f"-map {i+1} "
cmd += "-c:v copy -c:a copy "
for i, v in enumerate(sub_list):
sub_lang = v.replace(".srt", "")
index = sub_lang.index(f"/Subs/")
sub_lang = sub_lang[index:]
index = sub_lang.index("_")
sub_lang = sub_lang[index+1:]
cmd += f"-c:s:{i} mov_text -metadata:s:s:{i} language='{sub_lang}' -metadata:s:s:{i} handler='{sub_lang}' "
cmd += f"'{file}_OUTP.mp4'"
os.system(cmd)
for file_name in os.listdir(file_dir):
f = os.path.join(file_dir, file_name)
if os.path.isfile(f):
add_sub(f, file_name)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
