O YouTube oferece acesso gratuito às melhores palestras de eventos internacionais renomados. Assim, as principais limitações que enfrento para aproveitar tanto conteúdo de qualidade são minha capacidade e o tempo disponível, que está cada vez mais escasso.
Felizmente, utilizando criatividade, conhecimentos em Python e o Jupyter Notebook, consigo otimizar o tempo para capturar a essência do conteúdo de cada palestra.
Obtendo os metadados de um vídeo do YouTube
Assumindo que você tem Python instalado e Jupyter funcionando, começo um novo notebook instalando os pacotes requests
e bs4
.
! pip install --upgrade --quiet requests bs4
O código que segue consegue extrair, a partir de um link, o título do vídeo, seu código e o nome do canal onde está publicado. Ele faz isso dividindo a URL para obter o código do vídeo, enviando uma solicitação para a URL, e, se bem-sucedido, analisa o HTML para encontrar os metadados do vídeo e do canal.
import requests
from bs4 import BeautifulSoup
# URL do vídeo no YouTube
video_url = 'https://www.youtube.com/watch?v=GYJ77F_8kq0'
# Extrai o código do vídeo da URL
video_code = video_url.split('=')[-1]
# Faz a solicitação para a página do vídeo
response = requests.get(video_url)
# Se a solicitação foi bem-sucedida
if response.status_code == 200:
# Analisa o HTML da página
soup = BeautifulSoup(response.text, 'html.parser')
# Extrai o nome do vídeo
# O título geralmente está dentro de uma tag <meta> com o atributo name="title"
video_title = soup.find('meta', {'name': 'title'})['content']
# Extrai o nome do canal
# O nome do canal geralmente está dentro de uma tag <meta> com o atributo itemprop="channelId"
channel_name = soup.find('link', {'itemprop': 'name'})['content']
print(f'Nome do vídeo: {video_title}')
print(f'Código do vídeo: {video_code}')
print(f'Canal: {channel_name}')
else:
print('Falha ao fazer a solicitação para a página do vídeo.')
Executando o código, obtenho, os dados que desejo.
Nome do vídeo: "Picasso, Geometry, Jupyter" by Ryan Herr
Código do vídeo: GYJ77F_8kq0
Canal: Strange Loop Conference
Obtendo a transcrição de um vídeo do YouTube
Já tenho os metadados de um vídeo, agora, desejo obter a transcrição. Para isso, vamos utilizar o pacote youtube-transcript-api
.
! pip install --upgrade --quiet youtube-transcript-api
O código para obter a transcrição é bem simples.
from youtube_transcript_api import YouTubeTranscriptApi
transcript = YouTubeTranscriptApi.get_transcript(video_code)
full_text = ' '.join([entry['text'] for entry in transcript])
print(full_text)
O resultado é a transcrição do vídeo que o YouTube disponibiliza para gerar legendas. É importante observar, no entanto, que nem todos os vídeos possuem transcrição.
hi I'm Ryan her and this talk is about Picasso and programming in 1945 Picasso
created a series of bulls where he started with a fairly realistic bull like you see
on the left and through a gradual progressive process he deconstructed the bull abstracting
it to its essence to a simplified geometric form so in 1945 Picasso did that in 2010 an
anonymous illustrator posted a meme on tumblr and reddit how to draw an owl again we see a
transition between two states step one draw some circles step two draw the rest of the owl
so the interesting thing when we compare these two sets of images well they're moving in
opposite directions right the the owl is moving from simple to detailed but the bull Picasso's Bulls actually moved in the opposite direction it went from more complex more detailed to
...
Preparando a interação com a transcrição e com os metados usando IA
Agora que temos a transcrição do vídeo, podemos utilizar a API da OpenAI para “conversar” com a transcrição obtendo as informações que desejamos. Para isso, irei utilizar LangChain para facilitar a interação. Vamos instalar os pacotes langchain
, langchain-openai
, langchain-core
e langchain-community
.
! pip install --upgrade --quiet langchain langchain-openai langchain-core langchain-community
O código monta um modelo de prompt com os metadados e com a transcrição que obtemos anteriormente e a solicitação do usuário. Utilizo um modelo da OpenAI com uma janela de 128K que permite tratamento da transcrição completa, sem perdas. Também crio uma função helper para o modelo.
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
gpt4 = ChatOpenAI(model_name="gpt-4-0125-preview",temperature=0)
chat_with_document = ChatPromptTemplate.from_template(f"""
O texto que segue é uma transcrição do vídeo
intitulado {video_title} disponível no canal {channel_name}
Leia o texto atentamente e realize da forma mais completa
possível a tarefa também indicada abaixo.
Use, na resposta, apenas informações contidas no texto,
sem adicionar, em hipótese alguma, qualquer informação adicional.
Você responde em português, usando linguagem simples, com
vocabulário simples. Estrutura seu texto em
frases curtas, em parágrafos com não mais do que 300 caracteres.
TEXTO:
{{text}}
TAREFA:
{{task}}
SUA RESPOSTA:
""")
output_parser = StrOutputParser()
chat_with_document_chain = chat_with_document | gpt4 | output_parser
def do(task):
result = chat_with_document_chain.invoke({"text": full_text, "task": task})
print(result)
return result
Obtendo um resumo e outras informações relevantes
Tudo pronto! Agora, vamos estudar. Comecemos, com um bom resumo.
summary = do("Forneça-me um resumo detalhado do que é discutido no vídeo.")
O resultado é um resumo, em português, do conteúdo que está na transcrição, que está em inglês.
O vídeo apresentado por Ryan Herr aborda a relação entre a arte de Picasso, a
programação e a busca pela simplificação e abstração tanto na arte quanto no
software. Em 1945, Picasso criou uma série de imagens de touros, começando
com uma representação realista e, progressivamente, simplificando-a até chegar
a uma forma geométrica simplificada. Esse processo de abstração de Picasso é
comparado a um meme de 2010 sobre desenhar uma coruja, mostrando a dificuldade
de simplificar ou detalhar imagens.
Ryan Herr explora como o processo de Picasso pode ser aplicado ao
desenvolvimento de software e matemática, onde a busca por abstrações concisas
e elegantes é constante. Ele menciona que Picasso, antes de criar sua série de
touros, enfrentou um bloqueio criativo enquanto trabalhava em outra pintura,
"Charnel-House". Picasso expressou o desejo de poder trabalhar em estados
progressivos sem finalizar a tela, algo que ele conseguiu explorar com a
série de touros usando a litografia, uma técnica que permite fazer alterações.
Herr utiliza papel vegetal para entender o processo de Picasso, traçando as
mudanças entre os estados dos touros. Ele então usa programação para analisar
computacionalmente essas mudanças, criando representações coloridas que mostram
o que foi adicionado, removido ou mantido entre cada estado. Esse processo
revela que inicialmente Picasso adicionou detalhes ao touro, mas progressivamente
simplificou a imagem, removendo elementos até chegar a uma forma quase linear.
Explorando ainda mais, Herr utiliza o algoritmo de simplificação de linhas
Douglas-Peucker para tentar recriar a abstração de Picasso computacionalmente,
resultando em uma forma que, embora diferente, oferece insights sobre o processo
de simplificação. Ele discute a dificuldade de capturar a abstração única de Picasso,
que combina elementos de abstração pictórica e icônica.
Por fim, Herr reflete sobre como a exploração computacional do processo de Picasso
não apenas oferece uma nova compreensão da arte de Picasso, mas também pode inspirar
desenvolvedores de software e matemáticos a enfrentar bloqueios criativos, sugerindo
que começar com uma versão mais complexa e simplificá-la progressivamente pode ser
uma estratégia eficaz para superar desafios criativos.
E esse foi só o começo…
Para interagir com outra palestra, basta-me substituir o link do vídeo que quero estudar e executar novamente o código.
A produção de resumos qualificados assim facilita a produção de anotações e me permite saber rapidamente quando interesse tenho em assistir uma palestra ou não.