FFMPEG Webvtt m3u8下载成单个vtt文件,忽略“X-TIMESTAMP-MAP=MPEGTS=”(时间戳同步问题)
Posted
技术标签:
【中文标题】FFMPEG Webvtt m3u8下载成单个vtt文件,忽略“X-TIMESTAMP-MAP=MPEGTS=”(时间戳同步问题)【英文标题】:FFMPEG Webvtt m3u8 download into single vtt file, ignore the "X-TIMESTAMP-MAP=MPEGTS=" (timestamp sync problem) 【发布时间】:2020-07-30 00:48:59 【问题描述】:我想下载一个视频的字幕,它有单独的 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 被忽略。
这样时间Synchronization被打破了,每个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文件?
【问题讨论】:
未实施。 @Gyan 计划实现还是放弃这个功能? 【参考方案1】:我只能找到这个从未合并到 FFmpeg 中的非常古老的补丁:https://patchwork.ffmpeg.org/project/ffmpeg/patch/20170205194344.333-1-franklinphillips@gmx.com/
我对其进行了一点编辑,并将其应用于当前的 ffmpeg 源代码,重新编译并成功转换了一些通过 HLS 提供的带有X-TIMESTAMP-MAP
标签的 webVTT 字幕。
这是我最后用的补丁:https://gist.github.com/SebiderSushi/bdf8d46d5501f7085d0b27d8a19eb12c
编辑: FFmpeg 问题跟踪器上有一张关于此问题的公开票:https://trac.ffmpeg.org/ticket/8825
【讨论】:
我在 1996 年得到了一个非常旧的 CD ROM。MOV 文件是用 Indeo 3.2 编码的。(Intel Indeo™ Video R3.2) 音频是普通 pcm,两个示例文件可以在 @987654324 找到@1drv.ms/u/s!AgFGtfExBIBTkjL1gZtJOz9CV9tz?e=12z3gb你知道怎么改成h264或者其他格式吗? @PandaXia 解释:gist.github.com/SebiderSushi/be89ede578881f22c66d667e717c9859 固定文件:mega.nz/folder/AqpAmZxb#q4wInpkC_b9RZEVfVMkIRQ 我假设你可以自己处理音频,所以我只转换了视频轨道。 再一次,似乎有一张关于这个trac.ffmpeg.org/ticket/6581的模糊和被遗忘的票 @PandaXia 我回复说 FFmpeg 勾选了我链接,他们想要输入 indeo3 文件。我可以将您的文件发送或链接给他们吗? @PandaXia 这些文件在你的 OneDrive 中也被列为 .MOV 但是当我点击下载时我得到 .mp4 文件。对吗?以上是关于FFMPEG Webvtt m3u8下载成单个vtt文件,忽略“X-TIMESTAMP-MAP=MPEGTS=”(时间戳同步问题)的主要内容,如果未能解决你的问题,请参考以下文章