Відэалекцыі: unix way

Відэалекцыі: unix way
Каранцін - цудоўны час, каб чаму-небудзь навучыцца. Аднак, як вы разумееце, каб нехта нечаму навучыўся, нехта павінен вучыць. Калі ў вас ёсць прэзентацыя, з якой вы хочаце выступіць перад мільённай аўдыторыяй, набыўшы сусветную славу, то гэты артыкул - для вас. Тут будзе пакрокавая інструкцыя, як з прэзентацыі зрабіць відэаролік.

Шлях запісу «гукавых каментароў» у PowerPoint і экспарту прэзентацыі ў відэа мы адкідаем, як трывіяльны і не які дае дзясятай дзелі тых магчымасцяў, якія патрэбныя для па-сучаснасці класнага роліка.

Для пачатку вызначымся, якія кадры нам спатрэбяцца:

  1. Уласна слайды з закадравым голасам
  2. Змена слайдаў
  3. Цытаты-перабіўкі з папулярных фільмаў
  4. Некалькі кадраў з фізіяноміяй лектара і каханым катом (апцыянальна)

Ствараем структуру каталогаў

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

Прызначэнне каталогаў у парадку пералічэння: фільмы, з якіх будзем тузаць цытаты (clipart), фрагменты нашага будучага роліка (clips), ролікі з камеры (rec), слайды ў выглядзе малюнкаў (slide), гук (sound).

Які робіцца прэзентацыю ў малюнках

Для сапраўднага чырванавокіка лінуксоіда зрабіць прэзентацыю ў выглядзе малюнкаў не ўяўляе ніякіх праблем. Нагадаю толькі, што дакумент у фармаце pdf можна разабраць на выявы камандай

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

Калі такой каманды няма, пастаўце сабе пакет Poppler-Utils (інструкцыі для Ubuntu; калі ў вас Arch, тыя вы і без мяне выдатна ведаеце, што рабіць).

Тут і далей я лічу, што ролік рыхтуецца ў фармаце HD Ready, т. е. 1280×720. Прэзентацыя памерам па гарызанталі 10 цаляў дае пры выгрузцы менавіта такі памер (гл. параметр -r 128).

Рыхтуем тэкст

Калі жадаеце зрабіць сапраўды класны матэрыял, то вашу гаворку неабходна спачатку напісаць. Я таксама думаў, што змагу нагаварыць тэкст без падрыхтоўкі, тым больш, што досвед чытання лекцый у мяне нядрэнны. Але адна справа - выступаць ужывую, а іншая - запісваць відэа. Не залянуйцеся - затрачаны на набор тэксту час акупіцца неаднаразова.

Відэалекцыі: unix way

Вось мой фармат запісу. Нумар у загалоўку роўны нумару слайда, чырвоным выдзелены перабіўкі. Для падрыхтоўкі падыходзіць любы рэдактар, але лепш усё ж узяць паўнавартасны тэкставы працэсар - напрыклад, OnlyOffice.

Агучваем слайды

Што тут сказаць - уключаеце мікрафон і пішаце 🙂

Досвед паказвае, што якасць запісу нават з самага таннага вонкавага мікрафона непараўнальна лепш, чым са ўбудаванага мікрафона наўтбука. Калі жадаецца якаснага абсталявання, то рэкамендую вось гэты артыкул.

Для запісу я выкарыстоўваў аўдыёзапіс - Зусім простае прыкладанне для гуказапісу. Узяць яе можна, напрыклад, вось тут:

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

Галоўнае на гэтым этапе - правільнае найменне файлаў. Імя павінна складацца з нумара слайда і нумара фрагмента. Фрагменты нумаруюцца няцотнымі лікамі – 1, 3, 5 і г. д. Так, для слайда, тэкст якога прыведзены на малюнку, будуць створаны два файлы: 002-1.mp3 и 002-3.mp3.

Калі вы запісалі ўсе ролікі за адзін раз у ціхім пакоі, далей з імі нічога можна не рабіць. Калі запісвалі ў некалькі прыёмаў, лепш выраўнаваць узровень гучнасці:

mp3gain -r *.mp3

ўтыліты mp3 зноўку чамусьці няма ў стандартных рэпазітарах, але ўзяць яе можна тут:

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

Пасля ўсяго гэтага трэба запісаць яшчэ адзін файл з цішынёй. Ён неабходны, каб дадаваць гукавую дарожку ў бязгучныя ролікі: калі ў адным роліку ёсць гукавая дарожка, а ў іншым няма, тое склеіць гэтыя ролікі складана. Цішыню можна запісаць з мікрафона, але лепш стварыць файл у рэдактары Audacity. Даўжыня файла павінна быць не менш за секунду (можна больш), а назваць яго варта silence.mp3

Рыхтуем ролікі-перабіўкі

Тут усё абмежавана толькі вашай фантазіяй. Для рэдагавання відэа можна выкарыстоўваць рэдактар Avidemux. Калісьці ён быў у стандартных рэпазітарах, але потым яго навошта выпілавалі. Нас гэта не спыніць:

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

Інструкцый па працы з гэтым рэдактарам у сетцы мора, ды ў прынцыпе, там усё інтуітыўна зразумела. Важна выканаць некалькі ўмоў.

Па-першае, дазвол роліка павінна супадаць з мэтавым дазволам роліка. Для гэтага ў "відэа для выхаду" трэба выкарыстоўваць два фільтры: swsResize для змены дазволу і "даданне палёў" каб зрабіць з савецкага "вузкафарматнага" фільма шырокі фармат. Усе астатнія фільтры - па жаданні. Напрыклад, калі хтосьці не разумее, да чаго ў абмяркоўваецца фрагменце выказванне г-на Шарыкава, пры дапамозе фільтра «дадаць лагатып» можна па-над «Сабачым сэрцам» накласці лагатып PostgreSQL.

Па-другое, ва ўсіх фрагментах трэба выкарыстоўваць адну і тую ж частату кадраў. Я выкарыстоўваю 25 кадраў у секунду, бо столькі дае мая камера і старыя савецкія фільмы. Калі кіно, з якога вы выразаеце кадр, знята з іншай хуткасцю, выкарыстоўвайце фільтр "рэсампляваць відэа".

Па-трэцяе, усе фрагменты павінны быць сціснутыя адным і тым жа кодэкам і спакаваны ў аднолькавыя кантэйнеры. Таму ў Avidemux для фармату выбірайце відэа – «MPEG4 AVC (x264)», аўдыё – «AAC (Faac)», выходны фармат – «MP4 Муксатар.

Па-чацвёртае, важна правільна назваць выразаныя ролікі. Імя файла павінна складацца з нумара слайда і нумара фрагмента. Фрагменты нумаруюцца цотнымі лікамі, пачынаючы з 2. Так, для кадра, які абмяркоўваецца, ролік з перабіўкай павінен называцца 002-2.mp4

Пасля таго, як ролікі гатовыя, трэба перанесці іх у каталог з фрагментамі. Налады avidemux адрозніваюцца ад налад ffmpeg па змаўчанні загадкавымі параметрамі tbr, tbn, tbc. На прайграванне яны не ўплываюць, але склейваць ролікі не даюць. Таму перакадуем:

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

Здымаем застаўкі

Тут таксама ўсё проста: здымаецеся на фоне якой-небудзь разумнай схемы, складаеце атрыманыя ролікі ў каталог запіс, а адтуль пераносіце ў каталог з фрагментамі. Правілы наймення - такія ж, як для цытат-перабіванняў, каманда перакадоўкі такая:

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

Калі плануеце пачаць ролік са свайго выступу, назавіце гэты фрагмент 000-1.mp4

Які робіцца кадры са статычных малюначкаў

Прыйшла пара мантаваць ролікі са статычных карцінак і гуку. Робіцца гэта такім скрыптам:

#!/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

Звярніце ўвагу, што спачатку вызначаецца працягласць гукавога файла ўтылітай soxi, а потым мантуецца відэа патрэбнай даўжыні. Усе знойдзеныя мной рэкамендацыі прасцей: замест сцяга -t ${duration} выкарыстоўваецца сцяг -shortest. На самой справе ffmpeg вызначае даўжыню mp3 вельмі прыблізна, і пры мантажы даўжыня гукавой дарожкі можа моцна (на адну-дзве секунды) адрознівацца ад даўжыні відэадарожкі. Гэта не мае значэння, калі ўсё відэа складаецца з адзінага кадра, але пры склейванні такога роліка з перабіўкай на мяжы ўзнікаюць вельмі непрыемныя эфекты з заіканнем.

Яшчэ адзін спосаб вызначыць працягласць mp3-файла - выкарыстоўваць mp3info. Яна таксама памыляецца, прычым часам ffmpeg дае больш, чым mp3info, часам наадварот, часам хлусяць абодва - заканамернасці я не заўважыў. А вось soxi працуе карэктна.

Каб паставіць сабе гэтую карысную ўтыліту, зрабіце так:

sudo apt-get install sox libsox-fmt-mp3

Які робіцца пераходы паміж слайдамі

Пераход - кароткі ролік, у якім адзін слайд ператвараецца ў іншы. Для выраба такіх ролікаў бярэм слайды парамі і пры дапамозе Вобраз ператвараем адзін у іншы:

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

Мне чамусьці захацелася, каб слайд рассыпаўся кропкамі, а потым з кропак збіраўся наступны слайд, і для гэтага я напісаў скрыпт пад назовам fade.pl маючы Вобраз, сапраўдны лінуксоід скрэатывіт любы спецэфект, але калі камусьці падабаецца мая ідэя з рассыпаннем, то вось скрыпт:

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

Мантаваны гатовы ролік

Вось зараз у нас ёсць усе фрагменты. Пераходзім у каталог кліпсы і збіраем гатовы фільм двума камандамі:

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

Прыемнага прагляду вашым удзячным вучням!

Крыніца: habr.com

Дадаць каментар