Edycja audio-wideo :: Cinelerra :: 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 :: VLC niestandardowo :: Wtyczka dla przeglądarek Mozilla :: VLM :: v4l2loopback

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).

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 1
pierwdrugi przebieg:
transcode -i TMP.avi -o OUT.avi -y xvid4 -R 2 -w 3500,25,100 -avi_limit 4000

konwersja plików .ts (zapisu transmisji DVB) na .mp4 (potrafi naprawić identyfikację kanału oraz przwijanie):
avconv -i IN.ts -codec copy OUT.mp4

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: scalanie napisów z filmem, Signal Analysis/Processing Software.

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).

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). Warto pamiętać że kanał możemy zmieniać zewnętrznie (już po odpaleniu vlc) przy pomocy v4lctrl z pakietu xawtv. Wersja 1.0 VLC ma pewne problemy z obsługą niektórych urządzeń V4L, objawia się to błędem "v4l demux error: chroma selection failed" (dla v4l) lub "v4l2 demux error: cannot get video input characteristics" (dla v4l2). Rozwiązaniem (przynajmniej dla kart na bttv) okazuje się być dodanie parametru chroma_agc=1 do modułu jądra.

VLC może również posłużyć do odbioru sygnału telewizji cyfrowej (DVB). Konieczne do tego jest oczywiście załadowanie stosownych modułów z odpowiednimi opcjami (dla testowanej karty "Medion" było to: modprobe saa7134 i2c_scan=1 card=12 tuner=30; sleep 2; modprobe saa7134_alsa). Potem wystarczy vlc dvb:// --dvb-frequency=690000000 --dvb-budget-mode, gdzie 690000000 jest częstotliwością multipleksu który chcemy odbierać, dvb-budget-mode powoduje odbieranie przez VLC całego strumienia (całego multiplexu, zawierającego zwykle kilka kanałów) i tym samym umożliwa jego rejestrację. Do DVB przydany może być także programik dvbtune (w szczególności dvbtune -i -f 690000000 wyświetli informacje o kanałach na podanym multiplexie, a dvbtune -m -f 690000000 umożliwia monitorowanie sygnału)

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. Podobnym zagadnieniem jest obsługa kart transmitujących audio tylko po PCI - należy wtedy przekierować dźwięk z urządzenia dźwiękowego związanego z kartą RTV na główną kartę dźwiękową - arecord -D hw:2,0 -r 32000 -c 2 -f S16_LE | aplay - & xawtv -c /dev/video1 -vbidev /dev/vbi1 && killall arecord

Jako że składnia opisywanych programów do rejestracji i transmisji sieciowej sygnału multimedialnego nie koniecznie jest łatwa i przyjemna to zachęca do zapoznania się z moim projektem skrypu ułatwiającego te operacje. 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

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. Z plikiem tym poprawnie współpracuje VLC z dźwiękiem 5.1. Przy różnych eksperymentach z przekieroywaniem wyjść bardzo przydatny może okazać się speaker-test -c6 -twav umożliwiający testowanie poprawności ustawień (z opcjami -tsine -f3000 ten sam program może posłużyć do genrowania dźwięku sinusoidalnego o zadanej częstości). 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

Jako że współczesne karty nie często obsługują sprzętowo MIDI to godnym zainteresowania wydaje się programowy serwer syntezujący MIDI - np. TiMidity++.

Zobacz w Sieci: ALSA - Kontrola głośności per aplikacja - HOW TO, Audio mixer, Applications using JACK, HOWTO: PulseAudio Fixes & System-Wide Equalizer Support

VLC niestandardowo

VLC jest dość popularnym odtwarzaczem plików multimedialnych. Jednak jego możliwości nie kończą sie na zwykłym odtworzeniu pliku .avi - umożliwia on obsługę strumieni sieciowych (zarówno odbiór jak i nadawanie), odtwarzanie wielu źródeł w ramach jednego okna (a także strumieniowanie takiego sygnału), obsługę urządzeń V4L (kart telewizyjnych), DVB, DVD, ... . VLC posiada także, przydatną przy oglądaniu strumieni sieciowych lub telewizyjnych, funkcję nagrywania odbieranego sygnału. Domyślnie jeżeli wejściowy sygnał ma postać skompresowaną (np. DVB) to rejestrowany jest bez rekompresji (warto zauważyć, iż domyslnie rejestrowany jest tylko aktualnie oglądany program, natomiast gdy VLC odpalony jest z opcją --dvb-budget-mode rejestrowany jest cały multiplex). Poniżej prezentuje kilka przykładowych konfigów i skryptów wykorzystujących ponadstandardowe zdolności VLC.

  • tv.vlc.sh - skrypt do oglądania telewizji i słuchania radia z wykożystaniem VLC (używa dcop, konsole z KDE oraz set_station.sh do ustawiania kanału w oparciu o konfig xawtv)
  • rtv.sh - skrypt do nagrywania i strumieniowania sygnału RTV wykożystujący m.in. VLC

Wtyczka dla przeglądarek Mozilla

Możemy osadzić odtwarzacz VLC na stronie WWW dzięki Mozilla plugin. Do tego celu można użyć następującego kodu:

	<object id="filmik1" data="URL://pliku.lub.strumienia/ktory.chemy.wyswietlic"
		type="application/x-vlc-plugin" width="426" height="316"
	></object>

Takim obiektem możemy sterować przy pomocy javascript-u - np. umieścić podpisy oparte o wartość atrybutu id (skrypt szczególnie przydatny gdy na jednej stronie mamy kilka takich obiektów):

	<script language="Javascript">
		function putsNames() {
			var vlc_video_entry = document.getElementsByTagName("object");
			for(i=0; i < vlc_video_entry.length; i++) {
				vlc_video_entry[i].video.marquee.text = vlc_video_entry[i].id;
				vlc_video_entry[i].video.marquee.position = "TOP";
				vlc_video_entry[i].video.marquee.opacity = 255;
				vlc_video_entry[i].video.marquee.color = 579329;
				//vlc_video_entry[i].video.marquee.size = 2;
				vlc_video_entry[i].video.marquee.enable();
			}
		}
	</script>

VLM

VLM jest metodą konfigurowania VLC do bardziej zaawansowanego streamingu czy też odtwarzania. Umożliwia także realizację usług typu wideo na życzenie. Uruchamianie VLC z taką konfiguracją odbywa się z użyciem opcji --vlm-conf. Aby uniknąć dziwnych błędów niekiedy lepiej (bezpieczniej) jest robić to w taki sposób: LANG=C cvlc --vlm-conf plik.conf

VLM można użyć także do streamingu video z kilkoma ścieżkami dźwiękowymi poprzez następujący konfig:

	new source1 broadcast enabled
	setup source1 input "file:///sciezka/do/pliku.wideo"
	setup source1 output #transcode{vcodec=mp2v,vb=10000,acodec=mpga}:bridge-in{id-offset=100}:std{access=udp{ttl=1},mux=ts,dst=226.1.226.1:1234}
	
	new source2 broadcast enabled
	setup source2 input "file:///sciezka/do/pliku.dodatkowego.audio"
	setup source2 output #duplicate{dst=bridge-out{id=2},select=audio}
	
	control source1 play
	control source2 play

Konfig VLM można także obudować tak aby stanowił plik wykonywalny uruchamiający VLC z odpowiednią konfiguracją (poprzez dodanie jako pierwszej linii #!/usr/bin/cvlc --vlm-conf oraz nadanie prawa wykonywalności). Przykład takiej konfiguracji zamieszczam w plikach streaming.sh i mosaic.sh (wersja dostosowana do VLC2).

W pewnych przypadkach warto zainteresować się strumieniowaniem z użyciem C++ RTMP Server.

v4l2loopback

v4l2loopback jest modułem umożliwiającym utworzenie oszukanego urządzenia /dev/video, które pokazywałoby materiał zapisywany przez jakiś program (np. jakiś plik z filmem lub przechwytywamny obraz pulpitu - vlc screen://). Jest to szczególnie użyteczne gdy chemy taki materiał wstawić np. do wideokonferencji prowadzonej z uzyciem linphone lub innego programu używającego v4l jako źródła sygnału. Załączony do dokumentacji modułu przykład pokazuje jak można uzyć tego modułu, wymaga on jednak podania materiału w odpowiednim formacie surowego wideo. Przy eksperymentach z takimi formatami wideo pomocne mogą być komendy:

cvlc aaaa.mp4 --vout="YUV" --yuv-file="/tmp/temp.yuv" --no-yuv-yuv4mpeg2 --yuv-chroma=I420
mplayer -rawvideo w=1280:h=720:fps=1:i420 temp.yuv
vlc --rawvid-width=1280 --rawvid-height=720 --rawvid-fps=1 temp.yuv --rawvid-chroma=I420


Copyright (c) 1999-2015, 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 text/program is free document/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/usage_and_config/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: '2015-12-08 19:08:02 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).