Solución:
A continuación, le indicamos cómo obtener la transcripción de un video de YouTube (cuando esté disponible):
- Vaya a YouTube y abra el video de su elección.
- Haga clic en el botón “Más acciones” (3 puntos horizontales) ubicado junto al botón Compartir.
- Haga clic en “Abrir transcripción”
Aunque la sintaxis puede ser un poco tonta, esta es una solución bastante buena.
Fuente: http://ccm.net/faq/40644-youtube-how-to-get-the-transcript-of-a-video
Otra opción es usar youtube-dl
:
youtube-dl --skip-download --write-auto-sub $youtube_url
El formato predeterminado es vtt
y el otro formato disponible es ttml
(--sub-format ttml
).
--write-sub
Write subtitle file
--write-auto-sub
Write automatically generated subtitle file (YouTube only)
--all-subs
Download all the available subtitles of the video
--list-subs
List all available subtitles for the video
--sub-format FORMAT
Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS
Languages of the subtitles to download (optional) separated by commas, use --list-subs for available language tags
Puedes usar ffmpeg
para convertir el archivo de subtítulos a otro formato:
ffmpeg -i input.vtt output.srt
Así es como se ven los subtítulos VTT:
WEBVTT
Kind: captions
Language: en
00:00:01.429 --> 00:00:04.249 align:start position:0%
ladies<00:00:02.429><c> and</c><00:00:02.580><c> gentlemen</c><c.colorE5E5E5><00:00:02.879><c> I'd</c></c><c.colorCCCCCC><00:00:03.870><c> like</c></c><c.colorE5E5E5><00:00:04.020><c> to</c><00:00:04.110><c> thank</c></c>
00:00:04.249 --> 00:00:04.259 align:start position:0%
ladies and gentlemen<c.colorE5E5E5> I'd</c><c.colorCCCCCC> like</c><c.colorE5E5E5> to thank
</c>
00:00:04.259 --> 00:00:05.930 align:start position:0%
ladies and gentlemen<c.colorE5E5E5> I'd</c><c.colorCCCCCC> like</c><c.colorE5E5E5> to thank
you<00:00:04.440><c> for</c><00:00:04.620><c> coming</c><00:00:05.069><c> tonight</c><00:00:05.190><c> especially</c></c><c.colorCCCCCC><00:00:05.609><c> at</c></c>
00:00:05.930 --> 00:00:05.940 align:start position:0%
you<c.colorE5E5E5> for coming tonight especially</c><c.colorCCCCCC> at
</c>
00:00:05.940 --> 00:00:07.730 align:start position:0%
you<c.colorE5E5E5> for coming tonight especially</c><c.colorCCCCCC> at
such<00:00:06.180><c> short</c><00:00:06.690><c> notice</c></c>
00:00:07.730 --> 00:00:07.740 align:start position:0%
such short notice
00:00:07.740 --> 00:00:09.620 align:start position:0%
such short notice
I'm<00:00:08.370><c> sure</c><c.colorE5E5E5><00:00:08.580><c> mr.</c><00:00:08.820><c> Irving</c><00:00:09.000><c> will</c><00:00:09.120><c> fill</c><00:00:09.300><c> you</c><00:00:09.389><c> in</c><00:00:09.420><c> on</c></c>
00:00:09.620 --> 00:00:09.630 align:start position:0%
I'm sure<c.colorE5E5E5> mr. Irving will fill you in on
</c>
00:00:09.630 --> 00:00:11.030 align:start position:0%
I'm sure<c.colorE5E5E5> mr. Irving will fill you in on
the<00:00:09.750><c> circumstances</c><00:00:10.440><c> that's</c><00:00:10.620><c> brought</c><00:00:10.920><c> us</c></c>
00:00:11.030 --> 00:00:11.040 align:start position:0%
<c.colorE5E5E5>the circumstances that's brought us
</c>
Aquí están los mismos subtítulos sin la parte en la parte superior del archivo y sin etiquetas:
00:00:01.429 --> 00:00:04.249 align:start position:0%
ladies and gentlemen I'd like to thank
00:00:04.249 --> 00:00:04.259 align:start position:0%
ladies and gentlemen I'd like to thank
00:00:04.259 --> 00:00:05.930 align:start position:0%
ladies and gentlemen I'd like to thank
you for coming tonight especially at
00:00:05.930 --> 00:00:05.940 align:start position:0%
you for coming tonight especially at
00:00:05.940 --> 00:00:07.730 align:start position:0%
you for coming tonight especially at
such short notice
00:00:07.730 --> 00:00:07.740 align:start position:0%
such short notice
00:00:07.740 --> 00:00:09.620 align:start position:0%
such short notice
I'm sure mr. Irving will fill you in on
00:00:09.620 --> 00:00:09.630 align:start position:0%
I'm sure mr. Irving will fill you in on
00:00:09.630 --> 00:00:11.030 align:start position:0%
I'm sure mr. Irving will fill you in on
the circumstances that's brought us
Puede ver que cada texto de subtítulo se repite tres veces. Hay un nuevo texto de subtítulo cada octava línea (3ª, 11ª, 19ª y 27ª).
Esto convierte los subtítulos VTT a un formato más simple:
sed '1,/^$/d' *.vtt| # remove the part at the top
sed 's/<[^>]*>//g'| # remove tags
awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3' # print each new subtitle text and its start time without milliseconds
Así es como se ve la salida del comando anterior:
00:00:01 ladies and gentlemen I'd like to thank
00:00:04 you for coming tonight especially at
00:00:05 such short notice
00:00:07 I'm sure mr. Irving will fill you in on
00:00:09 the circumstances that's brought us
Esto imprime los subtítulos cerrados de un video en el formato simplificado:
cap()(cd /tmp;rm -f -- *.vtt;youtube-dl --skip-download --write-auto-sub -- "$1";sed '1,/^$/d' -- *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3')
El siguiente comando descarga los subtítulos de todos los videos de un canal. Cuando hay un error como Unable to extract video data
, -i
(--ignore-errors
) causas youtube-dl
para omitir el video en lugar de salir con un error.
youtube-dl -i --skip-download --write-auto-sub -o '%(upload_date)s.%(title)s.%(id)s.%(ext)s' https://www.youtube.com/channel/$channelid;for f in *.vtt;do sed '1,/^$/d' "$f"|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'>"${f%.vtt}";done
Puede ver / copiar / descargar un archivo xml con código de tiempo de un archivo de subtítulos de youtube accediendo
http://video.google.com/timedtext?lang=[LANGUAGE]&v=[YOUTUBE VIDEO IDENTIFIER]
Por ejemplo http://video.google.com/timedtext?lang=pt&v=WSVKbw7LC2w
NOTA: este método no descarga subtítulos generados automáticamente, incluso si obtiene el idioma correcto (tal vez haya un código especial para los idiomas generados automáticamente).