Natáčení instruktážních videí pod Linuxem

Jako obvykle pokud chcete natáčet film pod Linuxem, máte mhomo možnosti. Např. recordmydesktop, xvidcap, istanbul, wink atd. Bohužel žádný z těchto nástrojů nefunguje dobře ve všech situacích a každý má své omezení. Např. potíže se synchronizací audia videa, předbíhající se vydio atd. FFmpeg patří k těm lepším.

závislosti

nainstalujte si balíček ffmpeg a balíček ruby, tento skript je napsán totiž v jazyce ruby.

#!/usr/bin/ruby
# encoding: utf-8
Zvukove_zarizeni="pulse"  # tohle může být nutné změnit viz. cat /proc/asound/cards; arecord -l 
# více informací o nastavení mikrofonu http://wiki.4smart.cz/doku.php?id=stranky_uzivatelu_4smart:vyber_defaultni_zvukove_karty
# pravděpodobně tam budete mít hw:0,0 což je první zvuková karta v pořadí.
# pokud se používá pulseaudio přepínat se to dá pomocí programu pavucontrol
Snimku_za_vterinu="30" # Pokud chci, aby výsledné video  mělo menší velikost, nebo pokud můj počítač nestíhá, mohu snížit
 
# Spozdit_zvuk_za_obrazem_o_vteriny="-itsoffset -00:00:00.2"   # hodí se pokud snímate z webkamery do okna,webkamera produkuje
# malé spoždění, takže zvuk je malinko v předstihu před slovem. (otvírám pusu opožděně)
Spozdit_zvuk_za_obrazem_o_vteriny="" # běžně ale nic takového nepotřebujeme, takže konstantu vyprázdníme
 
if ARGV.size!=1 # bereme  jen jeden argument, pokud je argumentů jinej počet, něco je špatně
 puts "Příkaz bere jediný paremetr, který je název filmečku, poté budete vyzváni, aby jste kliknuli na okno, které chcete nahrávat."
 exit
else 
 puts 'Prosím klikněte na okno, které chcete nahrávat. 
Nahrávat se nebude "okno", ale "místo" na kterém bylo dané okno v okamžiku kliknutí.'
end
 
 
souradnice_okna=`xwininfo | grep -e Width -e Height -e Absolute`
 
xo=souradnice_okna.split("\n")[0].split(":")[1].delete(" ")
if xo.to_i<0 then xo="0" end
yo=souradnice_okna.split("\n")[1].split(":")[1].delete(" ")
if yo.to_i<0 then yo="0" end
sirkao=souradnice_okna.split("\n")[2].split(":")[1].delete(" ")
# šířka i výška snímané oblasti musí být dělitelná dvěma
if (sirkao.to_i/2*2)!=sirkao.to_i then puts "půvdoní šířka #{sirkao}, upravená šířka:"+sirkao=(sirkao.to_i-1).to_s;  end
vyskao=souradnice_okna.split("\n")[3].split(":")[1].delete(" ")
if (vyskao.to_i/2*2)!=vyskao.to_i then puts "půvdoní výška #{vyskao}, upravená výška:"+vyskao=(vyskao.to_i-1).to_s;  end
 
puts "zjištěné souřadnice #{sirkao}x#{vyskao} +#{xo},+#{yo}  název souboru:#{ARGV[0]}"
 
# Budeme nahrávat do souboru mkv, jež má přímou podporu youtube. Navíc nedochází k zbytečné degradaci kvality.
# Informaci o tom jaké formáty podporuje youtube naleznete zde. http://www.google.com/support/youtube/bin/answer.py?answer=55744
# nahravaci_prikaz="ffmpeg -f alsa -ac 1 -i #{Zvukove_zarizeni} -f x11grab -r #{Snimku_za_vterinu} -s #{sirkao}x#{vyskao} -i :0.0+#{xo},#{yo} -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 #{ARGV[0]}.mkv"
 
nahravaci_prikaz="ffmpeg -y -f alsa -ac 1 -i #{Zvukove_zarizeni} -f x11grab -show_region 1 -r #{Snimku_za_vterinu} -s #{sirkao}x#{vyskao} -i :0.0+#{xo},#{yo} -acodec pcm_s16le   -vcodec libx264 -preset ultrafast  -threads 0 #{ARGV[0]}.mkv"
 
#kdyz to nadava:
#Application provided invalid, non monotonically increasing dts to muxer in stream 1: 1 >= 1
#nahravaci_prikaz="ffmpeg -f alsa -ac 1 -i #{Zvukove_zarizeni} -f x11grab -r 30 -s #{sirkao}x#{vyskao} -i :0.0+#{xo},#{yo} -acodec flac -vcodec libx264 -vpre lossless_ultrafast -threads 0 #{ARGV[0]}.mkv"
# novej arch nechce lossles_utrafast a acodec pcm_s16le zlobí:
# nahravaci_prikaz="ffmpeg -f alsa -ac 1 -i #{Zvukove_zarizeni} -f x11grab -r #{Snimku_za_vterinu} -s #{sirkao}x#{vyskao} -i :0.0+#{xo},#{yo} -acodec flac -vcodec libx264 -preset ultrafast  -threads 0 #{ARGV[0]}.mkv"
 
# pokud máme slabí upload na youtube, můžeme před nahráním převést na avi pomocí  následujícího řádku
# ffmpeg -i output.mkv -acodec libmp3lame -ab 128k -ac 2 -vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0 our-final-product.avi
 
# pokud bychom chtěli nahrávat přímo do úspornější a méně kvalitního avi, tak můžeme. Ryskujeme ale, že náš počítač
# nebude stíhat a video bude nějak poškozené. 
#nahravaci_prikaz="ffmpeg -f alsa -ac 1 #{Spozdit_zvuk_za_obrazem_o_vteriny} -i #{Zvukove_zarizeni} -f x11grab -r #{Snimku_za_vterinu} -s #{sirkao}x#{vyskao} -i :0.0+#{xo},#{yo} -vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0  #{ARGV[0]}.avi"
 
puts "nahrávací příkaz: #{nahravaci_prikaz}"
 
puts "startujeme"
3.downto(2){|n|   puts n; sleep(1);}
 
puts "start - sice startujeme, ale ještě to bude chvilku trvat než se začne nahrávat"
 
`#{nahravaci_prikaz}`
 
# tohle kdybych chtěl mplayer spustit na pozadí, a mezitím překódovávat.
#Thread.new{`mplayer "#{ARGV[0]}.mkv"`}
 
puts "a nyní to co jsme natočili přehrajeme, kdyby vás to nebavilo, tak to můžete přerušit pomocí ctrl+c"
 
#`mplayer "#{ARGV[0]}.avi"`
#`mplayer -ao alsa:device=hw=2.0   "#{ARGV[0]}.mkv"`
`mplayer -ao alsa:device=#{Zvukove_zarizeni.sub(":","=").sub(",",".")} "#{ARGV[0]}.mkv"`
 
puts "Pokud budu chtít udělat další část se stejnými parametry, stačí použít příkaz:"
puts "#{nahravaci_prikaz}"
puts "Spojit jednotlivé části pak mohu pomocí:mkvmerge -o complete.mkv part1.mkv +part2.mkv +part3.mkv "

Programy pro práci s kamerou cheese, ucview - nemá ale nativní balíček pro debian - 10 FPS při rozlišení 1280×720 - tedy alespoň na mojí kameře. Zvláštní a přitom výrobce kamery slibuje až 30 FPS, vxcam gucview - (aptitude install guvcview). Abych mohl okno s kamerou přenout do režimu always on top, musel jsem do lua konfigu awesome přidat následujcí:

     awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
     awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
     awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
+    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
     awful.key({ modkey,           }, "n",      function (c) c.minimized = not c.minimized    end),

(tohle se vás ale netýká, protože pravděpodobně nepoužívat správce oken awesome)

Stříhat filmy můžu dobře v programu s grafickým rozhraním openshot, který je postaven na používání ffmpeg. Pokud potřebuji jen spojit více stejných souborů (stejný typ i rozlišení) nainstaluji si balíček MKVToolNix.

mkvmerge -o complete.mkv part1.mkv +part2.mkv +part3.mkv +part4.mkv

Pokud chci názorně ukázat co mačkám za klávesy (např. v editoru vim) mohu použít xvkbd viz přehled http://www.touch-base.com/documentation/Virtual%20Keyboards.htm

Jak si nahrát custom kurzor tak aby byl lépe vidět: https://wiki.archlinux.org/index.php/X11_Cursors xsetroot -cursor_name left_ptr

Tento návod a skript je založen do velké míry na informacích nalezených zde http://ubuntuforums.org/showthread.php?t=1392026

Pokud chci, aby se zobrazovaly stisknuté klávesy, velmi dobrý nástroj je key-mon

Aby byla myš lépe vidět

http://www.bbc.co.uk/accessibility/guides/mouse_pointer/computer/linux/kde/index.shtml

Pokud chci ukázat jinou část obrazovky, nebo též zvětšenou část obrazovky jinou než je snímána, mohu použít program kmag.

Pokud se chci obejít bez používání youtube, je nutné natočené filmečky konvertovat alespoň do dvou různých formátů.

webm a mp4. Internet explorer totiž bojkotuje formát webm. A svobodné prohlížeče nemohou podporovat licencovaný formát H.264. Zjevně.

Thankfully, we can get coverage for all modern (and mobile) browsers using only two formats:

  WebM - uses the VP8 codec for video and the Vorbis codec for audio
  MP4 - uses the H.264 codec for video and the AAC codec for audio

http://www.html5rocks.com/en/tutorials/video/basics/

http://diveintohtml5.info/video.html#example

Natáčení a archivace videa přímo z usb web kamery

#!/usr/bin/ruby
# encoding: utf-8
 
#nazev_souboru=Time.now.strftime("%Y%m%d%H%M%S")
nazev_souboru=Time.now.strftime("%a_%H_%M")
 
 
co_spustit="ffmpeg -loglevel error   -t 40  -f video4linux2 -s 320x240 -i /dev/video0 -y -r 5  #{nazev_souboru}.webm"
# -y  overwrites output files
# -r musí být až před souborem, jinak se to tak snaží snímat z webkamery a to nemusí jít.
`rm #{nazev_souboru}`
`#{co_spustit}`
puts "hotovo"

Do /etc/crontab zapíši

* 9,10,11,12,13,14,15,16,17,18,19,20 * * * user   cd /home/user/usbkamera&&/usr/bin/ruby /home/user/usbkamera/nahrej.rb 2>>/home/user/usbkamera/err.log

Pro zpuštění videa se osvědčil gnome-mplayer. Ne každý totiž podporuje webm . Webm je to proto, abych si mohl vidie spustit i když ještě natáčení probíhá. (tedy pro spuštění se nemusí čekat na úplné stáhnutí)

Natáčet video přímo z webu

Co jiného ?

 
stranky_uzivatelu_4smart/screencast.txt · Poslední úprava: 2014/04/14 12:59 autor: xsouku04