如何从 youtube-dl --write-auto-sub 下载转换混乱的 .vtt 子文件?

问题描述 投票:0回答:2

我的目标是在单独的文件中下载带有自动生成字幕的 YouTube 视频,例如

.vtt
.srt
等。

我目前正在尝试通过

youtube-dl
实现这一目标,但如果需要,我愿意接受其他解决方案。

当我运行以下命令时,它将视频下载为

.mp4
(这很好)和单独的
.vtt
文件,但
.vtt
似乎不知何故搞砸了,并显示整个剪辑的所有文本一次而不是指定的时间。

我正在运行的命令:

youtube-dl --write-auto-sub https://www.youtube.com/watch?v=Roc89oOZOF4&list=PLJBo3iyb1U0eNNN4Dij3N-d0rCJpMyAKQ&index=45

下载此.vtt:

WEBVTT
Kind: captions
Language: en

00:00:05.960 --> 00:00:08.290 align:start position:0%
 
thank <00:00:06.003><c>you  </c><00:00:06.046><c>ah </c><00:00:06.089><c>crap  </c><00:00:06.132><c>well </c><00:00:06.175><c>looks </c><00:00:06.218><c>like </c><00:00:06.261><c>the </c><00:00:06.304><c>good </c><00:00:06.347><c>Lord </c><00:00:06.390><c>just </c><00:00:06.433><c>sent  </c><00:00:06.476><c>me </c><00:00:06.519><c>a </c><00:00:06.562><c>conversation </c><00:00:06.605><c>starter </c><00:00:06.648><c>come </c><00:00:06.691><c>here  </c><00:00:06.734><c>Jesse </c><00:00:06.777><c>come </c><00:00:06.820><c>get </c><00:00:06.863><c>the </c><00:00:06.906><c>ball  </c><00:00:06.949><c>hmm</c>

00:00:08.290 --> 00:00:10.549 align:start position:0%
thank you  ah crap  well looks like the good Lord just sent  me a conversation starter come here  Jesse come get the ball  hmm
 

00:00:10.549 --> 00:00:13.070 align:start position:0%
 
 

00:00:13.070 --> 00:00:15.470 align:start position:0%
 
 

00:00:15.470 --> 00:00:23.750 align:start position:0%
 
 

00:00:23.750 --> 00:00:23.760 align:start position:0%
 
 

00:00:23.760 --> 00:00:26.480 align:start position:0%
 



我了解到这可能是 YouTube 故意为之。

即使这是真的,有什么方法可以将其

.vtt
转换为可用的格式,或者只是从 YouTube 下载格式正确的自动生成的字幕?

Python、FFMPEG、命令行是首选,但任何东西都有帮助!

谢谢!非常感谢任何和所有帮助!

ffmpeg youtube-dl subtitle video-subtitles
2个回答
5
投票

ttml
格式下,字幕有效。尝试一下:

yt-dlp --write-auto-subs --sub-format ttml --no-playlist "https://www.youtube.com/watch?v=Roc89oOZOF4&list=PLJBo3iyb1U0eNNN4Dij3N-d0rCJpMyAKQ&index=45"
  • yt-dlp 是一个 youtube-dl 分支
  • 要将
    ttml
    转换为
    srt
    vtt
    ,您必须添加
    --convert-subs srt
    --convert-subs vtt

2
投票

要转换 vtt 我使用这个

#!/bin/bash
for i in *.vtt;
do name=`echo $i | cut -d'.' -f1`;
echo $name;s
ffmpeg -i "$i" "${name}.srt";
done

删除重复项

我用这个,还是有问题,需要检查一下

#!/bin/bash
mkdir out
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $( find ./ -iname "*.srt" )
do
OIFS="$IFS"
IFS=$'\n'
  awk '!visited[$0]++' "$f" > "./out/${f%.*}.srt"
IFS="$OIFS"
done
IFS=$SAVEIFS

删除前一行第二行的重复项 从当前行第一行开始
(参见第 1 行,共 11 个[原文])

行仍然重复,但现在是同一行
(见11和12)

10
00:00:19,670 --> 00:00:19,680
有免费无线网络信号

11
00:00:19,680 --> 00:00:21,769
有免费无线网络信号
整个北美都没有人拥有

12
00:00:21,769 --> 00:00:21,779
整个北美都没有人拥有

成为

10
00:00:19,670 --> 00:00:19,680
有免费无线网络信号
11
00:00:19,680 --> 00:00:21,769
整个北美都没有人拥有
12
00:00:21,769 --> 00:00:21,779
整个北美都没有人拥有

编辑某人已经制作的应用程序以修复重复的行 在这里找到它 https://github.com/bindestriche/srt_fix

© www.soinside.com 2019 - 2024. All rights reserved.