Darbastalio filmavimas su FFMPEG

12 Comments

Pradėjau rašyt straipsnį (jis nebeišvys dienos šviesos), susidūriau su poreikiu padaryt veiksmų  vaizdo įrašą, nes išreikšt tai tekstu buvo sudėtinga. Kai pradėjau domėtis kas ir kaip su darbastalio filmavimu, radau daug programų, su savais pliusais ir minusais. Kažkuri programa turi tai, bet neturi ano, beto reiktų įsirašyt milijoną priklausomybių. Kita programa turi ir tą, ir aną, bet kažkaip stringa vaizdas ir išsaugo netinkamu formatu. Vienu žodžiu yra daug puikių programų, bet aš aprašysiu universalų darbastalio filmavimo variantą, betkokiam distributyvui, betkokiai darbastalio aplinkai, betkokio lygio linux naudotojui betkokio lygio nekreivarankiui linux naudotojui, betkokiem poreikiam (jei truks kažkokios galimybės, visada yra galimybė ją pridėti). Iki šiol niekad nesusidūriau su video darymu ir kėlimu į youtube, mano pirma patirtis šioje srityje yra rašant šį straipsnį, jei turit ką pasakyt rašykit komentarus.

Sukuriam video

Viso ekrano vaizdas:

ffmpeg -f x11grab -r 25 -s 1280x1024 -i :0.0 vcodec libx264 -preset ultrafast -threads 0 video.mkv

Vaizdas aplink pelės žymeklį:

ffmpeg -f x11grab -follow_mouse centered  -r 25 -s 640x480 -i :0.0 -vcodec libx264 -preset ultrafast -threads 0 video.mkv

-f x11grab – šaltinis, jei reik ir garso pridedam ir „-f alsa -ac 2 -i hw:0,0“
-follow_mouse – ir taip aišku, įrašyti tik kvadratą aplink pelę. Vietoj „centered“ galim įrašyt skaičių pikseliais, tada įrašomas kvadratas pasislinks tik tada kai pelė pajudės per tiek pikselių
-show_region 1 – rodo kvadratą kurio vaizdas įrašomas, nenaudoju, nes maišo:)
-r – kadrai per sekundę
-s – dydis. Pirmu atveju ekrano rezoliucija, antru – įrašomo kvadrato dydis
-i – jei reik įrašyt tik dalį ekrano, tada ten nurodoma kur prasideda ir kur baigiasi įrašoma dalis, šiuo atveju įrašoma aplink pelę todėl neaktualu. Jei pridėsime „+nomouse“ pelės žymeklis nebus įtraukiamas į video, pvz. „-i 0.0+nomouse“
-vcodec – kodekas

ffmpeg -encoders #visų encoder'ių sąrašas

-preset nustatymų rinkinys
Tam skirtos programos turi galimybę po pelės žymekliu rodyt spalvotą apskritimą, taip geriau matosi kur randasi pelė. Tą kvadratą gali sukurti compiz ar kita langų tvarkyklės efektų programa, galima parsisiųst pelės žymeklių temų su spalvotu fonu (pvz. http://mbossg.deviantart.com/art/DMZ-Highlight-Cursor-For-Ubuntu-Linux-309840060 ), etc. kadangi aš taikau į universalumą tai aprašysiu kaip susikurt savo pelės žymeklį. Žemiau yra video kuriame parodyta kaip aš kūriau pelės žymeklį naudojamą tame video.

1. Variantas

Video parodyta kaip sukurt ir išsaugot būsimą pelės žymeklį png formatu. Sukuriam failą cursor.conf su turiniu: 128 0 2 test.png
128 – žymeklio dydis
0 – hotspot x koordinatė
2 – hotspot y koordinatė
test.png – būsimas žymeklis

xcursorgen cursor.conf left_ptr

ir sukuriamas naujas pelės žymeklis.

2. Variantas

Šitas variantas nelabai universalus, nes skirtas tik GIMP programai ir šiaip netinka tada jei reikia automatizuot, rašyt scenarijų. Sukuriam žymeklį (turi būt vienas sluoksnis, kitaip bus animuotas), File->export->left_ptr.xmc įrašom „hostpot“ koordinates ir išsaugom. Tada pašalinam failo plėtinį, paliekam tik „left_ptr“.
Sukūrus žymeklį (-ius) sudedam juos į ~/.icons/cursors_for_video/cursors aplanką. Vietoj „cursors_for_video“ galim rašyt betką, svarbiausia jog tam aplanke būtų aplankas „cursors“, o jame žymekliai. Iš esmės tai gana ir dviejų „left_ptr“ ir „xterm“, kitus galim paimt iš org. temos. Ir įjungiam žymeklių temą „cursors_for_video“
Jei turit laiko ir noro galit sukurt pilną (panaudojamą) pelės žymeklių temą. Išsamų straipsnį apie tai galima rasti čia (angliškai)

Vandens ženklas (Watermark)

Sukūrus video, reik uždėt „watermark“, net jei video skirta visiems ir platinama pagal GNU licenciją, nepakenks pranešt kas video autorius ar kam tas video buvo kurtas 🙂

ffmpeg -i video.mkv -vcodec libx264 -preset ultrafast -threads 0 -vf "movie=logo.png [wm]; [in][wm] overlay=X:Y [out]" video_su_logo.mkv

logo.png – logotipas (vandens ženklas) png formatu, galim daryt viso video dydžio arba mažą. Didelio atveju naudojam overlay=0:0 Darant didelį lengviau nurodyt vietą ir tai suteikia daugiau galimybių.
X – x koordinatė, kurioje prasidės logo
Y – y koordinatė, kurioje prasidės logo

Kėlimas į youtube

Turime video kuriame matomas išryškintas pelės žymeklis ir kuriame pridėtas vandens ženklas. Kaip ir viskas baigta, beliko įkelt į youtube. Konvertuojam:

ffmpeg -i video_su_logo.mkv -ss 00:01:15 -t 00:05:15 -s 1024x768 -vcodec libx264 -acodec libmp3lame -preset slow youtube.mp4

-ss  – video pradžia. Savaime aišku reikia ne viso ilgio, nes prieš reikalingą video dalį dar reikėjo atsidaryt programą, perskaityt email, po reikalingos dalies padarymo reikėjo uždaryt programą, etc. visa tai yra tam video, todėl paliksim tik reikalingą dalį pvz. nuo  00:01:15 iki 00:05:15
-t – video trukmė (nuo -ss)
-s – originaliai mano video buvo 640×480, bet įkėlus į youtube jis tapo labai sulietas, bandžiau padaryt jį tokio dydžio kaip youtube rodo 320×240, bet tai negelbėjo. Bandžiau įvairius kodekus ir skirtingus nustatymus, bet vistiek originalas atrodė žymiai geriau nei įkeltas į youtube. Todėl padidinau iki 1024×768 tai pagelbėjo, video tapo beveik toks pat aiškus kaip ir originale.
-acodec – mano video neturi garso, bet youtube skundžiasi jog nesupranta audio formato, todėl dėl visa ko konvertuojam neegzistuojantį garsą į mp3.

P.S.

Perskaičiau daug straipsnių, visur „-sameq“ naudojamas manant jog tai „same quality“, tai netiesa! Ta parinktis yra „same quantizers“. ffmpeg dokumentacijos įrašas ta tema: wiki
Beto šitas įrašas yra jūsų kelionės į darbastalio filmavimą pradžia, o ne pilnas kelionių gidas. Yra begalė kodekų, begalė parinkčių ir nesuskaičiuojama daugybė galimų poreikių. Dalinuosi informacija kuri padės žengti pirmus žingsnius, bet toliau jau patys…

12 Comments (+add yours?)

  1. xeranas
    Sau 09, 2013 @ 11:14:00

    Straipsnis geras, bet tikrai nepasakyčiau jog tai priimtinas variantas “betkokio lygio linux naudotojui” 🙂

    Atsakyti

    • gymka
      Sau 09, 2013 @ 11:25:00

       aš turėjau omeny jog betkas gali nukopijuot komandą ir įklijuot ją į terminalą 🙂 aišku ubuntu naudotojam toks variantas nepriimtinas, jiem reik programos su GUI ir galimybės spausti „next, next, next“.

      Atsakyti

  2. ( . )( . )
    Sau 09, 2013 @ 22:07:00

    Pritariu Artūrui. Tie burtažodžiai terminale tikrai kvepia akmens amžiumi.

    Atsakyti

    • minde
      Sau 09, 2013 @ 22:27:00

      Be burtu nera ir stebuklu.

      Atsakyti

    • gymka
      Sau 10, 2013 @ 07:59:00

      girdėjot „gentoo“ naudotojai? Jūs magų gildijos valdovai… aš kaip archlinux naudotojas tai matyt patenku tik šiaip tarp vidutinių bajorų 😀

      Atsakyti

      • ( . )( . )
        Sau 10, 2013 @ 12:43:00

         Aš suprantu, kad terminalas yra gerai, bet kalba eina apie paprastus žmogelius. Viskas turi būti padaroma kelių pelės paspaudimų dėka. Taigi, GUI yra privalomas.

        Atsakyti

        • Gymka
          Sau 10, 2013 @ 14:49:00

           Kalba nebeina apie paprastus žmogelius, straipsnio prologe prirašiau vieną žodį, kad visiem būtų aišku jog aš rašiau ne kreivarankiam naudotojam. Aš nerašau tiem kurie žengia pirmus žingsnius linux pasaulyje, aš taikau į tą auditoriją kuri jau žino kas ir kaip, taip sakant pradedantys geek’ai tyngintys naudotis google 🙂

          Atsakyti

  3. minde
    Sau 09, 2013 @ 22:24:00

    Labai geras postas, aciu!

    Atsakyti

  4. Liudas
    Sau 11, 2013 @ 04:48:00

    Gera informacija:
    – ji pateikia gilesnį supratimą apie darbastalio įrašymą;
    – ffmpeg yra labai galinga sistema (ko gero kiečiausia).
    Iš savo kuklios patirties – darydamas akmc.lt pamokėles išbandžiau tikrai ne vieną įrankį skirtą šiam reikalui. Didžioji dalis programų, kurios veikia ne ffmpeg pagrindu neleidžia padaryti kokybiško įrašo. Čia pradedi sverti ar tau reikalinga kokybė ar patogumas. Aš kaip potencialus tinginys tik neseniai sulaukiau (o gal atradau) FDesktopRecorder http://kde-apps.org/content/show.php?content=147844, kuri turi labai paprastą naudotojo sąsają, veikia ffmpeg pagrindu, labai šauniai konfigūruojasi. Todėl dabar darau ne be per terminalą. Minusėlis ne KDE darbastalio aplinkos naudotojams – KDE priklausomybių įdiegimas. Man kaip KDE naudotojui – viskas super. Legendinis „RecordMyDesktop“ nelabai naudotinas, nes išvesties kodekas OGG. Gerbiu žmones paleidusiu į pasaulio šviesą OGG kodeką, bet įrašo šiame formate man nepavyko redaguoti nei su vienu video redaktoriumi – vaizdas sau, garsas sau, arba kaip šiandien pamenu paleidus įrašą vaizdas prabėga pagreitintas 15 kartų, tada juodas ekranas ir garsas neskubėdamas eina 🙂
    Tiesa naudojau šia komandą terminale:
    ffmpeg -f x11grab -r 30 -s $(xwininfo -root | grep ‘geometry’ | awk ‘{print $2;}’) -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 -y iraso_pavadinimas.mkv
    Ji (neįrašinėja garso, nes garsą rašau atskirai visada): pasiima viso ekrano geometriją | įrašo aukštos kokybės vaizdo įrašą (h264 – ubuntu šeimoje problema, nes kodekas pasiekiamas tik iš trečių šalių repozitorijų. Archlinux – žvėris, nes visi kodekai neišmėsinėti).

    Atsakyti

    • gymka
      Sau 11, 2013 @ 09:21:00

      Visur matau „$(xwininfo -root | grep ‘geometry’ | awk ‘{print $2;}’)“ kokia prasmė jį naudot? juk visi žinom kokia savam kompe ekrano raiška, tai įrašyt raišką žymiai lengviau nei rašyt komandą kuri sužino kokia raiška… „1280×1024“ vs „$(xwininfo -root | grep ‘geometry’ | awk ‘{print $2;}’)“

      Atsakyti

      • Liudas
        Sau 11, 2013 @ 19:20:00

        Na nepulsiu prasmės piešti. Tiesiog pasakysiu kodėl aš ją naudojau – skirtingi pc su vienu pasidalintu (debesėlyje) failu „komandos.txt“ 🙂

        Atsakyti

      • minde
        Sau 11, 2013 @ 21:23:00

        Tokia komanda buna naudojama ne tik tam kad suzinoti monitoriaus rezoliucija, bet ir tam tikro lango, kas manau nera labai paprasa “is akies” 🙂
        maip pvz: xwininfo | grep ‘geometry’| awk ‘{print $2;}’

        Atsakyti

Leave a Reply