Como anotar legendas do YouTube
Como baixar legendas do YouTube com o yt-dlp e anotá-las no Potato, o que as legendas geradas automaticamente permitem e o que verificar antes de compartilhar mídia.
Baixe as legendas com o yt-dlp e aponte o Potato para os arquivos. As legendas geradas automaticamente não têm pontuação nem rótulos de locutor, e as quebras de linha delas não significam nada, o que limita o que você pode anotar com sentido. O Potato lê todos os formatos de legenda que o yt-dlp gera. Veja Formatos de transcrição para a lista completa.
As plataformas de vídeo são uma fonte grande e conveniente de dados de fala naturalística. As legendas ocultas transformam essa fala em texto, e o texto é pequeno, fácil de transferir e fácil de anotar. O problema é que nem todas as legendas são o mesmo tipo de objeto, e um esquema pensado para um tipo quebra no outro.
Como baixo as legendas?
O yt-dlp busca as legendas com ou sem a mídia:
# Human-written subtitles, if the uploader provided any
yt-dlp --write-subs --sub-langs en --skip-download <URL>
# Auto-generated captions
yt-dlp --write-auto-subs --sub-langs en --sub-format vtt --skip-download <URL>O Potato lê vtt, srt, json3, ttml e as variantes srv1, srv2 e srv3, então qualquer --sub-format que você escolher será lido. Escolha pelo que você quer preservar: o json3 guarda os tempos por palavra, enquanto o WebVTT e o SubRip são mais fáceis de ler e de editar à mão.
Qual é a diferença entre legendas humanas e legendas automáticas?
Elas parecem iguais em um editor de texto e se comportam de modo muito diferente como entrada de anotação:
| Legendas humanas | Legendas automáticas | |
|---|---|---|
| Pontuação | Sim | Não, ou pouco confiável |
| Fronteiras de frase | Significativas | Arbitrárias |
| Locutores | Às vezes, com tags <v Name> | Nunca |
| Tempos por palavra | Não | Sim, no json3 |
| Literalidade | Muitas vezes condensadas para leitura | Mais próximas do que foi dito |
Nenhuma é melhor em tudo. As legendas humanas são agradáveis de ler, mas são editadas para facilitar a leitura, então cortam hesitações, comprimem repetições e às vezes reescrevem uma frase inteira. As legendas automáticas ficam mais perto do literal, que é o que você quer para qualquer estudo sobre como as pessoas realmente falam, mas chegam como um fluxo sem pontuação.
O que posso anotar em legendas automáticas?
Não projete um esquema de anotação por frase sobre legendas automáticas. As fronteiras dos blocos caem onde a janela de legenda encheu, e não onde uma frase terminou, o que faz de cada bloco uma unidade de exibição sem nenhum estatuto linguístico. Peça aos anotadores que avaliem frases e cada um vai escolher fronteiras de frase diferentes, de modo que os seus números de concordância acabam medindo essa variação em vez do julgamento que interessava.
Duas opções viáveis:
- Anote as janelas de legenda como estão. Rotule cada bloco com o que se aplica a ele e aceite que a unidade é arbitrária, mas consistente. Serve para tópico, para a presença de um fenômeno ou para qualquer coisa que se possa julgar em um fragmento.
- Segmente de novo antes. Rode um modelo de restauração de pontuação ou um sistema de ASR que pontue e depois refaça os tempos. Dá mais trabalho, mas você obtém unidades reais.
Se você tem legendas humanas, esse problema praticamente desaparece. As fronteiras dos blocos foram colocadas por alguém que acompanhava a leitura, então em geral respeitam as orações.
E o vídeo?
As legendas são pequenas e fáceis de redistribuir. O vídeo, em geral, não. Há três opções:
# Media hosted somewhere your annotators can reach
potato transcripts ./captions --media-url-prefix https://cdn.example.org/video -o data/talks.json
# Media downloaded locally as audio only
yt-dlp -f 'ba' -x --audio-format mp3 -o './audio/%(id)s.%(ext)s' <URL>
potato transcripts ./captions --media-dir ./audio -o data/talks.jsonA terceira opção é não ter mídia nenhuma. Transcrições sem mídia podem ser anotadas sem problema; os anotadores leem em vez de ouvir. Se esse for o seu plano, diga isso nas instruções, porque do contrário os anotadores supõem que o player ausente é um bug e o relatam como tal.
Aviso: verifique os seus direitos antes de redistribuir qualquer coisa que você não criou. Baixar legendas ou mídia para a sua própria pesquisa é uma questão diferente de servir essa mídia a um grupo de anotadores, e os termos da plataforma, os direitos autorais e as regras da sua instituição pesam nisso. Resolva isso antes de montar o pipeline, não depois.
Como configuro a tarefa?
O conversor grava um arquivo de dados com a transcrição já normalizada:
potato transcripts ./captions --media-dir ./audio -o data/talks.json{
"id": "talk_01",
"conversation": {
"audio": "audio/talk_01.mp3",
"turns": [
{"turn_id": "t0", "speaker": null, "start": 0.0, "end": 4.2,
"text": "so the thing about caption windows is"}
]
}
}speaker: null é o que uma legenda automática fornece. Esses turnos aparecem como Unassigned com um seletor, para que os anotadores possam atribuí-los enquanto ouvem.
As legendas automáticas não trazem locutores, então cada bloco fica como Unassigned até que um anotador escolha um
annotation_task_name: "Talk Annotation"
task_dir: .
data_files:
- data/talks.json
item_properties:
id_key: id
text_key: conversation
instance_display:
fields:
- key: conversation
type: audio_dialogue
label: "Captions"
span_target: true
display_options:
show_timestamps: true
allow_speaker_assignment: auto
annotation_schemes:
- annotation_type: radio
name: cue_topic
description: "What is this caption window about?"
labels: [setup, argument, example, aside]
turn_level: true
turn_binding:
field: conversationturn_level: true associa a pergunta a cada bloco em vez de ao vídeo como um todo, e turn_binding.field nomeia o campo de exibição de onde vêm esses blocos. O bloco é a unidade certa para a pergunta quando os blocos são tudo o que você tem. Rode a tarefa:
potato start config.yaml -p 8000Você também pode pular o conversor por completo e apontar um arquivo de dados para os arquivos de legenda no disco. Veja Como anotar transcrições do Whisper, onde o restante deste fluxo é igual.
Leitura adicional
- Formatos de transcrição, todos os formatos de legenda e de transcrição suportados
- Como anotar transcrições do Whisper, a versão deste fluxo para saída de ASR
- Ingestão de formatos de transcrição, um design do showcase pronto para rodar, com seis formatos lado a lado
- Anotação de vídeo, para anotar o vídeo em vez das legendas dele
- Como projetar formatos de dados para anotação
- Timed Text Markup Language, o padrão de legendas de radiodifusão que o Potato também lê