Конвертировать файл WebVTT из Youtube в обычный текст - PullRequest
1 голос
/ 08 июля 2019

Я загружаю файлы WebVTT с youtube, используя youtube-dl.

Типичный файл выглядит следующим образом:

WEBVTT
Kind: captions
Language: en

00:00:00.730 --> 00:00:05.200 align:start position:0%

[Applause]

00:00:05.200 --> 00:00:05.210 align:start position:0%
[Applause]


00:00:05.210 --> 00:00:11.860 align:start position:0%
[Applause]
hi<00:00:06.440><c> I'm</c><00:00:07.440><c> here</c><00:00:07.740><c> to</c><00:00:08.160><c> talk</c><00:00:08.429><c> to</c><00:00:09.019><c> share</c><00:00:10.019><c> an</c><00:00:10.469><c> idea</c><00:00:10.820><c> to</c>

00:00:11.860 --> 00:00:11.870 align:start position:0%
hi I'm here to talk to share an idea to


00:00:11.870 --> 00:00:15.890 align:start position:0%
hi I'm here to talk to share an idea to
communicate<00:00:12.920><c> but</c><00:00:13.920><c> what</c><00:00:14.790><c> is</c><00:00:14.940><c> communication</c>

00:00:15.890 --> 00:00:15.900 align:start position:0%
communicate but what is communication

Я хотел бы получить текстовый файл с этим:

hi I'm here to talk to share an idea to
communicate but what is communication

Используя код, который я нашел в Интернете, я получилэто:

cat output.vtt | sed "s/^[0-9]*[0-9\:\.\ \>\-]*//g" | grep -v "^WEBVTT\|^Kind: cap\|^Language" | awk 'BEGIN{ RS="\n\n+"; RS="\n\n" }NR>=2{ print }' > dialogues.txt

Но это далеко не идеально.Я получаю много бесполезных пробелов, и все предложения отображаются дважды.Не могли бы вы помочь мне?Кто-то задавал подобный вопрос раньше, но представленный ответ не работал для меня.

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Не могли бы вы попробовать следовать в одном awk.

awk 'FNR<=4 || ($0 ~ /^$|-->|\[|\]|</){next} !a[$0]++'  Input_file

Объяснение: Добавление пояснения для вышеприведенного кода.

awk '                                     ##Starting awk program here.
FNR<=4 || ($0 ~ /^$|-->|\[|\]|</){        ##Checking condition if line number is less than 4 OR having spaces or [ or ] or --> then go next line.
  next                                    ##next will skip all further statements from here.
  }
!a[$0]++                                  ##Creating an array whose index is $0 and increment its value with 1 with condition that it should NOT be already present in array a, which means it will give only 1 value of each line.
'  Input_file                             ##Mentioning Input_file name here.
1 голос
/ 08 июля 2019

Вы можете сделать что-то похожее на это:

sed -e '1,4d' -E -e '/^$|]|>$|%$/d' output.vtt | awk '!seen[$0]++' > dialogues.txt
  • sed удаляет первые 4 строки
  • sed, затем удаляет все пустые строки, илите, которые содержат ] или оканчиваются на >, %.
  • awk удаляет повторяющиеся строки.

Результат :

hi I'm here to talk to share an idea to
communicate but what is communication 

Возможно, вам придется немного его настроить, хотя это должно привести к тому, что вы захотите.

...