FFMPEG Webvtt m3u8下载成单个vtt文件,忽略 "X-TIMESTAMP-MAP=MPEGTS="(时间戳同步问题)

标签 ffmpeg timestamp synchronization m3u8 webvtt

我想下载一个视频的字幕,它已经为字幕分离了 m3u8 文件:
m3u8 格式的 webvtt 源 : https://sdn-global-streaming-cache.3qsdn.com/9378/files/19/05/1199332/Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes.ism/Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000.m3u8
好像:

#EXTM3U
#EXT-X-VERSION:4
## Created with Unified Streaming Platform(version=1.9.5)
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:989
#USP-X-TIMESTAMP-MAP:MPEGTS=900000,LOCAL=1970-01-01T00:00:00Z
#EXTINF:24.72, no desc
Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000-1.webvtt
#EXTINF:2.56, no desc
Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000-13.webvtt
#EXTINF:50.88, no desc
Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000-14.webvtt
#EXTINF:3.079, no desc
Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000-40.webvtt
#EXTINF:60.401, no desc
....
然后使用命令将多个webvtts下载到一个vtt文件“EN.vtt”中:
ffmpeg -i  "https://sdn-global-streaming-cache.3qsdn.com/9378/files/19/05/1199332/Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes.ism/Dqt6jZBkvX2nLyY4CGhxmpK89PbQRFV7-drm-aes-textstream_deu=1000.m3u8"  "DE.vtt"
在输出“DE.vtt”中,来自每个 webvtt 文件(m3u8 中的 webvtt)的 X-TIMESTAMP-MAP=MPEGTS:xxxxxx,LOCAL:00:00:00.000 被忽略。
这样时间同步就被打破了,每个Segment的开始时间总是从00:00:00开始,看起来像:
WEBVTT

00:00.000 --> 00:02.560
So viel Macht.

00:00.000 --> 00:03.079
Was er sagte.

00:00.000 --> 00:04.680
oder
die Schönheit

00:00.000 --> 00:01.440
Er sagte immer:

00:00.000 --> 00:03.840
Auf seinen Klang 

00:00.000 --> 00:07.519
Seine Paranoia.
ffmpeg 是否支持将相对时间戳转换为绝对时间戳?
或者使用其他方法下载完美的 webvvt 文件?

最佳答案

我只能找到这个从未合并到 FFmpeg 中的非常古老的补丁:https://patchwork.ffmpeg.org/project/ffmpeg/patch/20170205194344.333-1-franklinphillips@gmx.com/
我对其进行了一点编辑,并将其应用于当前的 ffmpeg 源代码,重新编译并成功转换了一些通过 HLS 提供的 webVTT 字幕,使用 X-TIMESTAMP-MAP标签。
这是我最后使用的补丁:https://gist.github.com/SebiderSushi/bdf8d46d5501f7085d0b27d8a19eb12c
编辑:
FFmpeg 问题跟踪器上有一张关于此问题的公开票:https://trac.ffmpeg.org/ticket/8825

关于FFMPEG Webvtt m3u8下载成单个vtt文件,忽略 "X-TIMESTAMP-MAP=MPEGTS="(时间戳同步问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63164543/

相关文章:

video - 简单的ffmpeg切割视频并存储在特定位置

php - 在php中的exec命令中运行ffmpeg将mp4转换为ogg时系统将关闭

MySQL:现在()给我零

c# - 如何让线程休眠直到收到异步函数的回调?

C# WPF Entity Framework 6 同步数据库

audio - 当我将无声音频 (mp3) 附加到现有音频列表时,最终音频会出现乱码?

video - 使用 ffmpeg 获取帧数

sql - 如何从 Oracle 中的日期中提取毫秒?

mysql - 将时间戳与其他变量一起插入到 mariaDB 表中

java - 在 Java 中等待多个线程完成