Video dersler: unix yolu

Video dersler: unix yolu
Karantina bir şeyler öğrenmek için harika bir zamandır. Ancak anladığınız gibi birinin bir şeyi öğrenmesi için birinin öğretmesi gerekir. Milyonlarca izleyiciye vermek ve dünya çapında ün kazanmak istediğiniz bir sunumunuz varsa bu yazı tam size göre. Burada sunumunuzdan nasıl video oluşturulacağına ilişkin adım adım talimatlar bulacaksınız.

PowerPoint'te "sesli yorumları" kaydetme ve sunumu videoya aktarma yolunu önemsiz bularak ve gerçekten harika bir video için gereken yeteneklerin onda birini sağlamayarak reddediyoruz.

Öncelikle hangi çerçevelere ihtiyacımız olduğuna karar verelim:

  1. Seslendirmeli gerçek slaytlar
  2. slayt değişikliği
  3. Popüler filmlerden alıntılar
  4. Öğretim görevlisinin yüzünün ve en sevdiği kedinin yer aldığı birkaç kare (isteğe bağlı)

Bir dizin yapısı oluşturma

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

Listeleme sırasına göre dizinlerin amacı: alıntı yapacağımız filmler (küçük resim), gelecekteki videomuzun parçaları (klipler), kameradan videolar (rec), resim biçiminde slaytlar (slayt), ses (ses).

Resimlerle sunum yapma

Gerçek bir kırmızı gözlü Linux kullanıcısı için resim şeklinde sunum yapmak herhangi bir sorun yaratmaz. Size pdf formatındaki bir belgenin şu komut kullanılarak görsellere ayrıştırılabileceğini hatırlatmama izin verin.

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

Eğer böyle bir komut yoksa paketi kendiniz kurun poppler-utils (Ubuntu için talimatlar; eğer Arch'ınız varsa, o zaman bensiz ne yapacağınızı gayet iyi biliyorsunuz).

Burada ve devamında videonun HD Ready formatında yani 1280x720 olarak hazırlandığını düşünüyorum. Yatay boyutu 10 inç olan bir sunum, boşaltıldığında tam olarak bu boyutu verir (-r 128 seçeneğine bakın).

Metnin hazırlanması

Gerçekten harika bir materyal hazırlamak istiyorsanız öncelikle konuşmanızın yazılması gerekir. Ayrıca, özellikle ders verme konusunda iyi bir tecrübeye sahip olduğum için metni hazırlık yapmadan konuşabileceğimi düşündüm. Ancak canlı performans sergilemek başka, video kaydetmek başka şey. Tembel olmayın; yazmaya harcadığınız zamanın karşılığını birçok kez alacaksınız.

Video dersler: unix yolu

İşte kayıt formatım. Başlıktaki numara slayt numarasına eşittir, kesintiler kırmızıyla vurgulanmıştır. Herhangi bir editör hazırlık için uygundur, ancak tam teşekküllü bir kelime işlemci almak daha iyidir - örneğin, OnlyOffice.

Slaytlar üzerinde seslendirme

Ne diyebilirim - mikrofonu aç ve yaz :)

Deneyimler, en ucuz harici mikrofondan bile kayıt kalitesinin, bir dizüstü bilgisayarın yerleşik mikrofonuyla kıyaslanamaz derecede daha iyi olduğunu göstermektedir. Kaliteli ekipman istiyorsanız tavsiye ederim İşte bu makale.

Kayıt için kullandım ses kaydedici – ses kaydı için çok basit bir uygulama. Örneğin buradan alabilirsiniz:

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

Bu adımdaki en önemli şey dosyaları doğru şekilde adlandırmaktır. Ad, slayt numarası ve parça numarasından oluşmalıdır. Parçalar tek sayılarla numaralandırılmıştır - 1, 3, 5 vb. Böylece, metni resimde gösterilen slayt için iki dosya oluşturulacaktır: 002-1.mp3 и 002-3.mp3.

Tüm videoları sessiz bir odada aynı anda kaydettiyseniz, onlarla başka bir şey yapmanıza gerek yoktur. Birkaç adımda kayıt yaptıysanız ses seviyesini eşitlemek daha iyidir:

mp3gain -r *.mp3

Araçlar mp3gain Bazı nedenlerden dolayı standart depolarda yok, ancak buradan alabilirsiniz:

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

Bütün bunlardan sonra sessiz bir şekilde başka bir dosya kaydetmeniz gerekiyor. Sessiz videolara ses bandı eklemek gerekir: Bir videoda ses bandı varsa ve diğerinde yoksa, bu videoları birbirine yapıştırmak zordur. Sessizlik bir mikrofondan kaydedilebilir, ancak düzenleyicide bir dosya oluşturmak daha iyidir cüret. Dosya uzunluğu en az bir saniye olmalı (daha fazlası mümkündür) ve adlandırılmalıdır. sessizlik.mp3

Kesinti videoları hazırlanıyor

Burada her şey yalnızca sizin hayal gücünüzle sınırlıdır. Videoları düzenlemek için bir düzenleyici kullanabilirsiniz Avidemux. Bir zamanlar standart depolardaydı ama sonra bir nedenden dolayı kesildi. Bu bizi durduramaz:

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

İnternette bu editörle çalışmak için pek çok talimat var ve prensip olarak oradaki her şey sezgisel. Birkaç koşulun karşılanması önemlidir.

Öncelikle video çözünürlüğünün hedef video çözünürlüğüyle eşleşmesi gerekir. Bunu yapmak için, "çıkış videosunda" iki filtre kullanmanız gerekir: çözünürlüğü değiştirmek için swsResize ve Sovyet "dar formatlı" bir filmi geniş formata dönüştürmek için "alanlar ekleme". Diğer tüm filtreler isteğe bağlıdır. Örneğin, birisi Bay Sharikov'un ifadesinin neden tartışılan parçada yer aldığını anlamıyorsa, "logo ekle" filtresini kullanarak PostgreSQL logosunu "Köpek Kalbi" üzerine yerleştirebilirsiniz.

İkinci olarak, tüm parçaların aynı kare hızını kullanması gerekir. Saniyede 25 kare kullanıyorum çünkü kameram ve eski Sovyet filmleri bana bu kadarını veriyor. Kestiğiniz film farklı bir hızda çekilmişse Videoyu Yeniden Örnekle filtresini kullanın.

Üçüncüsü, tüm parçalar aynı codec bileşeniyle sıkıştırılmalı ve aynı kaplarda paketlenmelidir. Bu nedenle, Avidemux format için videoyu seçin – “MPEG4 AVC (x264)", ses -"AAC (FAAC)", çıkış biçimi - "MP4 Çoklayıcı'.

Dördüncüsü, kesilen videoların doğru şekilde adlandırılması önemlidir. Dosya adı slayt numarası ve parça numarasından oluşmalıdır. Parçalar 2'den başlayarak çift sayılarla numaralandırılır. Bu nedenle, tartışılan çerçeve için kesintili video çağrılmalıdır. 002-2.mp4

Videolar hazır olduktan sonra parçaları içeren dizine aktarmanız gerekiyor. Ayarlar avidemux ayarlardan farklı ffmpeg varsayılan olarak gizemli parametreler tbr, tbn, tbc'dir. Oynatmayı etkilemezler ancak videoların birbirine yapıştırılmasına izin vermezler. O halde yeniden kodlayalım:

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

Ekran koruyucuları çekme

Burada da her şey basit: Akıllı bir planın arka planında çekim yapıyorsunuz, ortaya çıkan videoları bir kataloğa koyuyorsunuz recve oradan onu parçaların bulunduğu dizine aktarın. Adlandırma kuralları kesme tırnaklarıyla aynıdır, yeniden kodlama komutu aşağıdaki gibidir:

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

Videoya konuşmanızla başlamayı planlıyorsanız bu parçaya bir ad verin 000-1.mp4

Statik resimlerden çerçeveler oluşturma

Statik görüntü ve seslerden videoları düzenlemenin zamanı geldi. Bu, aşağıdaki komut dosyasıyla yapılır:

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

Ses dosyasının süresinin öncelikle yardımcı program tarafından belirlendiğini lütfen unutmayın. seksive ardından gerekli uzunluktaki video düzenlenir. Bulduğum tüm öneriler daha basit: bayrak yerine -t ${süre} bayrak kullanıldı -en kısa. Aslında ffmpeg mp3'ün uzunluğunu yaklaşık olarak belirler ve düzenleme sırasında ses parçasının uzunluğu, video parçasının uzunluğundan büyük ölçüde (bir veya iki saniye) farklı olabilir. Videonun tamamının tek bir kareden oluşması önemli değil, ancak böyle bir videoyu kenarda kesintilerle yapıştırdığınızda son derece rahatsız edici kekemelik etkileri ortaya çıkıyor.

Bir mp3 dosyasının süresini belirlemenin başka bir yolu da mp3 bilgisi. O da hatalar yapıyor ve bazen ffmpeg fazlasını verir mp3 bilgisi, bazen tam tersi oluyor, bazen ikisi de yalan söylüyor – herhangi bir düzen fark etmedim. Ve burada seksi doğru çalışıyor.

Bu kullanışlı yardımcı programı yüklemek için şunu yapın:

sudo apt-get install sox libsox-fmt-mp3

Slaytlar arasında geçiş yapma

Geçiş, bir slaydın diğerine dönüştüğü kısa bir videodur. Bu tür videolar yapmak için slaytları çiftler halinde çekiyoruz ve imagemagick birini diğerine dönüştürün:

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

Bazı nedenlerden dolayı slaytın noktalarla dağılmasını ve ardından bir sonraki slaytın noktalardan birleştirilmesini istedim ve bunun için adında bir senaryo yazdım. fade.pl sahip olan imagemagick, gerçek bir Linux kullanıcısı herhangi bir özel efekt yaratacaktır, ancak eğer birisi saçılma fikrimi beğenirse, işte komut dosyası:

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

Bitmiş videoyu monte ediyoruz

Artık tüm parçalara sahibiz. Kataloğa git klipleri ve iki komutu kullanarak bitmiş filmi birleştirin:

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

Minnettar öğrencilerinize izlemenin tadını çıkarın!

Kaynak: habr.com

Yorum ekle