Vídeo-aulas: maneira unix

Vídeo-aulas: maneira unix
A quarentena é um momento maravilhoso para aprender alguma coisa. Porém, como você entende, para que alguém aprenda alguma coisa, alguém deve ensinar. Se você tem uma apresentação que deseja fazer para um público de milhões de pessoas e ganhar fama mundial, então este artigo é para você. Aqui você encontrará instruções passo a passo sobre como fazer um vídeo a partir de sua apresentação.

Descartamos o caminho de gravar “comentários de áudio” no PowerPoint e exportar a apresentação para vídeo como trivial e não fornecendo um décimo dos recursos necessários para um vídeo realmente legal.

Primeiro, vamos decidir quais frames precisamos:

  1. Os slides reais com narração
  2. mudança de slide
  3. Citações de filmes populares
  4. Várias molduras com o rosto do palestrante e seu gato preferido (opcional)

Criando uma estrutura de diretório

.
├── clipart
├── clips
├── rec
├── slide
└── sound

A finalidade dos diretórios na ordem de listagem: filmes dos quais extrairemos citações (clipart), fragmentos de nosso futuro vídeo (clipes), vídeos da câmera (rec), slides em forma de imagens (slide), som (som).

Fazendo uma apresentação em fotos

Para um verdadeiro usuário de Linux com olhos vermelhos, fazer uma apresentação na forma de imagens não apresenta problemas. Deixe-me lembrá-lo de que um documento em formato pdf pode ser analisado em imagens usando o comando

pdftocairo -png -r 128 ../lecture.pdf

Se não existir tal comando, instale você mesmo o pacote poppler-utils (instruções para Ubuntu; se você tem Arch, então sabe perfeitamente o que fazer sem mim).

Aqui e além, acredito que o vídeo esteja preparado no formato HD Ready, ou seja, 1280x720. Uma apresentação com tamanho horizontal de 10 polegadas fornece exatamente esse tamanho quando descarregada (consulte o parâmetro -r 128).

Preparando o texto

Se você quiser criar um material realmente excelente, seu discurso precisa ser escrito primeiro. Também pensei que poderia falar o texto sem preparação, principalmente porque tenho boa experiência em palestras. Mas uma coisa é tocar ao vivo e outra é gravar um vídeo. Não seja preguiçoso – o tempo gasto digitando será recompensado muitas vezes.

Vídeo-aulas: maneira unix

Aqui está meu formato de gravação. O número do título é igual ao número do slide, as interrupções são destacadas em vermelho. Qualquer editor é adequado para preparação, mas é melhor usar um processador de texto completo - por exemplo, OnlyOffice.

Voz sobre os slides

O que posso dizer - ligue o microfone e escreva :)

A experiência mostra que a qualidade de gravação, mesmo do microfone externo mais barato, é incomparavelmente melhor do que a do microfone embutido de um laptop. Se você quer equipamentos de qualidade, eu recomendo este artigo.

Para gravar eu usei gravador de áudio – um aplicativo muito simples para gravação de som. Você pode pegar, por exemplo, aqui:

sudo add-apt-repository ppa:audio-recorder/ppa
sudo apt-get update
sudo apt-get install audio-recorder

O principal nesta etapa é nomear os arquivos corretamente. O nome deve consistir no número do slide e no número do fragmento. Os fragmentos são numerados com números ímpares - 1, 3, 5, etc. Assim, para o slide, cujo texto é mostrado na imagem, serão criados dois arquivos: 002-1.mp3 и 002-3.mp3.

Se você gravou todos os vídeos de uma vez em uma sala silenciosa, não precisa fazer mais nada com eles. Se você gravou em várias etapas, é melhor equalizar o nível de volume:

mp3gain -r *.mp3

Utilities ganho de mp3 Por alguma razão, não está nos repositórios padrão, mas você pode obtê-lo aqui:

sudo add-apt-repository ppa:flexiondotorg/audio
sudo apt-get update
sudo apt-get install mp3gain

Depois de tudo isso, você precisa gravar outro arquivo com silêncio. É necessário adicionar trilha sonora aos vídeos silenciosos: se um vídeo tem trilha sonora e o outro não, fica difícil colar esses vídeos. O silêncio pode ser gravado com um microfone, mas é melhor criar um arquivo no editor Audacity. O comprimento do arquivo deve ser de pelo menos um segundo (mais é possível) e deve ser nomeado silêncio.mp3

Preparando vídeos de interrupção

Aqui tudo é limitado apenas pela sua imaginação. Você pode usar um editor para editar vídeos Avidemux. Era uma vez nos repositórios padrão, mas por algum motivo foi cortado. Isso não vai nos impedir:

sudo add-apt-repository ppa:ubuntuhandbook1/avidemux
sudo apt-get update
sudo apt-get install avidemux2.7-qt5

Existem muitas instruções para trabalhar com este editor na Internet e, em princípio, tudo lá é intuitivo. É importante atender a várias condições.

Primeiro, a resolução do vídeo deve corresponder à resolução de vídeo desejada. Para fazer isso, você precisa usar dois filtros no “vídeo de saída”: swsResize para alterar a resolução e “adicionar campos” para transformar um filme soviético de “formato estreito” em um formato amplo. Todos os outros filtros são opcionais. Por exemplo, se alguém não entender por que a declaração do Sr. Sharikov está no fragmento em discussão, usando o filtro “adicionar logotipo”, você pode sobrepor o logotipo do PostgreSQL no topo do “Coração de Cachorro”.

Em segundo lugar, todos os fragmentos devem usar a mesma taxa de quadros. Eu uso 25 quadros por segundo porque minha câmera e os antigos filmes soviéticos me proporcionam isso. Se o filme que você está cortando foi filmado em uma velocidade diferente, use o filtro Reamostrar vídeo.

Terceiro, todos os fragmentos devem ser compactados com o mesmo codec e embalados nos mesmos contêineres. Portanto, em Avidemux para o formato, selecione vídeo – “MPEG4 AVC (x264)", áudio -"AAC (FAAC)", Formato de saída - "Muxer MP4".

Em quarto lugar, é importante nomear corretamente os vídeos cortados. O nome do arquivo deve consistir no número do slide e no número do fragmento. Os fragmentos são numerados com números pares, começando em 2. Assim, para o quadro em discussão, o vídeo com a interrupção deve ser chamado 002-2.mp4

Depois que os vídeos estiverem prontos, você precisará transferi-los para o diretório com fragmentos. Configurações avidemux diferem das configurações ffmpeg por padrão com parâmetros misteriosos tbr, tbn, tbc. Eles não afetam a reprodução, mas não permitem que os vídeos sejam colados. Então vamos recodificar:

for f in ???-?.mp4;
do
  ffmpeg -hide_banner -y -i "${f}" -c copy -r 25 -video_track_timescale 12800 ../clips/$f
done

Fotografando protetores de tela

Aqui também tudo é simples: você filma tendo como pano de fundo algum esquema inteligente, coloca os vídeos resultantes em um catálogo rec, e de lá transfira-o para o diretório com fragmentos. As regras de nomenclatura são as mesmas das aspas de interrupção, o comando de recodificação é o seguinte:

ffmpeg -y -i source_file -r 25 -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -s 1280x720 -ar 44100 -ac 2 ../clips/xxx-x.mp4

Se você planeja iniciar o vídeo com seu discurso, nomeie este fragmento 000-1.mp4

Fazendo molduras a partir de imagens estáticas

É hora de editar vídeos a partir de imagens e sons estáticos. Isso é feito com o seguinte script:

#!/bin/bash

for sound in sound/*.mp3
do
  soundfile=${sound##*/}
  chunk=${soundfile%%.mp3}
  clip=${chunk}.mp4
  pic=slide/${chunk%%-?}.png

  duration=$(soxi -D ${sound} 2>/dev/null)
  echo ${sound} ${pic} ${clip} " - " ${duration}

  ffmpeg -hide_banner -y -loop 1 -i ${pic} -i ${sound} -r 25 -vcodec libx264 -tune stillimage -pix_fmt yuv420p -profile:v high -coder 1 -t ${duration} clips/${clip}
done

Observe que a duração do arquivo de áudio é determinada primeiro pelo utilitário Soxie, em seguida, o vídeo com a duração necessária é editado. Todas as recomendações que encontrei são mais simples: em vez de uma bandeira -t ${duração} bandeira é usada -mais curto. De fato ffmpeg determina a duração do mp3 de forma muito aproximada e, durante a edição, a duração da trilha de áudio pode diferir muito (em um ou dois segundos) da duração da trilha de vídeo. Não importa se o vídeo inteiro consiste em um único quadro, mas quando você cola esse vídeo com interrupções na borda, ocorrem efeitos de gagueira extremamente desagradáveis.

Outra maneira de determinar a duração de um arquivo mp3 é usar mp3info. Ela também comete erros, e às vezes ffmpeg dá mais do que mp3info, às vezes é o contrário, às vezes os dois mentem – não notei nenhum padrão. E aqui Soxi funciona corretamente.

Para instalar este utilitário útil, faça o seguinte:

sudo apt-get install sox libsox-fmt-mp3

Fazendo transições entre slides

Uma transição é um pequeno vídeo em que um slide se transforma em outro. Para fazer esses vídeos, pegamos slides em pares e usamos imagemagick transformar um no outro:

#!/bin/bash

BUFFER=$(mktemp -d)

for pic in slide/*.png
do
  if [[ ${prevpic} != "" ]]
  then
    clip=${pic##*/}
    clip=${clip/.png/-0.mp4}
    #
    # генерируем картинки
    #
    ./fade.pl ${prevpic} ${BUFFER} 1280 720 5 direct 0
    ./fade.pl ${pic} ${BUFFER} 1280 720 5 reverse 12
    #
    # закончили генерировать картинки
    #
    ffmpeg -y -hide_banner -i "${BUFFER}/%03d.png" -i sound/silence.mp3 -r 25 -y -acodec aac -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -shortest clips/${clip}
    rm -f ${BUFFER}/*
  fi
  prevpic=${pic}
done

rmdir ${BUFFER}

Por algum motivo eu queria que o slide fosse espalhado com pontos, e então o próximo slide fosse montado a partir dos pontos, e para isso escrevi um script chamado fade.pl Tendo imagemagick, um usuário real do Linux criará qualquer efeito especial, mas se alguém gostar da minha ideia de dispersão, aqui está o script:

#!/usr/bin/perl

use strict;
use warnings;
use locale;
use utf8;
use open qw(:std :utf8);
use Encode qw(decode);
use I18N::Langinfo qw(langinfo CODESET);

my $codeset = langinfo(CODESET);
@ARGV = map { decode $codeset, $_ } @ARGV;

my ($source, $target, $width, $height, $pixsize, $rev, $file_no) = @ARGV;

my @rects;
$rects[$_] = "0123456789AB" for 0..$width*$height/$pixsize/$pixsize/12 - 1;

for my $i (0..11) {
  substr($_,int(rand(12-$i)),1) = "" for (@rects);
  my $s = $source;
  $s =~ s#^.*/##;
  open(PICTURE,"| convert - -transparent white PNG:- | convert "$source" - -composite "$target/".substr("00".($file_no+$i),-3).".png"");
  printf PICTURE ("P3n%d %dn255n",$width,$height);
  for my $row (1..$height/$pixsize/3) {
    for my $j (0..2) {
      my $l = "";
      for my $col (1..$width/$pixsize/4) {
        for my $k (0..3) {
          $l .= (index($rects[($row-1)*$width/$pixsize/4+$col-1],sprintf("%1X",$j*4+$k))==-1 xor $rev eq "reverse") ? "0 0 0n" : "255 255 255n" for (1..$pixsize);
        }
      }
      print PICTURE ($l) for (1..$pixsize);
    }
  }
  close(PICTURE);
}

Montamos o vídeo finalizado

Agora temos todos os fragmentos. Vá para o catálogo clipes e monte o filme finalizado usando dois comandos:

ls -1 ???-?.mp4 | gawk -e '{print "file " $0}' >list.txt
ffmpeg -y -hide_banner -f concat -i list.txt -c copy MOVIE.mp4

Divirta-se assistindo aos seus alunos agradecidos!

Fonte: habr.com

Adicionar um comentário