Бейне дәрістер: unix тәсілі

Бейне дәрістер: unix тәсілі
Карантин - бір нәрсені үйренуге тамаша уақыт. Дегенмен, сіз түсінесіз, біреу бір нәрсені үйрену үшін, біреу үйрету керек. Егер сізде миллиондаған аудиторияға ұсынып, бүкіл әлемге танымал болғыңыз келетін презентацияңыз болса, онда бұл мақала сізге арналған. Мұнда сіз презентацияңыздан бейнені қалай жасауға болатыны туралы қадамдық нұсқауларды таба аласыз.

Біз PowerPoint бағдарламасында «аудио пікірлерді» жазу және презентацияны бейнеге экспорттау жолын тривиальды деп есептемейміз және шын мәнінде керемет бейнеге қажетті мүмкіндіктердің оннан бір бөлігін қамтамасыз етпейміз.

Алдымен бізге қандай жақтаулар қажет екенін шешейік:

  1. Дауыс беруі бар нақты слайдтар
  2. слайдты өзгерту
  3. Танымал фильмдерден үзінділер
  4. Лектордың беті мен оның сүйікті мысығы бар бірнеше кадр (міндетті емес)

Каталог құрылымын құру

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

Листинг тәртібі бойынша анықтамалықтардың мақсаты: біз тырнақшалар алатын фильмдер (клипарт), болашақ бейнеміздің фрагменттері (клиптер), камерадан алынған бейнелер (rec), сурет түріндегі слайдтар (слайд), дыбыс (дыбыс).

Суреттер бойынша презентация жасау

Шынайы қызыл көзді Linux пайдаланушысы үшін сурет түрінде презентация жасау ешқандай қиындық тудырмайды. Пәрмен арқылы pdf форматындағы құжатты кескіндерге талдауға болатынын еске сала кетейін

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

Егер мұндай пәрмен болмаса, буманы өзіңіз орнатыңыз poppler-utils (Ubuntu үшін нұсқаулар; егер сізде Arch болса, менсіз не істеу керектігін жақсы білесіз).

Мұнда және одан әрі бейне HD Ready форматында, яғни 1280x720 дайындалған деп есептеймін. Көлденең өлшемі 10 дюйм болатын презентация түсірілген кезде дәл осы өлшемді береді (-r 128 параметрін қараңыз).

Мәтінді дайындау

Егер сіз шынымен керемет материал жасағыңыз келсе, алдымен сөзіңізді жазуыңыз керек. Мен де мәтінді дайындықсыз айта аламын деп ойладым, әсіресе дәріс оқуда жақсы тәжірибем бар. Тікелей эфирде орындау бір бөлек, бейне түсіру бір бөлек. Жалқау болмаңыз - теруге жұмсалған уақыт бірнеше есе ақталады.

Бейне дәрістер: unix тәсілі

Міне, менің жазу форматым. Тақырыптағы сан слайд нөміріне тең, үзілістер қызыл түспен белгіленген. Кез келген редактор дайындалуға жарамды, бірақ толыққанды мәтіндік процессорды алған дұрыс - мысалы, ТекOffice.

Слайдтар арқылы дауыс беру

Мен не айта аламын - микрофонды қосып, жаз :)

Тәжірибе көрсеткендей, тіпті ең арзан сыртқы микрофонның жазу сапасы ноутбуктің кірістірілген микрофонына қарағанда салыстыруға келмейтіндей жақсы. Сапалы жабдықты қаласаңыз, мен оны ұсынамын Бұл мақалада.

Жазу үшін мен қолдандым аудио жазғыш – дыбыс жазуға арналған өте қарапайым қолданба. Мысалы, мына жерден алуға болады:

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. Файл ұзындығы кем дегенде секунд болуы керек (көбірек болуы мүмкін) және оны атау керек үнсіздік.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

Аудио файлдың ұзақтығын алдымен қызметтік бағдарлама анықтайтынын ескеріңіз сокси, содан кейін қажетті ұзындықтағы бейне өңделеді. Мен тапқан барлық ұсыныстар қарапайым: жалаушаның орнына -t ${duration} жалауы қолданылады -ең қысқа... Шын мәнінде ffmpeg mp3 ұзындығын шамамен анықтайды, ал өңдеу кезінде аудио тректің ұзындығы бейне жолдың ұзындығынан айтарлықтай ерекшеленуі мүмкін (бір немесе екі секунд). Бүкіл бейне бір кадрдан тұрса маңызды емес, бірақ мұндай бейнені шекарада үзіліспен жапсырған кезде өте жағымсыз кекіру әсерлері пайда болады.

mp3 файлының ұзақтығын анықтаудың тағы бір жолы - пайдалану mp3info. Ол да қателеседі, кейде ffmpeg артық береді mp3info, кейде бәрі керісінше, кейде екеуі де өтірік айтады – мен ешқандай үлгіні байқамадым. Ал міне сокси дұрыс жұмыс істейді.

Бұл пайдалы қызметтік бағдарламаны орнату үшін мына әрекетті орындаңыз:

sudo apt-get install sox libsox-fmt-mp3

Слайдтар арасында ауысулар жасау

Өту - бір слайд екіншісіне айналатын қысқа бейне. Мұндай бейнелерді жасау үшін біз слайдтарды жұппен және пайдаланамыз ImageMagick бірін екіншісіне айналдыру:

#!/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 Бар ImageMagick, нақты Linux пайдаланушысы кез келген ерекше әсерді жасайды, бірақ егер біреу менің шашыраңқы идеямды ұнатса, мына сценарий:

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

Алғыс білдірген студенттеріңізді тамашалаңыз!

Ақпарат көзі: www.habr.com

пікір қалдыру