Videoconferencias: xeito unix

Videoconferencias: xeito unix
A corentena é un momento marabilloso para aprender algo. Non obstante, como entendes, para que alguén aprenda algo, alguén debe ensinar. Se tes unha presentación que queres darlle a unha audiencia de millóns e gañar fama mundial, este artigo é para ti. Aquí atoparás instrucións paso a paso sobre como facer un vídeo a partir da túa presentación.

Descartamos o camiño de gravar "comentarios de audio" en PowerPoint e exportar a presentación a vídeo como algo trivial e non proporcionar unha décima parte das capacidades necesarias para un vídeo realmente xenial.

En primeiro lugar, imos decidir que marcos necesitamos:

  1. As diapositivas reais con voz en off
  2. Cambio de diapositivas
  3. Citas de películas populares
  4. Varios fotogramas coa cara do profesor e o seu gato favorito (opcional)

Creación dunha estrutura de directorios

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

O propósito dos directorios na orde de listaxe: películas das que tiraremos comiñas (clipart), fragmentos do noso futuro vídeo (clips), vídeos da cámara (rec), diapositivas en forma de imaxes (diapositiva), son (son).

Realización dunha presentación en imaxes

Para un verdadeiro usuario de Linux con ollos vermellos, facer unha presentación en forma de imaxes non presenta ningún problema. Permíteme lembrarche que un documento en formato pdf pode ser analizado en imaxes usando o comando

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

Se non existe tal comando, instale o paquete vostede mesmo poppler-utils (instrucións para Ubuntu; se tes Arch, entón sabes perfectamente que facer sen min).

Aquí e ademais, creo que o vídeo está preparado en formato HD Ready, é dicir, 1280x720. Unha presentación cun tamaño horizontal de 10 polgadas dá exactamente este tamaño cando se descarga (consulte o parámetro -r 128).

Preparación do texto

Se queres facer un material moi bo, primeiro debes escribir o teu discurso. Tamén pensei que podería falar o texto sen preparación, sobre todo porque teño unha boa experiencia en conferencias. Pero unha cousa é actuar en directo e outra cousa é gravar un vídeo. Non sexas preguiceiro: o tempo dedicado a escribir vai pagar moitas veces.

Videoconferencias: xeito unix

Aquí está o meu formato de gravación. O número do título é igual ao número da diapositiva, as interrupcións están resaltadas en vermello. Calquera editor é adecuado para a preparación, pero é mellor levar un procesador de textos completo, por exemplo, SóOffice.

Voz sobre as diapositivas

Que podo dicir: acende o micrófono e escribe :)

A experiencia demostra que a calidade de gravación incluso do micrófono externo máis barato é incomparablemente mellor que o do micrófono incorporado dun portátil. Se queres equipamento de calidade, recoméndoo aquí está este artigo.

Para gravar usei gravadora de audio – unha aplicación moi sinxela para a gravación de son. Podes tomalo, por exemplo, aquí:

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

O principal neste paso é nomear correctamente os ficheiros. O nome debe constar do número da diapositiva e do número do fragmento. Os fragmentos están numerados con números impares: 1, 3, 5, etc. Así, para a diapositiva, cuxo texto se mostra na imaxe, crearanse dous ficheiros: 002-1.mp3 и 002-3.mp3.

Se gravaches todos os vídeos á vez nunha sala tranquila, non tes que facer nada máis con eles. Se gravou en varios pasos, é mellor igualar o nivel de volume:

mp3gain -r *.mp3

Utilidades mp3gain Por algún motivo non está nos repositorios estándar, pero podes obtelo aquí:

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

Despois de todo isto, cómpre gravar outro ficheiro con silencio. É necesario engadir unha banda sonora aos vídeos silenciosos: se un vídeo ten unha banda sonora e o outro non, é difícil pegar estes vídeos. O silencio pódese gravar desde un micrófono, pero é mellor crear un ficheiro no editor Audacia. A lonxitude do ficheiro debe ser de polo menos un segundo (é posible máis) e debe ser nomeado silencio.mp3

Preparando vídeos de interrupción

Aquí todo está limitado só pola túa imaxinación. Podes usar un editor para editar vídeos Avidemux. Érase unha vez nos repositorios estándar, pero logo por algún motivo foi cortado. Isto non nos deterá:

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

Hai moitas instrucións para traballar con este editor en Internet e, en principio, todo é intuitivo. É importante cumprir varias condicións.

En primeiro lugar, a resolución do vídeo debe coincidir coa resolución de vídeo de destino. Para iso, cómpre usar dous filtros no "vídeo de saída": swsResize para cambiar a resolución e "engadir campos" para converter unha película soviética de "formato estreito" nun formato amplo. Todos os demais filtros son opcionais. Por exemplo, se alguén non entende por que a declaración do Sr. Sharikov está no fragmento en discusión, usando o filtro "engadir logotipo", pode superpoñer o logotipo de PostgreSQL encima do "Corazón de can".

En segundo lugar, todos os fragmentos deben usar a mesma velocidade de fotogramas. Eu uso 25 fotogramas por segundo porque a miña cámara e as antigas películas soviéticas danme moito. Se a película da que estás cortando foi filmada a unha velocidade diferente, utiliza o filtro Remostrar vídeo.

En terceiro lugar, todos os fragmentos deben ser comprimidos co mesmo códec e empaquetados nos mesmos recipientes. Polo tanto en Avidemux para o formato, seleccione o vídeo - "MPEG4 AVC (x264)", audio - "AAC (FAAC)", formato de saída - "Muxer MP4».

En cuarto lugar, é importante nomear correctamente os vídeos cortados. O nome do ficheiro debe consistir no número de diapositiva e o número de fragmento. Os fragmentos numéranse con números pares, a partir de 2. Así, para o fotograma en discusión, o vídeo coa interrupción debería chamarse 002-2.mp4

Despois de que os vídeos estean listos, cómpre transferilos ao directorio con fragmentos. Configuración avidemux difiren da configuración ffmpeg por defecto con parámetros misteriosos tbr, tbn, tbc. Non afectan á reprodución, pero non permiten que se peguen os vídeos. Entón imos recodificar:

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

Disparando salvapantallas

Aquí, tamén, todo é sinxelo: disparas no contexto dun esquema intelixente, pon os vídeos resultantes nun catálogo rec, e desde alí transfórmaa ao directorio con fragmentos. As regras de nomeamento son as mesmas que para as comiñas de interrupción, o comando de recodificación é 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 pensas comezar o vídeo co teu discurso, ponlle un nome a este fragmento 000-1.mp4

Creación de marcos a partir de imaxes estáticas

É hora de editar vídeos a partir de imaxes estáticas e de son. Isto faise co 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

Teña en conta que a duración do ficheiro de audio vén determinada primeiro pola utilidade soxi, e despois edítase o vídeo da duración requirida. Todas as recomendacións que atopei son máis sinxelas: en lugar dunha bandeira -t ${duración} úsase bandeira - máis curto... En realidade ffmpeg determina a duración do mp3 de forma moi aproximada e, durante a edición, a duración da pista de audio pode diferir moito (un ou dous segundos) da duración da pista de vídeo. Isto non importa se todo o vídeo consta dun único fotograma, pero cando pegas un vídeo deste tipo con interrupcións no bordo, prodúcense efectos de tartamudeo extremadamente desagradables.

Outra forma de determinar a duración dun ficheiro mp3 é usar información mp3. Ela tamén comete erros, e ás veces ffmpeg dá máis que información mp3, ás veces é ao revés, ás veces ambos minten: non notei ningún patrón. E aquí soxi funciona correctamente.

Para instalar esta utilidade útil, faga o seguinte:

sudo apt-get install sox libsox-fmt-mp3

Facendo transicións entre diapositivas

Unha transición é un vídeo curto no que unha diapositiva se converte noutra. Para facer este tipo de vídeos, facemos diapositivas por parellas e usando ImageMagick transformar un 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 algún motivo quería que a diapositiva estivese esparexida con puntos, e despois a seguinte diapositiva sería ensamblada a partir dos puntos, e para iso escribín un guión chamado esvaecer.pl Tendo ImageMagick, un usuario de Linux real creará calquera efecto especial, pero se a alguén lle gusta a miña idea coa dispersión, aquí 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 rematado

Agora temos todos os fragmentos. Ir ao catálogo Clips e montar a película rematada usando dous comandos:

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

Disfruta vendo aos teus alumnos agradecidos!

Fonte: www.habr.com

Engadir un comentario