Palestras em Vídeo: maneira unix


A quarentena é um momento maravilhoso para aprender algo. No entanto, como você sabe, para alguém aprender algo, alguém deve ensinar. Se você tem uma apresentação com a qual deseja falar com um milionésimo público, ganhando fama mundial, este artigo é para você. Aqui você encontrará instruções passo a passo sobre como criar um vídeo a partir da apresentação.

Marcamos o modo de gravar “comentários em áudio” no PowerPoint e exportar a apresentação em vídeo como trivial, sem fornecer um décimo das possibilidades necessárias para um vídeo realmente interessante.

Para começar, decidiremos quais quadros precisamos:

  1. Na verdade, desliza com uma narração
  2. Mudança de slide
  3. Interromper citações de filmes populares
  4. Alguns quadros com a fisionomia do palestrante e do gato favorito (opcional)


Crie uma estrutura de diretórios


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

Atribuição de catálogos na ordem de listagem: filmes dos quais extrairemos aspas (clipart), fragmentos de nosso futuro vídeo (clipes), vídeos da câmera (rec), slides de imagem (slide), som (som).

Fazendo uma apresentação em imagens


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

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

Se não houver esse comando, instale o pacote poppler-utils (instruções para o Ubuntu; se você possui o Arch, já sabe o que fazer sem mim).

A seguir, acredito que o vídeo está sendo preparado no formato HD Ready, ou seja, 1280 × 720. Uma apresentação com um tamanho horizontal de 10 polegadas fornece exatamente esse tamanho ao descarregar (consulte o parâmetro -r 128).

Estamos preparando o texto


Se você deseja criar um material realmente interessante, primeiro seu discurso deve ser escrito. Eu também pensei que poderia dizer o texto sem preparação, principalmente porque tenho uma boa experiência de palestra. Mas uma coisa é tocar ao vivo e outra é gravar vídeo. Não seja preguiçoso - o tempo gasto na digitação será recompensado mais de uma vez.



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

Slides sonoros


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 com o microfone embutido no laptop. Se você deseja equipamentos de alta qualidade, recomendo este artigo .

Para a gravação, usei o gravador de áudio - um aplicativo de gravação muito simples. Você pode pegá-lo, 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 é a nomeação correta de arquivos. O nome deve consistir em um número de slide e um número de fragmento. Os fragmentos são numerados com números ímpares - 1, 3, 5, etc. Portanto, para um slide, cujo texto é mostrado na figura, dois arquivos serão criados: 002-1.mp3 e 002-3.mp3 .

Se você gravou todos os vídeos de uma só vez em uma sala silenciosa, nada poderá ser feito com eles. Se você gravou em várias etapas, é melhor equalizar o nível do volume:

mp3gain -r *.mp3

Por alguma razão, os utilitários mp3gain não estão 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 escrever outro arquivo com silêncio. É necessário adicionar uma trilha sonora aos clipes silenciosos: se um clipe tem uma trilha sonora e o outro não, é difícil colar esses clipes. O silêncio pode ser gravado no microfone, mas é melhor criar um arquivo no editor do Audacity . O arquivo deve ter pelo menos um segundo de duração (mais longo) e o silêncio.mp3 deve ser chamado

Rolos de cozimento


Tudo aqui é limitado apenas pela sua imaginação. Você pode usar o editor Avidemux para editar o vídeo . Uma vez que estava em repositórios padrão, mas por algum motivo foi serrado. Isso não vai nos parar:

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

Instruções para trabalhar com este editor no mar, sim, em princípio, tudo é intuitivo lá. É importante observar várias condições.

Primeiro, a resolução do filme deve corresponder à resolução de destino do filme. Para fazer isso, no "vídeo para saída", você precisa usar dois filtros: swsResize para alterar a resolução e "adicionar campos" para tornar o filme de formato estreito soviético em um formato amplo. Todos os outros filtros são opcionais. Por exemplo, se alguém não entender qual é a afirmação de Sharikov no fragmento em discussão, usando o filtro "adicionar logotipo", você pode adicionar o logotipo do PostgreSQL em cima de "Coração do cão".

Em segundo lugar, todos os fragmentos devem usar a mesma taxa de quadros. Eu uso 25 quadros por segundo, porque muito da minha câmera e filmes soviéticos antigos. Se o filme do qual você cortou o quadro for filmado em uma velocidade diferente, use o filtro “Reamostrar vídeo”.

Em terceiro lugar, todos os fragmentos devem ser compactados com o mesmo codec e embalados nos mesmos recipientes. Portanto, no Avidemux para o formato, selecione o vídeo - “ Mpeg4 AVC (x264) ”, áudio - “ AAC (Faac) ”, o formato de saída - “ MP4 Muxer ”.

Em quarto lugar, é importante nomear corretamente os clipes cortados. O nome do arquivo deve consistir em um número de slide e um número de fragmento. Os fragmentos são numerados com números pares, começando com 2. Portanto, para o quadro em discussão, o clipe com a recorte deve ser chamado 002-2.mp4

Depois que os clipes estiverem prontos, você precisará transferi-los para o diretório com os fragmentos. As configurações do avidemux diferem das configurações padrão do ffmpeg pelos parâmetros misteriosos tbr, tbn, tbc. Eles não afetam a reprodução, mas não permitem a colagem dos roletes. Portanto, recodificamos:

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

Removemos protetores de tela


Aqui também tudo é simples: tire fotos no cenário de algum tipo de esquema inteligente, coloque os clipes no diretório rec e depois transfira-os para o diretório com fragmentos. As regras de nomenclatura são iguais às quebras de cotaçã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

Criamos quadros a partir de imagens estáticas


É hora de montar clipes de imagens e sons estáticos. Isso é feito com este 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 primeiro a duração do arquivo de som é determinada pelo utilitário soxi e, em seguida, o vídeo com a duração desejada é montado. Todas as recomendações que encontrei são mais simples: em vez do sinalizador -t $ {duration} , o sinalizador -shortest é usado . De fato, o ffmpeg determina a duração do mp3 aproximadamente e, durante a instalação, a duração da faixa de áudio pode ser muito (um a dois segundos) diferente da duração da faixa de vídeo. Não importa se o vídeo inteiro consiste em um único quadro, mas ao colar um filme com uma quebra na borda, ocorrem efeitos extremamente desagradáveis ​​com gagueira.

Outra maneira de determinar a duração de um arquivo mp3 é usar o mp3info . Ela também está enganada, e às vezesO ffmpeg fornece mais do que mp3info , às vezes vice-versa, às vezes ambos mentem - não notei nenhum padrão. Mas o soxi está funcionando corretamente.

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

sudo apt-get install sox libsox-fmt-mp3

Fazendo transições entre slides


Transição - um pequeno vídeo no qual um slide se transforma em outro. Para fazer esses vídeos, faça slides em pares e use o imagemagick para 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 alguma razão, eu queria que o slide se espalhasse em pontos e, em seguida, o próximo slide foi montado a partir dos pontos, e por isso escrevi um script chamado fade.pl Tendo o imagemagick , um verdadeiro Linuxoid cria qualquer efeito especial, mas se alguém gostar da minha ideia de espalhar, 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 ("P3\n%d %d\n255\n",$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 0\n" : "255 255 255\n" for (1..$pixsize);
        }
      }
      print PICTURE ($l) for (1..$pixsize);
    }
  }
  close(PICTURE);
}

Monte o rolo acabado


Agora temos todos os fragmentos. Vamos ao diretório de clipes e coletamos o filme finalizado com 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

Aproveite a sua visualização para seus alunos agradecidos!

All Articles