Technologia nagrywania poradników wideo 8

Opisuję jak nagrać i przygotować wideo-tutorial.

Obiecałem, że opiszę i udostępnię swoje rozwiązania do nagrywania desktopu pod Linuxem. No to w tym artykule opisuję co i jak, oraz dzielę się skryptami, które napisałem aby nieco ułatwić nagrywanie. Zapraszam do lektury zwłaszcza osoby zainteresowane nagrywaniem swoich własnych materiałów.

Notka autora: Ten artykuł powstał ponad pół roku temu i metoda, z której korzystam do nagrywania filmów pod Linuxem jest obecnie inna.

Nagrywanie

Nagrywam pod systemem operacyjnym Linux, zatem obce i zbędne są mi wynalazki w stylu Camtasia Studio, czy inne bajery. Całkowicie wystarcza mi programik o nazwie recordmydesktop, chociaż w jego opanowanie musiałem włożyć trochę wysiłku.

Strona manuala tego programu pozwala zorientować się, że potrafi on całkiem sporo; np. umie nagrywać jednocześnie obraz z dźwiękiem i kompresować je w locie lub dopiero pod koniec procesu nagrywania. Przechwytywanie klatek odbywa się za pomocą biblioteki libxdamage, ale można włączyć także łapanie całych pełnych klatek. Audio zgrywane jest do niewielkich plików w formacie AU. Pod koniec nagrywania program automatycznie łączy obraz z dźwiękiem produkując plik zapisany w formacie OGG Video (czyli OGV). Potrafi także nagrać obraz tylko, bez dźwięku.

Do nagrywania potrzebna jest spora ilość miejsca na dysku. Kilkudziesięciominutowe nagrania potrafią zająć całe gigabajty na dysku, zwłaszcza robione w technice pełnych zrzutów!

Nagrywam za pomocą słuchawek Hama CS-408, które strasznie cisną w uszy, a mikrofon mają na sztywnym pałąku. Kupione chyba gdzieś w MediaMarkcie. Mikrofon jest zabezpieczony czarną gąbką. W komputerze mam kilka kart dźwiękowych; do przechwytywania dźwięku z mikrofonu słuchawek używam starego, wysłużonego SoundBlastera Audigy z procesorem CS106, który pozwala przynajmniej trochę regulować jakość nagrań, i sam ma niewielki poziom szumów. Nagrywanie przez kartę dźwiękową która jest na płycie głównej (płyta ASUS P8Z68-V PRO) nie zdaje egzaminu ponieważ łapie ona bardzo wysokie szumy (mniej więcej 1/3 sygnału). Nie udało mi się tego wyeliminować. W ogóle mam podczas nagrań wysoki poziom szumów, więc musiałem tak zredukować jakość nagrań, aby nie było ich słychać i dlatego właśnie niektóre tutki mają taki niski poziom głośności, oraz są stłumione jakbym mówił spod poduszki. Na szczeście nieoceniona załoga TASKu, w szczególności chłopaki ze studia telewizyjnego zgodzili się pomóc i nagrywam z nimi profesjonalnie dźwięk, który potem dołączę do filmów. Ale to wiele pracy, a tutki muszą już być na sieci, więc na razie wystawiam te z dźwiękiem orginalnym, niskiej jakości. Dziękuję im  bardzo za wsparcie i profesjonalne zaplecze, do którego umożliwili mi dostęp!

Wcześniej przetestowałem kilka słuchawek i kilka mikrofonów. W końcu jakość i tak jest mizerna ze względu na szumy, które zredukowałem kosztem utraty jakości dźwięku. Mam przynajmniej nadzieję, że w ogóle cokolwiek słychać. Do czasu reedycji plików, niestety tak pozostanie.

Oprogramowanie

Chociaż za pomocą recordmydesktop można nagrywać całkiem swobodnie ustawiając opcje myszą, napisałem kilka skryptów, które ułatwiają mi pracę z nim. Skrypty są w perlu, i przydają się gdy chcę zrobić coś nietypowego. Nie muszę wtedy za każdym razem przypominać sobie jakie były opcje i co jak uruchamiać. Oto te skrypty.

tutrec.pl

Skrypt główny do nagrywania wszystkiego, co chcę nagrać. Poniżej początek skryptu, w którym dołączam biblioteki oraz sekcja konfiguracji z domyślnymi wartościami wszystkich parametrów pracy:

#!/usr/bin/perl -w
use strict;
use POSIX qw{strftime};
use Getopt::Long;
use Data::Dumper;

my %CFG = (
  outname => strftime("tut-%Y%m%d:%H%M.ogv",localtime),
  silent => 0,
  record => 'recordmydesktop',
  window => '',
  fullscr => '',
  freq => 22050,
  nadpisz => 1,
  delay => 2,
  tmpdir => '.tmp',
  onfly => 0,
  adevice => 'hw:0,0',
);

W dalszej części jest definicja funkcji pobierającej argumenty uruchomieniowe programu. Niektóre z nich mogą mieć różną postać (np. [[tt silent]] to to samo co [[tt noaudio]]). Argumenty wymagane mają znak = w definicji, opcjonalne – tylko :. Oto ona:

GetOptions(
 # -o, --outname, --output NAME -output file to create (default tut-datetime.ogv)
 'outname|o:s' => $CFG{outname},

 # -q, --na, --noaudio, --silent -no audio record (default with audio)
 'silent|noaudio|na|q!' => $CFG{silent},

 'fullscreen|f!' => $CFG{fullscr},
 # -f, --fullscreen, --full -record full screen (will ignore -w)

 # -w, --window HEX -window id number (will ask if no -f)
 'window|w:i' => $CFG{window},

 # --freq INT -sound sampling rate (defualt 22050)
 'frequency|freq:i' => $CFG{freq},

 # --over -always overwrite files (default)
 'overwrite|over!' => $CFG{nadpisz},

 # -d, --delay INT -wait INT seconds before start (default 2)
 'delay|d' => $CFG{delay},

 # -t /tmp -temporary dir for intermediate files (choose fast filesystem)
 'tempdir|tmpdir|tmp|t:s' => $CFG{tmpdir},

 # --of -enable on the fly recording
 'onthefly|onfly|of|e!' => $CFG{onfly},

 # -a, --adevice NAME -audio recording device (i.e. hw:1,1 for 2nd audigy 2nd mic)
 'adevice|a:s' => $CFG{adevice},

 # just this help
 'help|h!' => &help,

);

W dalszej części skryptu znajduje się kod, który analizuje argumenty wiersza poleceń, i wstawia je do napisu, będącego potem wierszem uruchamianym. Załączam tutaj całość kodu aż do końca, już bez dokładnego tłumaczenia, co on robi.

$CFG{window} = getWindowID() if !$CFG{fullscr} and !$CFG{window};
my $cmd = '{record} -o {outname} --channels 1 --delay {delay} --workdir {tmpdir}';
$cmd .= $CFG{silent} ? " --no-sound" : " --freq {freq} --device {adevice}";
$cmd .= " --overwrite" if $CFG{nadpisz};
$cmd .= " --on-the-fly-encoding" if $CFG{onfly};
$cmd .= $CFG{fullscr} ? "" : $CFG{window} ? " --windowid {window} " : "";
while( $cmd =~ m#{(w+)}#o ){
 my $key = $1;
 print "key=$keyn";
 $cmd =~ s/{$key}/$CFG{$key}/g;
}
if( !-d $CFG{tmpdir}){
  mkdir $CFG{tmpdir},0755
    or warn "$0: can't make temp dir [$CFG{tmpdir}]; $!n";
}
print $cmd;
system $cmd;
exit;
sub getWindowID {
 my $windowid = (split /s+/,(grep /Window id:/, `xwininfo`)[0])[3];
}
sub help {
 print <<EOT;
 -o, --outname, --output NAME -output file to create (default tut-datetime.ogv)
 -q, --na, --noaudio, --silent -no audio record (default with audio)
 -f, --fullscreen, --full -record full screen (will ignore -w)
 -w, --window HEX -window id number (will ask if no -f)
 --freq INT -sound sampling rate (defualt 22050)
 --over -always overwrite files (default)
 -d, --delay INT -wait INT seconds before start (default 2)
 -t /tmp -temporary dir for intermediate files
 (choose fast filesystem)
 --of -enable on the fly recording
 --help, -h -print this help and exit
EOT
 exit;
}

Sposób użycia

Aby nagrać cały jakieś okno (i tylko okno), uruchamiam skrypt normalnie, bez żadnych opcji. Nagrywanie rozpoczyna się po kliknięciu w wybrane okno. Skrypt czeka wtedy 2 sekundy, i rozpoczyna nagrywanie:

tutrec.pl

Nagrywanie całego ekranu:

tutrec.pl -f

Nagrywanie wybranego okna bez dźwięku, tylko obraz (okno trzeba kliknąć):

tutrec.pl -q

Nagrywanie z dźwiękiem, ale z wybranego urządzenia (jak zbadać urządzenia, piszę niżej):

tutrec.pl -a hw:0,1

Nagrywanie całego ekranu bez dźwięku, do pliku o nazwie zrzut.ogv, które rozpocznie się za minutę:

tutrec.pl -qf -d 60 -o zrzut.ogv

Jak widać obsługa jest całkiem prosta, a opcje – cóż – moim zdaniem są lepsze niż te w recordmydesktop. Poza tym, nie korzystam z tego skryptu, tylko napisałem szybko dwa następne. Te dwa następne podłączyłem pod ikony na pasku uruchamiania, i wystarczy, że je kliknę, a nagrywanie rozpoczyna się w malutkim oknie, które trzymam z tyłu, i mogę zawsze w nim wcisnąć Ctrl+C, aby zakończyć proces. Jakoś podobno można zdediniować, aby recordmydesktop działał po wciśnięciu zdefiniowanego klawisza i np. robił pauzę lub kończył nagrywanie, ale nie bardzo chciało mi to działać. Natomiast Ctrl+C w skrypcie zawsze działa.

Oto treść pierwszego ze skryptów uruchamiających, recordfullscreen.sh:

cd
xterm -fn 5x7 -geometry 150x5 -e bin/tutrec.pl -f -a hw:1,1

Ten skrypt działa tak, że otwiera malutkie okno xterma i w nim prowadzi nagranie całego ekranu z dźwiękiem pochodzącym z tylnego mikrofonu (u mnie jest to hw:1,1 w notacji urządzeń podsystemu ALSA). Plik, jaki zostanie utworzony przy każdym nagraniu, to np. tut-20120110:1232.ogv, czyli w nazwie zawarta będzie data. Często nagrywam kilka razy, gdy np. trzeba powtórzyć bo coś powiem nie tak. Wtedy powstaje sporo takich plików :)

Drugi skrypt przydaje się do nagrań demonstracyjnych, które potem wykorzystać mogę np. do tworzenia timelapse lub innych zastosowań, i wygląda tak (recordfullscreensilent.sh):

cd
xterm -fn 5x7 -geometry 150x5 -e bin/tutrec.pl -f -q

Jak widać, robi on dokładnie to samo, z tym, że nie nagrywa dźwięku. Pliki mają taką samą generowaną nazwę jak w poprzednim przypadku.

Znajdowanie urządzeń

No cóż, tutaj nie pochwalę się zbytnią znajomością tematów Linuxowych, chociaż w sumie możnaby poszukać jakiegoś tajemniczego i hakerskiego polecenia, które ładnie listuje urządzenia audio. Jestem pewien, że coś takiego jest. Ja natomiast nie potrzebowałem go, ponieważ testując nagrywanie pracowałem w programie Audacity. Podczas nagrywania z różnych urządzeń program pokazywał mi które to są, jakie mają nazwy, itp.

Pokazuję to poniżej, na obrazku. Oto jak wygląda u mnie listwa programu audacity, gdzie wybieram urządzenia do odtwarzania i nagrywania:

Listwa w programie Audacity

Wybranie z menu z mikrofonem urządzenia do nagrywania wyświetla sporą listę urządzeń, z których najważniejsze jest oznaczenie hw:1,1 lub podobne. Jest to właśnie nazwa sprzętowa urządzenia do nagrywania lub odtwarzania. Dodatkowo dzięki opisowi w tym menu można się zorientować jakiego typu jest to urządzenia. Jak widać, sporo różnych wejść jest mapowanych na jeden mikrofon…

 

Menu programu Audacity

Gdybym jeszcze miał coś wyjaśnić, zapraszam do komentarzy. Na razie jednak to wszystko.

 

8 thoughts on “Technologia nagrywania poradników wideo

  1. Odpowiedz Mentoris Wrz 5,2012 14:26

    Ja niestety mam na laptopie będącym na gwarancji, Windows i niestety z nim muszę się męczyć. Jednak do zapisywania wideo udało mi się znaleźć bardzo mało znany programik, „Stone Screen Recorder”. Nie ma on wiele opcji, ale ma wszystkie potrzebne i jedną cechę denerwującą. Mianowicie po zakończeniu nagrania przetwarza tymczasowo zapsane dane do właściwego pliku z denerwującą powolnością. Jedną minutę nagrania przetwarza około 5 minut i może i nawet ponad to. Za to odwdzięcza się niesamowitą jakością zrobionego nagrania. Przy mocno skompresowanym pliku jakość nagrania powala na kolana. Nie widać praktycznie rożnicy z oryginałem z którego było robione nagranie.

  2. Odpowiedz winhelp Sie 21,2012 10:05

    A w czym to potem łączysz?

  3. Odpowiedz kajetan Cze 5,2012 20:39

    warto wspomnieć również o jakimś programie do wyświetalnia co tak naprawdę dzieje się z klawiaturą i z myszą np.

  4. Odpowiedz piotao Lut 22,2012 14:14

    Poprawiłem adresy obrazków, teraz są widoczne.

  5. Odpowiedz piotao Lut 16,2012 00:53

    Komentarze dodane w starym serwisie:

    Empire – 23-01-’12 16:03
    Taki mały drobiazg:
    Hmhm, nie daję głowy za wiarygodność źródła z którego to wyczytałem, ale “-w” jest old-style i w najbliższym czasie ma dostać status deprecated.
    Aktualna forma to
    #!/usr/bin/perl
    use warnings;
    Sorki, zboczenie fana perla ; P

A Ty co o tym myślisz?