Fixing WebVTT Times with Python
See Python: Tips and Tricks for similar articles.Every once in a while, we need to make an edit to a video for which we already have closed captioning. If the edit affects the length of the video; for example, if we removed or added a segment to the video; then we will also need to edit the WebVTT file. Doing so manually is a pain, so I created a short Python function for handling this.
Here is the function:
from datetime import datetime, timedelta
def fix_vtt_times(vtt_input, seconds):
"""Fixes times in WebVTT by adding the passed-in seconds to all the timestamps.
Args:
vtt_input (str): The text of the WebVTT
seconds (float): The seconds to add. Use negative number to subtract.
"""
td = timedelta(seconds=seconds)
dt_format = "%H:%M:%S.%f"
vtt_output = ""
for line in vtt_input.splitlines():
if "-->" not in line:
# This line doesn't have times. Just append it as is.
vtt_output += line + "\n"
continue
start, end = line.split(" --> ")
start = start.strip()
end = end.strip()
start_time_fixed = datetime.strptime(start, dt_format) + td
end_time_fixed = datetime.strptime(end, dt_format) + td
start_time = start_time_fixed.strftime(dt_format)
end_time = end_time_fixed.strftime(dt_format)
vtt_output += f"{start_time} --> {end_time}\n"
return vtt_output
To use it, pass in the portion of the WebVTT content that you need to update and the number of seconds to add (or subtract). For example:
vtt = """00:00:46.750 --> 00:00:51.760
This is the result of launching our file in the Chrome browser.
00:00:51.760 --> 00:00:56.830
Notice that h1 renders a larger font in h2,
00:00:56.830 --> 00:01:01.420
and h2 renders a larger font than h3, and so on"""
seconds=-6.3
fixed_text = fix_vtt_times(vtt, seconds)
After running this, fixed_text
will contain:
00:00:40.450000 --> 00:00:45.460000
This is the result of launching our file in the Chrome browser.
00:00:45.460000 --> 00:00:50.530000
Notice that h1 renders a larger font in h2,
00:00:50.530000 --> 00:00:55.120000
and h2 renders a larger font than h3, and so on
Notice that all the timestamps have had 6.3 seconds subtracted from them.
Related Articles
- Fixing WebVTT Times with Python (this article)
- Using Python to Convert Images to WEBP
- Scientific Notation in Python
- Understanding Python’s __main__ variable
- Converting Leading Tabs to Spaces with Python
- pow(x, y, z) more efficient than x**y % z and other options
- A Python Model for Ping Pong Matches
- Bulk Convert Python files to IPython Notebook Files (py to ipynb conversion)
- Python’s date.strftime() slower than str(), split, unpack, and concatenate?
- Basic Python Programming Exercise: A Penny Doubled Every Day
- Bi-directional Dictionary in Python
- How to find all your Python installations on Windows (and Mac)
- Associate Python Files with IDLE
- Change Default autosave Interval in JupyterLab
- Python: isdigit() vs. isdecimal()
- Python Clocks Explained
- Python Color Constants Module
- Maximum recursion depth exceeded while calling a Python object
- When to use Static Methods in Python? Never
- Finally, a use case for finally – Python Exception Handling
- Creating an Email Decorator with Python and AWS
- Python Coding Challenge: Two People with the Same Birthday
- How to Create a Simple Simulation in Python – Numeric Data
- Collatz Conjecture in Python
- Simple Python Script for Extracting Text from an SRT File
- Python Virtual Environments with venv
- Mapping python to Python 3 on Your Mac
- How to Make IDLE the Default Editor for Python Files on Windows
- How to Do Ternary Operator Assignment in Python
- How to Convert Seconds to Years with Python
- How to Create a Python Package
- How to Read a File with Python
- How to Check the Operating System with Python
- How to Use enumerate() to Print a Numbered List in Python
- How to Repeatedly Append to a String in Python
- Checking your Sitemap for Broken Links with Python
- How to do Simultaneous Assignment in Python
- Visual Studio Code - Opening Files with Python open()
- How to Slice Strings in Python
- How Python Finds Imported Modules
- How to Merge Dictionaries in Python
- How to Index Strings in Python
- How to Create a Tuple in Python