Grafika 3D i gry :: Edycja audio-wideo :: Cinelerra :: Efekty specjalne :: Efekty przejść :: Eksport :: pakiet Transcode i inne narzędzia tekstowe :: audio :: wideo :: audio i wideo :: Linki :: Uwagi konfiguracyjne dotyczące multimediów :: Tuner radiowo-telewizyjny i cyfrowa rejestracja wideo :: Serwer dźwięku KDE oraz ALSA

Multimedia

W tym artykule postaram się omówić najważniejsze kwestie związane z odtwarzaniem, przetwarzaniem oraz edycją różnego typu danych multimedialnych (grafika, dźwięk i wideo).

Grafika 3D i gry

W programowaniu współczesnych gier bardzo istotnym elementem jest obsługa grafiki (zazwyczaj 3D aczkolwiek nadal można spotkać i zapewne zawsze będzie liczna grupa gier 2D). Rzadko graficzna część gry tworzona jest od podstaw z bezpośrednim wykorzystaniem mechanizmów takich jak OpenGL. Najczęściej gry korzystają z silników gier zawierających silniki graficzne lub bezpośrednio z tych drugich.

Silnik gry różni się od silnika graficznego tym że dostarcza także mechanizmów służących do implementacji fizyki świata gry (w tym wykrywania kolizji), sztucznej inteligencji, obsługi wejścia (sterowania), dźwięku i sieci. Silnik graficzny dostarcza natomiast tylko wygodnych mechanizmów operowania obiektami graficznymi, maskując niżej poziomowe interfejsy takie jak SDL, czy jeszcze bardziej niskopoziomowy i ograniczony tylko do grafiki OpenGL. Wspomniany OpenGL jest API do obsługi grafiki 3D, najczęściej stosowany jest w zastosowaniach profesjonalnych, ale niekiedy także w grach - ze względu na otwartość specyfikacji oraz dostępność na wiele platform - zwłaszcza w grach z rodziny FLOSS). SDL jest z kolei biblioteką programistyczną zwalniającą programistę z konieczności operowania suchym OpenGL i jemu podobnymi mechanizmami, jednak jest dość niskopoziomowy i nie jest określany mianem silnika graficznego czy też silnika gry (dostarcza jednak mechanizmów obsługi wejścia itp).

Jednym z głównych zadań silnika graficznego jest robienie cullingu celem ograniczenia ilości geometrii ładowanej do potoku graficznego, pociąga to za sobą mechanizmy zarządzania przestrzennego sceną. Ponadto silniki muszą zarządzać samymi obiektami, ich ładowaniem oraz ustawianiem wymaganych przez nie parametrów potoku (w tym ładowaniem wymaganych shaderów). Z kolei podstawowym zadaniem silników fizycznych jest realizacja wykrywania kolizji. Na ogół do obu tych mechanizmów korzysta się z brył ograniczających. W grafice 3D często wykorzystuje się tekstury do innych niż standardowe zastosowań (np. przechowywania map oświetlenia).

Do najbardziej zaawansowanych projektów silników na wolnych licencjach należą: Irrlicht (licencja typu BSD), OGRE (LGPL), Crystal Space (LGPL). Dość bogatą bazę silników (w tym tych z rodziny FLOSS) można przeglądać na devmaster.

Zobacz też: przykładowe programy multimedialne w C/C++ (w tym związane z grafiką 3D), podstawa silnika 3d, mój pomysł na silnik gry, portal o programowaniu gier, edytor shaderów dla KDE (łatka ułatwiająca kompilację w Debianie).

Lista programów" multimedialnych"

Przeglądarki multimedialne i odtwarzacze

Przeglądarki multimedialne i odtwarzacze audio/video są programami służącymi do wyświetlania / odtworzania plików w wielu formatach, odtwarzacze potrafią zapisywać tak zwane "playlisty" czyli listy plików które mają odtwarzać, przeglądarki oferują tworzenie podglądów katalogów, przeglądać w trybie pokazu slajdów oraz dokonywać prostych modyfikacji plików graficznych i zmian formatu zapisu.

Edytory graficzne

Programy do edycji graficzne dzielimy zasadniczo na trzy typy - programy do tworzenia grafiki rastrowej, grafiki wektorowej i animacji. Grafikę rastrową używa się do obrazków o nieregularnych kształtach, zdjęć, ..., umożliwia ona stosowanie licznych filtrów i efektów, w śród programów do jej edycji trzeba wymienić słynnego Gimpa. Z kolei podstawową zaletą grafiki wektorowej jest niezmienność jakości przy powiększaniu oraz zdolność do opisywania struktury (linia jest obiektem, a nie tylko zbiorem punktów), dlatego grafika ta jest używana głownie do tworzenia symboli i log oraz schematów. Z kolei animacje tworzone są jako sekwencyjnie wyświetlane pliki graficzne (z ewentualnymi efektami przejścia).

  • GIMP - nie trzeba przedstawiać ;-)
  • Kolour Paint - prosty ale bardzo użyteczny program graficzny
  • Grafika 3D
    • Moonlight3D - program do grafiki 3D
    • YafRay - program do grafiki 3D
    • ayam - program do grafiki 3D
    • blender - program do grafiki 3D
    • k3d - program do grafiki 3D
    • sced - program do grafiki 3D
    • vertex - program do grafiki 3D
  • Grafika rastrowa
    • cinepaint - edytor grafiki rastrowej
    • pixmap - edytor grafiki rastrowej
    • tgif - edytor grafiki rastrowej
    • tkpaint - edytor grafiki rastrowej
  • Grafika wektorowa
  • inkscape - odpowiednik GIMPa dla grafiki wektorowej ;-)
  • karbon - rozbudowany edytor grafiki wektorowej dla KDE
  • kpovmodeler - program do modelowania 3D
  • krita - rozbudowany edytor grafiki rastrowej dla KDE
  • Narzędzia graficzne

Edytory wideo

Programy te umożliwiają obróbkę i montaż cyfrowego wideo wraz z jego ścieżką audio, dodawanie efektów przejść, elementów animacji, a także kompresję i konwersję między formatami. posiadają również moduł umożliwiający przechwytywanie wideo (jego ucyfrawianie).

  • Gv4l - graficzny interfejs do transcode (rejestracja wideo z podglądem ...
  • Konverter - graficzna nakładka na MEncoder dla KDE,
  • LiVES - edytor wideo,
  • MEncoder - program do konwersji, rejestracji i przetwarzania wideo
  • MKVToolnix - zestaw narzędzi do obsługi formatu Matroska,
  • OGMtools - zestaw narzędzi do obsługi formatu ogg,
  • PITIVI - edytor wideo
  • avidemux - edytor wideo,
  • cinelerra - rozbudowany edytor wideo (program do montarzu AV),
  • dvbcut - graficzne narzędzie do przycinania strumieni DVB / MPEG
  • dvgrab - rejestrator video
  • kdenlive - rozbudowany edytor wideo (program do montarzu AV)
  • kino - rozbudowany edytor wideo (program do montarzu AV)
  • mjpegtools - narzędzia do obsługi formatu M-JPEG,
  • motion - rejestrator video z detekcją ruchu
  • mvc - rejestrator video z detekcją ruchu
  • streamer - rejestrator video
  • theorur - - streamer video,
  • transcode - program do konwersji, rejestracji i przetwarzania AV
  • vcdimager - narzedzie do tworzenia i rippowania VideoCD,
  • vorbis-tools - narzędzia do obsługi Ogg Vorbis,
  • xvid4conf - narzędzia do obsługi Ogg Vorbis,
  • zoneminder - rozbudowany system nadzorczy dla CCTV

Edytory audio

Oprogramowanie to umożliwia montaż, doadawanie efektów, konwersję i kompresję oraz przechwytywanie audio.

Edycja audio-wideo

Cinelerra

Cinelerra jest programem do montażu wideo, umożliwia składanie filmu, dodawanie efektów itp. W przypadku problemów z uruchamianiem (biblioteki) polecam sprawdzenie wersji bibliotek faad i faac (najlepiej stosować z tego samego źródła co sama cinelerra).

Efekty specjalne

1) zaznaczamy interesujący nas fragment (w oknie głównym)
2) w menu prawego przycisku myszy wybieramy Attach effect
3) jego ustawienia znajdziemy w tym menu pod pozycją Show

Efekty przejść

Wstawiamy je przeciągając wybrany efekt z okna efektów do okna głównego i umieszczając na połączeniu dwóch fragmentów. W menu prawego przycisku myszy mamy czas trwania i ustawienia.

Eksport

Należy przewinąć film do początku (eksport zaczyna się od aktualnego czasu) następnie File -> Render ... . Polecam ustawić "File Format" na RawDV oraz "Insertion strategy" na "Insert nothing" (nie testowałem ustawień z eksportem audio).

pakiet Transcode i inne narzędzia tekstowe

audio

wydzielenie ścieżki audio z pliku wideo:
tcextract -a 0 -i "IN.avi" -x mp3 > OUT.mp3
docinanie plików audio (program wywala sie przy generowaniu ostatniego pliku ale to niewielka przeszkoda):
tcmp3cut -i 1.mp3 -o 1a.mp3 -t 330000,1725999 -d 0
nagrywanie audio:
rec -t ogg -d /dev/dsp OUT.ogg (oczywiscie najpier ustawic odpowiednio pierwsze wejscie w mixerze ...)
łączenie plików audio (mp3):
mp3wrap all.mp3 1.mp3 2.mp3 3.mp3 4.mp3
poprawianie pliku mp3: (metoda brutalna ale skuteczna ...)
lame --decode all_MP3WRAP.mp3 ; lame -b64 -h all_MP3WRAP.mp3.wav

wideo

docinanie plików wideo:
avisplit -i IN.avi -o OUT.avi -t 00:05:30-43175

odzyskanie informacji o długosci filmu:
aviindex -i broken.avi -n -o broken.idx; avimerge -x broken.idx -i broken.avi -o fixed.avi
w przypadku problemow z audio warto z orginalu wydzielic sciezke audio a nastepnie polaczyc poprawione video i wydzielone uprzednio audio

kodowanie xvid:
pierwszy przebieg:
transcode -i IN.avi -o TMP.avi -y xvid4 -R
pierwdrugi przebieg:
transcode -i TMP.avi -o OUT.avi -y xvid4 -R 2 -w 3500,25,100 -avi_limit 4000

audio i wideo

łączenie plików wideo i pliku audio ze sobą:
avimerge -i 1.avi 2.avi 3.avi 4.avi -p all_MP3WRAP.mp3.wav.mp3 -o calosc.avi -A 0
poprawianie pliku wideo dla dźwięku:
transcode -i calosc_video.avi -P 1 -x avi,null -y raw,null -o calosc.avi -c 0-140831 (uwaga: transcode ma problem z autodetekcją typu pliku gdy podany parametr -p)
przekodowanie tylko ścieżki audio: (bez ruszania wizji)
transcode -i IN.avi -P 1 -b 56 -s 4 -o OUT.avi -y raw

Linki

Zobacz w Sieci: Linux i edycja dźwięku, Nagrywanie i edycja dźwięku w Linuksie, scalanie napisów z filmem

Uwagi konfiguracyjne dotyczące multimediów

Tuner radiowo-telewizyjny i cyfrowa rejestracja wideo

Uruchomienie karty telewizyjnej wymaga zapoznania się z listą obsługiwanych kart i tunerów, odnalezienia na niej posiadanej pozycji bądź pozycji zbliżonej a następnie załadowaniu odpowiedniego modułu z odpowiednimi parametrami. W moim wypadku (karta PV-BT878P+ rev.2F z tunerem TPI8PSB02P) słuszne okazało się modprobe bttv card=138 tuner=28 pll=1 radio=1. Następnie możemy przystąpić do konfiguracji programu do odbioru telewizji / radia (np. xawtv, fbtv); przykładowy plik z konfiguracją dla AsterCity (nazwy niektórych kanałów mogą być nieaktualne) - .xawtv (jeżeli istnieje /etc/xawtv radzę zarchiwizować i skasować). Przy karcie graficznej nvidii spotkałem się z problemem polegającym na niewyświetlaniu obrazu przez xawtv - rozwiązaniem okazało się xawtv -noxv (aby ustalić ten parametr jako domyślny należy do pliku ~/.Xdefaults dodać "xawtv.xv: no").

Do nagrywania cyfrowego wideo polecam program "transcode" (niestety nie ma go w oficjalnym Debianie) z następującymi parametrami transcode -i /dev/video0 -p /dev/dsp0 -g 768x576 -b 64 -e 16000,16,1 -o "$1" -x v4l -y xvid4 -R 1 -avi_limit 2048 (rejestruje to obraz w najlepszej możliwej w PALu jakości). Wcześniej przy pomocy ulubionego programu nastawiamy żądaną stację, przy poprawnej pracy dysku i nie oglądaniu zwartości katalogu w którym są zapisywane pliki nie powinno gubić klatek.

Niekiedy na nagraniach w maksymalnej rozdzielczości PAL pojawia się problem przekłamanych linii (wynika to z emisji w PALu jednej klatki obrazu w postaci dwóch półklatek wyświetlanych jako jednej) warto wtedy w VLC z menu Stettings wybrać Prefernces - General settings - Obraz i ustawić Video filter module na "Deinterlacing video filter" (następnie zrestartować vlc).

Zamieszczam również skrypt ułatwiający nagrywanie wideo - magnetowid.sh. Zobacz tez w Sieci: Television with Linux

Wspomniany już VLC umożliwia także przechwytywanie i wysyłanie w sieć IP sygnału audio-wideo z naszej karty TV (oraz z pewnym wspomaganiem (program radio służący do nastrojenia odbiornika) także sygnału audio z tunera radiowego). Zamieszczam tutaj skrypt ułatwiający taką operację (składnia vlc służąca do tego nie jest łatwa i przyjemna, a wtaki sposób łatwiej wprowadzać parametry takie jak np. kanał.

Niekiedy można spotkać się z problemem polegającym na braku sprzętowego sprzężenia wejścia liniowego z wyjściem głośnikowym - problem ten może rozwiązać program kopiujący wejście na wyjście karty dźwiękowej (wersja alsa), (wersja oss) oraz skrypt dla KDE uruchamiający cały zestaw aplikacji do słuchania radia / oglądania telewizji.

Na koniec warto wspomnieć także o programie alevt, który umożliwia softwerowe dekodowanie teletextu (telegazety) z karty obsługiwanej przez bttv: alevt -vbi /dev/vbi0 -charset latin-2.

Serwer dźwięku KDE oraz ALSA

Z serwera dźwięku KDE potrafią korzystać też liczne programy nie stworzone specjalnie dla tego środowiska (jak VLC, XMMS, ...), aby było to możliwe konieczne jest zainstalowanie do nich wtyczki dla systemu dźwiękowego "arts" oraz wybranie tego systemu jako wyjścia dźwięku. Ma to tę zaletę że programy te nie blokują sobie wtedy wzajemnie oraz serwerowi dźwięku KDE dostępu do urządzenia dźwiękowego (co ma miejsce przy korzystaniu z /dev/dsp). Jeżeli korzystamy z sterowników alsa możemy pokusić się o wykorzystanie miksera wbudowanego w ten system dźwięku (dmix) do miksowania dźwięków z serwera arts oraz innych programów (jest to działanie domyślne tego sterownika). ALSA umożliwia także bardziej dziwne sztuczki z karta dźwiękową jak np. zamiana kanałów (np. prawego z lewym lub głośników tylnych z przednimi) - tutaj zamieszczam przykład stosownego pliku konfiguracyjnego. Jeżeli mamy więcej niż 1 kartę dźwiękową warto zainteresować się parametrem modułów alsy index=, odpowiedzialnym za ustalanie kolejności kart w systemie.

Nie rzadko okazuje się iż możliwości konfiguracyjne alsy (asound.conf) czy też artsd są niewystarczające wtedy warto zainteresować się PulseAudio lub nawet jack. PulseAudio jest dość prostym serwerem dźwięku, jego dużą zaletą jest zaawansowany mixer (pavucontrol) umożliwiający regulacją parametrów niezależnie dla każdego podłączonego do serwera procesu. Przy jego uruchamianiu należy zwrócić uwagę na przynależność użytkownika do którego należą klienci do odpowiednich grup na których operuje serwer. Niestety nawet pomimo chyba pomyślnego odpalenia serwera z priorytetem RT (co samo w sobie też nie jest łatwe) wyraźnie zauważalne było rwanie się dźwięku.

Zdecydowanie lepszym rozwiązaniem jest stosowanie serwera JACK. Serwer ten pozwala na swobodne aranżowanie ścieżki którą przechodzi sygnał audio, dzięki czemu możliwe jest podłączenie mixera czy nawet procesora efektów pod wybrany program lub pod całość systemu. Serwer odpalony z priorytetem czasu rzeczywistego daje bardzo dobre efekty. Najprostszą metodą odpalenia jackd z szeregowaniem czasu rzeczywistego (jak dla mnie szybszą w wdrożeniu, pewniejszą, itd od zabaw z /etc/security/limits.conf), tak aby jednocześnie działał na koncie i grupie jakiegoś użytkownika (aby można było się do niego podłączać) jest użycie następującego wrapper'a (musi mieć ustawiony SETUID na root lub być odpalany z root'a):

#include <sched.h>
#include <sys/resource.h>
#include <sys/types.h>
#include <errno.h>

#define UID 1000
#define GID 1000

int main () {
	pid_t pid;
	struct sched_param sp;
	
	pid = getpid();
	sp.sched_priority = sched_get_priority_max(SCHED_FIFO) -30;
	
	if ( sched_setscheduler(pid, SCHED_RR, &sp) ) {
		perror("Blad uzyskania szeregowania RT");
		return -1;
	}
	
	setresgid(GID, GID, GID);
	setresuid(UID, UID, UID);
	
	execlp("jackd", "jackd", "-dalsa", "-dhw", 0);
}

Przy korzystaniu z serwera jack warto zainteresować się aplikacjami takimi jak: qjackctl (graficzny manager połączeń kanałów audio), jamin (regulator), jackeq (regulator), jack-rack (zbiór efektów itp). Możliwe jest także wymuszenie kierowania audio z programów nie potrafiących korzystać z jakcd do niego za pomocą /etc/asound.conf:

pcm.jack {
	type jack
	playback_ports {
		0 alsa_pcm:playback_1
		1 alsa_pcm:playback_2
	}
	capture_ports {
		0 alsa_pcm:capture_1
		1 alsa_pcm:capture_2
	}
}

Możliwe jest nawet podłączenie pulseaudio do jackd, wymaga to odpalenia pulseaudio z odpowiednim konfigiem w którym najistotniejsze jest przekierowanie wyjścia do jackd za pomocą załadowania odpowiednich modułów (zamiast modułów dostępu do rzeczywistego sprzętu):

load-module module-jack-sink
load-module module-jack-source

Zobacz w Sieci: Audio mixer, Applications using JACK, HOWTO: PulseAudio Fixes & System-Wide Equalizer Support



Copyright (c) 1999-2009, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This program is free software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/multimedia) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: 2009-05-04 23:27:25 (UTC) (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).