Blue velvet

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar

::blue_velvet::

Página de desenvolvimento do plugin ::blue_velvet::, para integração entre as timelines de áudio do Blender e do Ardour.

Onde está o código?

Aqui: https://github.com/szaszak/blender_velvet/blob/blue_velvet/blue_velvet.py

Vídeo explicativo

Explique-me como se eu fosse um editor de vídeo, e não um desenvolvedor: veja o vídeo demonstrativo no YouTube.

O que esperar?

Workflow de trabalho:

  1. Editor faz a montagem completa do vídeo.
  2. Addon reconhece as trilhas usadas na timeline e:
    • Checa se as trilhas pertencem a um vídeo ou se são áudios separados;
      • a. Se trilha pertence a um vídeo, usa o FFMPEG do Blender para isolar a trilha de áudio (WAV) e as salva em uma pasta "Audio (Bundle)", onde será lida pelo Ardour;
      • b. Se trilha for áudio separado, copia esse áudio para uma pasta "Audio (Bundle)", onde será lida pelo Ardour;
    • Gera XML .ardour;
  3. Designer de som abre o arquivo .ardour no Ardour;
    • Ardour completa itens faltantes do XML-base (automático);
    • Ardour cria visualização de "peaks" a partir do XML-base (automático);
    • Designer de áudio reabre a mesma sessão, e a timeline de áudio é a mesma vista pelo montador no Blender.
    • Mixagem e masterização do áudio.
    • Designer de som exporta trilhas finais.
  4. Montador insere trilha final no projeto de edição.

Programação de desenvolvimento

  1. Estudo de funcionamento geral das coisas - Blender, Ardour, geração de XML pelo Ardour, geração de XML via Python - FEITO - S1.
  2. Qual é o XML mínimo possível que o Ardour abre? - FEITO - S2.
  3. Onde estão as coisas relativas a áudio (pan, mono/estéreo, trilhas bloqueadas, trilhas mutadas) no Blender e no XML? - FEITO - S3.
  4. Geração de um XML esqueletal básico por Python via Blender, que leia conteúdo estático e o transforme em um XML. - FEITO - S3.
  5. Pesquisa: abrir track paralelo de desenvolvimento no github do blender_velvet. - FEITO - S2. Link ::blue_velvet::.
  6. Geração de XML com vários áudios na timeline. - FEITO - S4.
  7. Geração de XML com vários áudios na timeline e várias mudanças de parâmetros relativos a áudio (bloqueio de trilhas, mute etc). - FEITO - S4. Vídeo demonstrativo
  8. Pesquisa - qual o melhor jeito de se usar o FFMPEG nativo do Blender em vários ambientes? - FEITO - S5.
  9. Extrair áudio de vídeos via Blender API (Python). - FEITO - S6.
  10. Geração de XML a partir de timeline com áudios misturados - fontes são vídeos e áudios; - FEITO - S6.
  11. Adicionar funcionalidades de interface (UI) - item no menu; - FEITO - S5.
  12. Adicionar funcionalidades de interface (UI) - diálogos de aviso para conversão do FFMPEG; - FEITO - S6.
  13. Teste de funcionalidade - usar o plugin em um projeto real de edição;
  14. Documentação - geração de vídeo explicativo + README no github.
  15. Pós-documentação - contato com desenvolvedores do Blender, publicação no blenderartists.org;
  16. Avaliação - é possível ler keyframes de fade/pan e volume variável via Blender API? - FEITO - S6.
  17. Adaptação do código segundo sugestões do blenderartists.org.
  18. Inserir ::blue_velvet:: nos addons do Blender (branch community contrib).


Relatórios de desenvolvimento

Relatórios semanais publicados na quarta-feira.

Semana 1

  • Instalei o Ardour 2 no lap reciclado para começo das pesquisas.
  • Com o Ardour 2 e Jack rodando, salvei algumas sessões de Ardour sem trilhas e com uma trilha de áudio. Objetivo: entender o XML.
  • Estudei qual o melhor modo de implementar a exportação da timeline do Blender por XML. A melhor opção seria o lxml, mas essa é uma biblioteca externa. O Blender tem suporte nativo a MiniDom e ao ElementTree, então serão esses os métodos escolhidos.
  • Estudei como gerar um XML do zero com Python. A alternativa seria modificar um template XML do Ardour vazio, mas seria ruim distribuir isso junto com o addon.
  • Estudei como transformar o output XML do Blender de bytes em string e em como deixá-lo em formato human-readable (pretty printing).


A fazer, semana que vem

  • O XML do Ardour é cheio de tags e IDs. Muitas IDs não querem dizer nada, mas outras são marcadores internos referentes ao modo que as fontes ficam dispostas na timeline. Preciso entender melhor isso.
  • Trabalhar na geração de um primeiro XML esqueletal, com as seções de um XML do Ardor;
  • Estudar melhor o Ardour, para entender como ele lida com fontes estéreo, mono ou multicanais, e como faz as pans desses áudios.


Dúvidas

  • Quais IDs do XML são realmente importantes?
  • Como o Ardour lida com fontes de diferentes canais?
  • Quais as diferenças entre XMLs para Ardour 2 e Ardour 3?


Semana 2

  • Baixei o Ardour3 para já codar usando a versão nova do programa e do XML;
  • Pesquisei sobre os IDs na XML - eles não importam. Os únicos que importam são o de contagem geral (id-counter) e os que se referenciam entre si na timeline, relacionados a sources de áudio;
  • Início da leitura do manual do Ardour, para compreender melhor a relação programa <-> XML;
  • Criação de página no wiki Nós Digitais e documentação de desenvolvimento - atualizações serão às quartas-feiras;
  • Cheguei ao XML esqueletal básico, sem trilhas. Ele tem 32 linhas;
  • Uma trilha de áudio adiciona 4 elementos novos no XML, fazendo com que fique com 53 linhas;
  • Início de código: ::blue_velvet:: agora é capaz de gerar o XML básico a partir do Blender (Python) e salvar em um arquivo;
  • Código do ::blue_velvet:: está no github, como um branch do main trunk, blender_velvet. Agora o desenvolvimento pode ser acompanhado a partir dos commits.


A fazer, semana que vem

  • Testar se XML esqueletal é lido pelo Ardour3 (os atributos do XML são gerados em ordem diferente ao original);
  • Trabalhar na geração de um XML com uma trilha, e testar se ela é lida pelo Ardour3.
  • Continuar leitura do manual do Ardour.


Dúvidas

  • XML não funciona no Ardour sem informações de Tempo e Meter. Há outro jeito ou isso é fundamental?
  • Elemento Location: o que são as flags? Por que existe um elemento "punch"? XML funcionaria sem ele?

Semana 3

  • XML mais objetivo: limpei referências a Punch e Loop -> Ardour os recria automaticamente;
  • XML mais preciso: incluí informações referentes a SampleFormat (bits) e FPSs aceitos pelo Ardour - não usar esses parâmetros no Blender pode gerar um erro;
  • Teste com trilha única estática criada pelo Blender funciona no Ardour;
  • Comecei preparativos para conteúdo dinâmico (timeline do Blender);
  • Extensa pesquisa sobre a relação dos parâmetros do XML do Ardour e dos elementos do Blender - consegui estabelecer relações bem-sucedidas entre ambos para praticamente todos os parâmetros que importam;
  • Revisão de código: transformei todas as declarações de atributos do XML em funções, para receberem conteúdo dinâmico;
  • Problema da numeração de IDs resolvido - IDs agora estão sendo atribuídos corretamente, inclusive relações internas no XML;
  • Quebrei a geração das seções dinâmicas do XML em várias funções, para tornar o código mais claro;
  • Revisão geral e limpeza do código - excluí temporariamente parte do código no github para refletir estado atual da revisão;
  • Primeira seção do XML gerada a partir de conteúdo dinâmico parcialmente bem sucedida.


A fazer, semana que vem

  • Continuar revisão de código para receber conteúdo dinâmico;
  • Resolver problemas de inter-relação entre Sources e Regions para conteúdos dinâmicos repetidos.


Dúvidas

  • Informações de dados das strips estão sendo armazenadas em dicionários, dentro de uma lista. Seria melhor criar uma classe?


Semana 4

  • Fim da revisão e adaptação de código para conteúdo dinâmico - código voltou a ficar integral no GitHub;
  • Correção de bugs na geração das Sources no XML do Ardour;
  • Correção de bugs na geração de Playlist Regions no XML do Ardour;
  • Exclusão da seção Regions no código do ::blue_velvet:: - a seção é recriada automaticamente pelo Ardour a partir das Playlist Regions;
  • Correção de bugs relativa à geração interna de IDs no XML do Ardour;
  • Geração da primeira timeline de Ardour a partir de conteúdo dinâmico: este ponto significa o marco de 1/3 do desenvolvimento alcançado. Agora é possível gerar timelines de Ardour a partir de trilhas de áudio vindas do Blender (falta fazer funcionar com áudios que estão em trilhas de vídeo);
  • Limpeza de código e correção do modo como a ordem as trilhas aparecem no Ardour - agora, as trilhas aparecem na mesma ordem que na timeline do Blender;
  • Correção de bug na ordem das trilhas para quando há mais de 10 tracks na timeline;
  • Publicação de vídeo de documentação - agora o funcionamento do plugin pode ser compreendido por "pessoas comuns". Link do vídeo no YouTube
  • Contato inicial na lista da Blender Foundation - Python Development sobre o ::velvet_goldmine::. A ideia é saber como se faz para o plugin ser parte da distribuição contrib do Blender;
  • Contato com 3pointEdit, do blog Blender VSE, sobre o o ::velvet_goldmine:: e o ::blue_velvet::. A ideia é que ele veja os plugins e dê algum feedback a respeito.


A fazer, semana que vem

  • Pesquisa sobre o FFMPEG - como usar o FFMPEG a partir do Blender;
  • Pesquisa sobre menus - como inserir itens de menus no Blender para chamar o plugin;
  • Pesquisa sobre multiplataforma - quais são as diferenças entre Linux e Windows, ou seja, como fazer o plugin rodar tanto para quem tem Linux como para quem tem Windows (devido ao FFMPEG).


Dúvidas

  • Apenas as relacionadas ao uso multiplataforma do ::blue_velvet::.


Semana 5

  • Semana dedicada a pesquisas sobre como implementar o FFMPEG e os menus no Blender;
  • Pesquisa sobre reconhecimento de sistemas operacionais e de diferenças entre eles, no que se refere à utilização do plugin;
  • Pesquisa sobre como chamar um FFMPEG local, não instalado, em máquinas Windows;
  • Transformação da função principal do plugin (ExportArdour) em classe, para ser lida como addon pelo Blender - essa é uma atualização grande porque muda a estrutura do código;
  • Mapeamento e correção de bugs referentes a essa transformação - tive de inserir duas variáveis globais no código para isso, o que não me deixou muito feliz. É possível que eu incorpore a função de gerar XML à classe para não ter que declarar essas variáveis globais. A classe também é de onde sairá o chamado para o FFMPEG.


A fazer, semana que vem

  • Continuar depuração da Classe: como deixar o usuário chamar um FFMPEG local?
  • Se possível, implementar o FFMPEG


Dúvidas

  • Dúvidas relacionadas a classes e funções - como mudar o valor de self.path? Como permitir a escolha de uma segunda pasta além da primeira? Qual a melhor forma de implementar o FFMPEG levando isso em consideração?


Semana 6

  • Adaptação do código para excluir uma das duas variáveis globais - exluir a outra deixaria o código bem menos legível, o que não compensa;
  • O script virou um addon propriamente dito, com uma entrada no menu;
  • A API do Blender não permite, para a minha surpresa, chamar o FFMPEG interno. Com isso, a abordagem havia mudado para chamar um FFMPEG instalado na máquina do usuário. Mas isso levantava uma questão: e se o usuário não tivesse um FFMPEG instalado? Ou, mais provavável para usuários de Windows: e se fosse um FFMPEG local em vez de um instalado? Pesquisei bastante sobre como lidar com esse problema. Minha solução inicial foi a de fazer o addon exibir uma mensagem de erro, mas não me pareceu satisfatório, pois o erro acabava ficando muito hermético e assustaria as pessoas;
  • Contato com a equipe da Blender Foundation sobre como lidar com um aviso de erro. A sugestão deles foi a de implementar preferências de usuário no addon, ou seja, o usuário poderia apontar para um binário ou executável caso o FFMPEG não houvesse sido reconhecido automaticamente pelo addon. Como era um caminho melhor do que o meu, estudei como fazer essa parte e implementei assim;
  • Com as pesquisas anteriores, foi fácil implantar a chamada do FFMPEG;
  • Primeiro teste com exportação de vídeo e áudio em uma timeline foi bem sucedido;
  • Testes com projetos mais reais de edição simples apontaram um bug no modo como as sources estavam sendo geradas, fazendo com que parte das trilhas de áudio não aparecessem no Ardour (mais especificamente, as trilhas cuja referência original ao nome do arquivo havia sido excluída da timeline por cortes de edição);
  • Correção do bug;
  • Novos testes apontaram que as trilhas estão sendo geradas corretamente na timeline do Ardour;
  • Pesquisas referentes a como fazer um "leitor de keyframes" para as strips de áudio no Blender - a implantação da relação entre keyframes de áudio blender <-> ardour não está prevista para ser feita agora, mas as pesquisas apontam que, sim, é possível fazer caso isso se prove importante.


A fazer, semana que vem

  • O addon está feito. A partir dessa semana, o foco muda para o de gerar um projeto real de edição. Um desses projetos será o making of do Floresta Vermelha.
  • A documentação do plugin também deve esperar novos testes com projetos mais reais para ser feita.


Dúvidas

  • Nenhuma.