Projetos de Vídeo
Pré-requisitos
Visão Geral
Um projeto de vídeo no Mosaico representa uma composição completa de vídeo que consiste em três componentes principais:
Configuração do Projeto
- Metadados básicos e configurações do projeto
- Especificações de saída do vídeo
- Parâmetros técnicos
Coleção de Assets
- Registro de todos os elementos de mídia
- Mapeamento entre IDs de assets e objetos
- Validação e gerenciamento de assets
Linha do Tempo
- Sequência de eventos (cenas e referências de assets)
- Sincronização de tempo
- Organização de eventos
Configuração do Projeto
Um vídeo pode ser configurado com um conjunto específico de parâmetros que definem sua aparência e comportamento. A classe VideoProjectConfig
define as configurações básicas para seu vídeo:
from mosaico.video.project import VideoProjectConfig
config = VideoProjectConfig(
name="My Project", # Project name
version=1, # Project version
resolution=(1920, 1080), # Video dimensions
fps=30 # Frames per second
)
Por exemplo, para alterar a resolução do projeto, basta atualizar o atributo resolution
...
... e pronto: o projeto de vídeo será renderizado na nova resolução.
Criando Projetos de Vídeo
Existem três maneiras principais de criar um projeto de vídeo:
Criação Direta
O usuário já conhece a estrutura do projeto, a configuração dos assets e sua disposição na linha do tempo. Neste caso, o projeto pode ser criado diretamente:
from mosaico.video.project import VideoProject
project = VideoProject(
config=VideoProjectConfig(
name="Direct Creation Example",
resolution=(1920, 1080)
)
)
Geração Baseada em Script
O usuário deseja gerar um projeto de vídeo baseado em um script que define a estrutura do projeto. O script pode ser gerado por um gerador de script, que é uma classe que implementa o protocolo ScriptGenerator
:
Sobre Geradores de Script
Eles são a principal ponte entre projetos de vídeo e IA. O protocolo ScriptGenerator
está no centro do processo de geração de projetos de vídeo, pois define a estrutura do script que será usado para criar o projeto de vídeo e evita que o usuário tenha que definir manualmente a estrutura do projeto.
project = VideoProject.from_script_generator(
script_generator=script_generator, # ScriptGenerator instance
media=media_files, # Sequence of Media objects
config=video_config, # Optional configuration
speech_synthesizer=tts_engine, # Optional speech synthesis
audio_transcriber=transcriber, # Optional transcription
background_audio=bg_music # Optional background music
)
Carregando de Arquivo
Uma das principais características do Mosaico é a capacidade de serializar e desserializar projetos de vídeo para e de arquivos. Isso permite que os usuários salvem seus projetos e os carreguem posteriormente, ou os compartilhem com outros.
Baseado no formato YAML, a classe VideoProject
fornece métodos para carregar e salvar projetos:
# Load from YAML
project = VideoProject.from_file("project.yml")
# Save to YAML
project.to_file("project.yml")
Gerenciando Assets do Projeto
O VideoProject
fornece métodos para gerenciar assets, como adicionar, remover e recuperá-los. A classe é responsável por garantir que todos os assets estejam corretamente vinculados ao projeto, tenham referências válidas na linha do tempo e estejam disponíveis quando necessário.
Adicionando Assets
# Add single asset
project.add_assets(background_image)
# Add multiple assets
project.add_assets([
main_video,
background_music,
subtitle_text
])
# Add with custom IDs
project.add_assets({
"background": background_image,
"music": background_music
})
Recuperando Assets
Removendo Assets
# Remove asset
# This will also remove all references to the asset in the timeline
project.remove_asset("background")
Gerenciamento da Linha do Tempo
A linha do tempo consiste em eventos (cenas e referências de assets) que definem quando e como os assets aparecem no vídeo.
Adicionando Eventos na Linha do Tempo
# Add a scene
project.add_timeline_events(
Scene(
title="Opening Scene",
asset_references=[
AssetReference.from_asset(background)
.with_start_time(0)
.with_end_time(5),
AssetReference.from_asset(title_text)
.with_start_time(1)
.with_end_time(4)
]
)
)
# Add individual asset reference
project.add_timeline_events(
AssetReference.from_asset(background_music)
.with_start_time(0)
.with_end_time(project.duration)
)
Removendo Eventos da Linha do Tempo
Navegação na Linha do Tempo
# Get total duration
duration = project.duration
# Get specific event
event = project.get_timeline_event(0)
# Iterate through timeline
for event in project.iter_timeline():
print(f"Event at {event.start_time}s")
Recursos Especiais
Aqui estão alguns recursos especiais que o Mosaico oferece para aprimorar projetos de vídeo:
Geração de Legendas
# Add subtitles from transcription
project.add_subtitles_from_transcription(
transcription=transcription,
max_duration=5, # Maximum subtitle duration
params=TextAssetParams(
font_size=36,
font_color="white"
)
)
Atualização em Lote de Parâmetros de Legendas
# Update subtitle parameters globally
project.with_subtitle_params(
TextAssetParams(
font_size=48,
stroke_width=2
)
)
Encadeamento de Métodos
A classe VideoProject
suporta encadeamento de métodos, o que permite chamar vários métodos em um objeto em uma única linha. Isso pode tornar seu código mais conciso e fácil de ler.
project = (
VideoProject(config=VideoProjectConfig())
.add_assets([background_image, title_text, background_music])
.add_timeline_events([
AssetReference.from_asset(background_image)
.with_start_time(0)
.with_end_time(10),
AssetReference.from_asset(title_text)
.with_start_time(1)
.with_end_time(9)
])
)
Melhores Práticas
Organização de Assets
- Use IDs significativos para assets
- Agrupe assets relacionados
- Mantenha o controle das dependências dos assets
Estrutura da Linha do Tempo
- Organize eventos cronologicamente
- Use cenas para conteúdo relacionado
- Mantenha relações claras de tempo
Gerenciamento de Projetos
- Salve projetos regularmente
- Use controle de versão para arquivos do projeto
- Documente a estrutura do projeto
Conclusão
Esta documentação reflete a implementação atual do VideoProject
no Mosaico, focando em padrões práticos de uso e melhores práticas. Os exemplos são projetados para funcionar com o código atual e demonstrar fluxos de trabalho comuns de produção de vídeo.