Conferencias de video: unix way


La cuarentena es un momento maravilloso para aprender algo. Sin embargo, como saben, para que alguien aprenda algo, alguien debe enseñar. Si tiene una presentación con la que desea hablar ante una audiencia número un millón y ganar fama mundial, entonces este artículo es para usted. Aquí encontrará instrucciones paso a paso sobre cómo hacer un video desde la presentación.

Marcamos la forma de grabar "comentarios de sonido" en PowerPoint y exportar la presentación en video como algo trivial y sin dar una décima parte de las posibilidades que se necesitan para un video realmente genial.

Para empezar, decidiremos qué cuadros necesitamos:

  1. En realidad se desliza con una voz en off
  2. Cambio de diapositiva
  3. Interrumpir citas de películas populares
  4. Unos cuadros con la fisonomía del profesor y el gato favorito (opcional)


Crear una estructura de directorio


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

Asignación de catálogos en el orden de inclusión: películas de las que sacaremos citas (imágenes prediseñadas), fragmentos de nuestro futuro video (clips), videos de la cámara (rec), diapositivas de imagen (diapositiva), sonido (sonido).

Hacer una presentación en imágenes


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

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

Si no existe dicho comando, instale el paquete poppler-utils (instrucciones para Ubuntu; si tiene Arch, entonces ya sabe qué hacer sin mí).

En lo sucesivo, creo que el video se está preparando en formato HD Ready, es decir, 1280 × 720. Una presentación con un tamaño horizontal de 10 pulgadas proporciona exactamente este tamaño cuando se descarga (consulte la opción -r 128).

Estamos preparando el texto


Si quieres hacer material realmente genial, primero debes escribir tu discurso. También pensé que podía decir el texto sin preparación, especialmente porque tengo una buena experiencia en conferencias. Pero una cosa es tocar en vivo y otra es grabar video. No seas perezoso: el tiempo dedicado a escribir valdrá la pena más de una vez.



Aquí está mi formato de grabación. El número en el encabezado es igual al número de la diapositiva, las interrupciones se resaltan en rojo. Cualquier editor es adecuado para la preparación, pero es mejor tomar un procesador de texto completo, por ejemplo, OnlyOffice .

Diapositivas sonoras


¿Qué puedo decir? Encienda el micrófono y escriba :) La

experiencia muestra que la calidad de grabación incluso desde el micrófono externo más barato es incomparablemente mejor que con el micrófono incorporado de la computadora portátil. Si desea equipos de alta calidad, le recomiendo este artículo .

Para la grabación, utilicé una grabadora de audio , una aplicación de grabación muy simple. 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 el nombre apropiado del archivo. El nombre debe consistir en un número de diapositiva y un 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 y 002-3.mp3 .

Si grabaste todos los videos a la vez en una habitación tranquila, entonces no se puede hacer nada con ellos. Si grabó en varias etapas, es mejor ecualizar el nivel de volumen:

mp3gain -r *.mp3

Por alguna razón, las utilidades de mp3gain no están en los repositorios estándar, pero puede obtenerlo aquí:

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

Después de todo esto, debe escribir otro archivo con silencio. Es necesario agregar una banda sonora a los clips silenciosos: si hay una banda sonora en un clip y no en el otro, entonces es difícil pegar estos clips. El silencio se puede grabar desde el micrófono, pero es mejor crear un archivo en el editor de Audacity . El archivo debe tener al menos un segundo de largo (más largo) y se debe llamar a silence.mp3

Rodillos de cocción


Todo aquí está limitado solo por tu imaginación. Puede usar el editor Avidemux para editar el video . Una vez que estaba en repositorios estándar, pero luego por alguna razón fue aserrada. Esto no nos detendrá:

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

Instrucciones para trabajar con este editor en el mar, sí, en principio, todo es intuitivo allí. Es importante observar varias condiciones.

Primero, la resolución de la película debe coincidir con la resolución objetivo de la película. Para hacer esto, en el "video para salir" necesita usar dos filtros: swsResize para cambiar la resolución y "agregar campos" para hacer que la película soviética de "formato estrecho" sea de formato ancho. Todos los demás filtros son opcionales. Por ejemplo, si alguien no comprende cuál es la declaración del Sr. Sharikov en el fragmento en discusión, utilizando el filtro "agregar logotipo", puede agregar el logotipo de PostgreSQL en la parte superior del "Corazón del perro".

En segundo lugar, todos los fragmentos deben usar la misma velocidad de fotogramas. Utilizo 25 cuadros por segundo, porque mucho me da mi cámara y viejas películas soviéticas. Si la película desde la que corta el cuadro se graba a una velocidad diferente, use el filtro "Resample Video".

En tercer lugar, todos los fragmentos deben comprimirse con el mismo códec y empacarse en los mismos contenedores. Por lo tanto, en Avidemux para el formato, seleccione el video - “ Mpeg4 AVC (x264) ”, el audio - “ AAC (Faac) ”, el formato de salida - “ MP4 Muxer ”.

Cuarto, es importante nombrar correctamente los clips cortados. El nombre del archivo debe consistir en un número de diapositiva y un número de fragmento. Los fragmentos están numerados con números pares, comenzando con 2. Por lo tanto, para el marco en discusión, el clip con el corte debe llamarse 002-2.mp4

Después de que los clips estén listos, debe transferirlos al directorio con los fragmentos. La configuración de avidemux difiere de la configuración predeterminada de ffmpeg por los misteriosos parámetros tbr, tbn, tbc. No afectan la reproducción, pero no permiten que los rodillos se peguen. Por lo tanto, recodificamos:

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

Eliminamos protectores de pantalla


Todo aquí también es simple: dispare en el fondo de algún tipo de esquema inteligente, coloque los videos recibidos en el directorio rec y desde allí transfiéralos al directorio con fragmentos. Las reglas de nomenclatura son las mismas que para los saltos de comillas, el comando de recodificació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 planea comenzar el video con su discurso, nombre este fragmento 000-1.mp4

Hacemos marcos a partir de imágenes estáticas.


Es hora de montar clips de imágenes estáticas y sonido. Esto se hace con 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

Tenga en cuenta que primero la duración del archivo de sonido está determinada por la utilidad soxi , y luego se monta el video de la duración deseada. Todas las recomendaciones que encontré son más simples: en lugar del indicador -t $ { Duration } , se utiliza el indicador -shortest . De hecho, ffmpeg determina la duración del mp3 aproximadamente, y durante la instalación, la duración de la pista de audio puede ser muy diferente (uno o dos segundos) de la duración de la pista de video. No importa si todo el video consta de un solo cuadro, pero al pegar una película con un salto en el borde, se producen efectos extremadamente desagradables con tartamudeo.

Otra forma de determinar la duración de un archivo mp3 es usar mp3info . Ella también se equivoca, y a vecesffmpeg da más que mp3info , a veces viceversa, a veces ambos mienten. No he notado ningún patrón. Pero soxi está funcionando correctamente.

Para instalar esta útil utilidad, haga esto:

sudo apt-get install sox libsox-fmt-mp3

Hacer transiciones entre diapositivas


Transición: un video corto en el que una diapositiva se convierte en otra. Para hacer tales videos, tome diapositivas en pares y use imagemagick para convertir 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 se dispersara en puntos, y luego la siguiente diapositiva se ensambló a partir de los puntos, y para esto escribí un script llamado fade.pl Al tener imagemagick , un verdadero Linuxoid creará algún efecto especial, pero si a alguien le gusta mi idea de dispersión, Aquí está el guión:

#!/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);
}

Monta el rodillo terminado


Ahora tenemos todos los fragmentos. Vamos al directorio de clips y recogemos la película terminada con 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

¡Disfrute de su visita a sus agradecidos estudiantes!

All Articles