Videoconferencias: camino unix

Videoconferencias: camino unix
La cuarentena es un momento maravilloso para aprender algo. Sin embargo, como comprenderás, para que alguien aprenda algo, alguien debe enseñar. Si tiene una presentación que desea hacer ante una audiencia de millones y ganar fama mundial, entonces este artículo es para usted. Aquí encontrarás instrucciones paso a paso sobre cómo hacer un vídeo a partir de tu presentación.

Descartamos el camino de grabar “comentarios de audio” en PowerPoint y exportar la presentación a video por considerarlo trivial y no proporcionar una décima parte de las capacidades necesarias para un video realmente interesante.

Primero, decidamos qué marcos necesitamos:

  1. Las diapositivas reales con voz en off.
  2. cambio de diapositiva
  3. Citas de películas populares.
  4. Varios fotogramas con la cara del profesor y su gato favorito (opcional)

Creando una estructura de directorio

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

El propósito de los directorios en el orden de listado: películas de las que extraeremos citas (clipart), fragmentos de nuestro futuro video (clips), videos de la cámara (rec), diapositivas en forma de imágenes (slide), sonido. (sonido).

Hacer una presentación en imágenes.

Para un verdadero usuario de Linux con los ojos rojos, hacer una presentación en forma de imágenes no presenta ningún problema. Permítanme recordarles que un documento en formato pdf se puede analizar en imágenes usando el comando

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

Si no existe tal comando, instale el paquete usted mismo poppler-utils (instrucciones para Ubuntu; si tienes Arch, entonces sabes perfectamente qué hacer sin mí).

Aquí y más, creo que el vídeo está preparado en formato HD Ready, es decir, 1280x720. Una presentación con un tamaño horizontal de 10 pulgadas da exactamente este tamaño cuando está descargada (consulte el parámetro -r 128).

Preparando el texto

Si quieres crear un material realmente excelente, primero debes escribir tu discurso. También pensé que podría hablar el texto sin preparación, especialmente porque tengo buena experiencia dando conferencias. Pero una cosa es tocar en vivo y otra grabar un vídeo. No seas perezoso: el tiempo dedicado a escribir te recompensará muchas veces.

Videoconferencias: camino unix

Aquí está mi formato de grabación. El número en el título es igual al número de la diapositiva, las interrupciones están resaltadas en rojo. Cualquier editor es adecuado para la preparación, pero es mejor llevar un procesador de textos completo, por ejemplo, OnlyOffice.

Voz sobre las diapositivas

¿Qué puedo decir? Enciende el micrófono y escribe :)

La experiencia demuestra que la calidad de grabación, incluso con el micrófono externo más barato, es incomparablemente mejor que con el micrófono integrado de un ordenador portátil. Si quieres equipo de calidad, te lo recomiendo. este articulo.

Para grabar utilicé grabador de audio – una aplicación muy sencilla para grabación de sonido. Puedes tomarlo, por ejemplo, aquí:

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

Lo principal en este paso es nombrar los archivos correctamente. El nombre debe consistir en el número de diapositiva y el número de fragmento. Los fragmentos están numerados con números impares: 1, 3, 5, etc. Entonces, para la diapositiva cuyo texto se muestra en la imagen, se crearán dos archivos: 002-1.mp3 и 002-3.mp3.

Si grabaste todos los vídeos a la vez en una habitación silenciosa, no tienes que hacer nada más con ellos. Si grabó en varios pasos, es mejor ecualizar el nivel de volumen:

mp3gain -r *.mp3

Utilidades mp3gain Por alguna razón no está en los repositorios estándar, pero puedes conseguirlo aquí:

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

Después de todo esto, necesitas grabar otro archivo en silencio. Es necesario agregar una banda sonora a los videos mudos: si un video tiene banda sonora y el otro no, entonces es difícil unir estos videos. El silencio se puede grabar desde un micrófono, pero es mejor crear un archivo en el editor. Audacity. La longitud del archivo debe ser de al menos un segundo (es posible más) y debe tener un nombre silencio.mp3

Preparando vídeos de interrupción

Aquí todo está limitado sólo por tu imaginación. Puedes usar un editor para editar videos. Avidemux. Érase una vez en los repositorios estándar, pero luego, por alguna razón, se eliminó. Esto no nos detendrá:

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

Hay muchas instrucciones para trabajar con este editor en Internet y, en principio, todo es intuitivo. Es importante cumplir varias condiciones.

Primero, la resolución del video debe coincidir con la resolución del video de destino. Para hacer esto, necesita usar dos filtros en el "video de salida": swsResize para cambiar la resolución y "agregar campos" para convertir una película soviética de "formato estrecho" en un formato ancho. Todos los demás filtros son opcionales. Por ejemplo, si alguien no entiende por qué la declaración del Sr. Sharikov está en el fragmento en discusión, usando el filtro "agregar logotipo", puede superponer el logotipo de PostgreSQL encima del "Corazón de perro".

En segundo lugar, todos los fragmentos deben utilizar la misma velocidad de fotogramas. Utilizo 25 cuadros por segundo porque mi cámara y las viejas películas soviéticas me dan eso. Si la película que estás cortando se filmó a una velocidad diferente, usa el filtro Resample Video.

En tercer lugar, todos los fragmentos deben comprimirse con el mismo códec y empaquetarse en los mismos contenedores. Por lo tanto, en Avidemux para el formato, seleccione vídeo – “MPEG4 AVC (x264)", audio - "CAA (FAAC)", formato de salida - "Muxer MP4".

En cuarto lugar, es importante nombrar correctamente los vídeos cortados. El nombre del archivo debe consistir en el número de diapositiva y el número de fragmento. Los fragmentos están numerados con números pares, comenzando desde 2. Por lo tanto, para el cuadro en discusión, el video con la interrupción debe llamarse 002-2.mp4

Una vez que los videos estén listos, debes transferirlos al directorio con fragmentos. Ajustes avidemux difieren de la configuración ffmpeg por defecto con parámetros misteriosos tbr, tbn, tbc. No afectan a la reproducción, pero no permiten pegar los vídeos. Así que recodificamos:

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

Salvapantallas de disparo

Aquí también todo es simple: filmas con algún esquema ingenioso como telón de fondo, colocas los videos resultantes en un catálogo rec, y desde allí transfiérelo al directorio con fragmentos. Las reglas de nomenclatura son las mismas que para las comillas de interrupción, el comando de grabación es el siguiente:

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

Si planeas comenzar el video con tu discurso, nombra este fragmento. 000-1.mp4

Hacer marcos a partir de imágenes estáticas

Es hora de editar videos a partir de imágenes y sonido estáticos. Esto se hace con el siguiente 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

Tenga en cuenta que la duración del archivo de audio la determina primero la utilidad. soxiy luego se edita el video de la duración requerida. Todas las recomendaciones que encontré son más simples: en lugar de una bandera -t ${duración} se utiliza la bandera -más corto. De hecho ffmpeg determina la duración del mp3 de forma muy aproximada y, durante la edición, la duración de la pista de audio puede diferir mucho (en uno o dos segundos) de la duración de la pista de vídeo. Esto no importa si todo el vídeo consta de un solo fotograma, pero cuando pegas un vídeo de este tipo con interrupciones en el borde, se producen efectos de tartamudeo extremadamente desagradables.

Otra forma de determinar la duración de un archivo mp3 es utilizar mp3info. Ella también comete errores y a veces ffmpeg da más que mp3infoA veces es al revés, a veces ambos mienten; no noté ningún patrón. Y aquí soxi Funciona correctamente.

Para instalar esta útil utilidad, haga esto:

sudo apt-get install sox libsox-fmt-mp3

Hacer transiciones entre diapositivas

Una transición es un vídeo corto en el que una diapositiva se convierte en otra. Para hacer estos videos, tomamos diapositivas en pares y usando ImageMagick transformar uno en el otro:

#!/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 alguna razón, quería que la diapositiva estuviera salpicada de puntos y luego la siguiente diapositiva se ensamblara a partir de los puntos, y para ello escribí un guión llamado desvanecerse.pl Teniendo ImageMagick, un usuario real de Linux creará cualquier efecto especial, pero si a alguien le gusta mi idea con la dispersión, aquí está el 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 el vídeo terminado.

Ahora tenemos todos los fragmentos. Ir al catalogo clips y ensamblar la película terminada usando dos 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 viendo a tus estudiantes agradecidos!

Fuente: habr.com

Añadir un comentario