Linux als VCR
Als je een TV kaart hebt, maar geen VCR (Video Cassette Recorder) of je
favoriete films op CD wilt branden, zou je dit artikel moeten lezen.
Bijna iedereen die videos professioneel wil bewerken gebruikt vaak een
ander platform dan Linux met GPL programma's.
Wie heeft genoeg geld om een MPEG kaart van zo'n $500 te kopen? Wij niet!
Een TV kaart, een middelgrote, snelle harde schijf (hoeft geen SCSI te
zijn), wat GPL programma's en hoop tijd zijn de benodigdheden.
Wie twee jaar geleden probeerde MPEG videos met Linux te produceren was
aangewezen op de Berkeley tools. Met deze programma's moest je je video
stream in afzonderlijke frames splitsen, dan ieder frame coderen en
tenslotte samenvoegen in een MPEG stream.
Ondertussen is er een comfortabel alternatief dat ook MPEG videos
produceerd. Wij gebruikten het programma Broadcast2000, mpeg2_movie en
Xmovie, alle geschreven door
Adam Williams.
De video is opgenomen met Bcast2000 en opgeslagen in Quicktime
formaat. De conversie van Quicktime naar MPEG2 is gedaan met
mpeg_movie. De MPEG speler is XMovie (de spelers die
meestal worden meegeleverd met distributies ondersteunen alleen MPEG1).
De combinatie van deze drie programmas bleek iets gecompliceerder dan eerst
verwacht...
Broadcast kan beeld en geluid van een TV kaart opnemen, net als veel
andere programma's.
Afhankelijk van hoe krachtig je PC is (met name de snelheid van je harde
schijf) is er een boven-limiet (plafond) aan de data stroom. Helaas bereik
je deze maximale datastroom erg snel.
Meestal is er een maximale resolutie die je PC ondersteund. Met hogere
resoluties krijgt de opname meer fouten. Deze fouten bestaan meestal uit
ontbrekende frames in de stroom. De limiet verschilt per PC en iedereen
zou het voor zich moeten uitproberen.
Voordat je je eerste opnamen kunt uitproberen, moet je eerst de kanalen in
Broadcast2000 instellen.
Daarvoor druk je op de record knop:
Linux & Multimedia
Tot nog toe waren er slechts weinig MPEG kaarten die door Linux ondersteund
werden en was
MainActor de enige beschikbare software.
Zoals gewoonlijk biedt Linux een veel goedkopere oplossing met wat
nadelen en wat meer werk.
Terwijl er meer Linux systemen op de desktop komen, neemt de interesse in
multimedia programma's toe. Eerst waren tekstverwerkers en netwerk tools
de belangrijkste Linux tools, maar met de steeds krachtiger PCs en het
toenemend aantal X programma's zijn multimedia programma's ook niet meer
van de lucht.
Het geluid moest worden geconverteerd in MPEG en beide streams moesten
worden samengevoegd.
Het syncroniseren van beeld en geluid werkte willekeurig; na zoveel werk
kon dat knap irritant zijn.
De software
Broadcast2000
Andere programma's, zoals kWinTV, slaan het video signaal op in het AVI
formaat, Broadcast gebruikt het Quicktime formaat.
Dit kan omdat de Quicktime libraries onder de GPL licentie beschikbaar
zijn.

In het venster dat verschijnt, vul je een dummy bestandsnaam in, waaronder
het video bestand wordt opgeslagen (bijvoorbeeld /tmp/tmp.mov)

Activeer de knop "Render audio tracks" en "Render video tracks" en klik
op OK.
Nu verschijnen er een of twee vensters, afhankelijk van de knop "Monitor
Video". Als je slechts een venster hebt, klik dan op de deze knop en het
tweede venster zal openen. Daar zie je het signaal op je TV kaart. Zolang
er geen kanalen zijn ingestelt, zie je ruis. De knop linksboven in dit
venster leidt je naar een ander venster waar je de programma's kunt
instellen. Open het menu "Add" en er wordt een nieuw venster geopend
waarin je de bron kunt opgeven:

Fijn-afstemmen gaat met de hand en een automatisch zoeken naar kanalen is
niet beschikbaar. Het kan erg lang duren tot je alle kanalen hebt
ingesteld.
Denk er aan om de namen van de kanalen in te stellen (let op Hoofd- en
kleine letters), deze heb je later nodig.
Als je alle kanalen hebt ingesteld, zou je videos moeten kunnen opnemen.
Selecteer het gewenste kanaal en deactiveer de "Monitor Video" knop.
Klik dan op de rode opname knop.
Controleer het aantal verloren frames (in "Frames behind"):
Hier zou je een getal van 1 of 2 frames moeten zien.
Als dit nummer continu toeneemt, is je PC niet in staat de data stroom
af te handelen en moet je een lagere resolutie of framerate kiezen. Dit
kan in het hoofdvenster in
Video -> Frame rate en
Video -> Resize
Standaard resoluties zijn:
| Resoluties |
|
192x144 320x240 384x288 400x300 640x480 768x576 |
De framerate zou ergens tussen de 15 en 24 frames per seconde moeten zijn.
De opgenomen video wordt opgeslagen na het stoppen van de opname en een
klik op de "save" knop. Druk vervolgens op de "play" knop en je ziet het
opgenomen bestand als het menu Window -> Show Video actief is.
Nu kun je de gewenste instellingen vinden: een hogere resoluties met wat
ontbrekende frames of meer frames per seconde en een lagere resolutie.
Als je de maximale datastroom die je PC kan verwerken, hebt gevonden,
schrijf je de instellingen op (framerate en resolutie) en sluit je
Broadcast af.
Op onze PC (K6-400 en IBM harde schijf) werkt het met een resolutie van 320x400 en een framerat van 15 Fps. Dit is niet geweldig, maar acceptabel voor ons.
Een video kan met de hand worden opgenomen, zoals we hierboven deden, maar
een opname die met een script wordt bestuurd is veel efficiënter;
Bcast2000 ondersteund deze mogelijkheid.
Een script ziet er ongeveer zo uit:
| record_script |
(new_project) # start een nieuw project (set_atracks 1) # aantal audio tracks (set_vtracks 1) # aantal video tracks (set_channels 1) # (set_samplerate 48000) # rate van de geluidsopname (set_framerate 15) # Frame rate (set_trackw 320) # Resolutie, breedte (set_trackh 240) # Resolutie hoogte (set_outputw 320) # Breedte van de video uitvoer (set_outputh 240) # Hoogte van de video uitvoer (set_aspectw 4) # verhouding van breedte tot (set_aspecth 3) # Hoogte (ok) # (record) # start opname (set_channel Pro7) # naam van het kanaal (hoofdletter gevoelig) (set_path /tmp/record.mov) # Bestandsnaam van de opname (set_audio 1) # Neem audio op (set_video 1) # Neem video op (set_format Quicktime) # bestandsformaat (set_audio_compression IMA4) # Audio compressie (set_audio_dither 0) # (set_audio_signed 1) # (set_audio_channels 1) # (set_video_compression JPEG) # Video compressie (set_video_quality 80) # kwaliteit van de compressie (ok) # (set_mode timed) # duur opname gedefinieerd in tijd (set_duration 1200) # opnameduur in seconden (set_monitor_audio 0) # geef geen audio weer (set_monitor_video 0) # geef geen video weer (start_recording) # (ok) # |
Nu kan een automatische opname worden gestart via
>> /path/to/bcast2000.sh -b /path/to/record_scriptBcast2000 leest het script, opent het opname venster met de gekozen instellingen en start de opname.
Als opgegeven tijdsduur voorbij is, stopt Broadcast niet automatisch het programma, maar alleen de opname. Het bestand kan alleen met de hand worden opgeslagen en je moet het programma ook met de hand afsluiten (dit is geen ideale oplossing voor automatisch opnemen of voor het opnemen van meer dan een bestand...).
Linux is geen real-time OS, maar een multitasking OS en het kan gebeuren
dat andere programma's starten tijdens het opnemen (bijvoorbeeld door een
cron job), waardoor de PC de gebruikte framerate niet goed aan kan.
De enige oplossing is om alle onnodige programma's te stoppen.
Een ander probleem treedt op als je probeert om een erg lange tijd op te
nemen. Het gemaakte MOV bestand bereikt de maximale bestandsgrootte voor
ext2 erg snel.
Een oplossing zou zijn om een ander bestandssysteem te gebruiken (bijv.
ext3 of beter nog, ReiserFS), maar dit is niet aan te raden voor Linux
newbies.
Een eenvoudige oplossing zou zijn om de film in kleine delen op te nemen.
De beste plekken voor onderbreken zijn de reclames die je er volledig uit
kunt halen terwijl je wacht tot de film verder gaat. Vergeet echter niet
om het volgende deel onder een andere bestandsnaam op te slaan!
mpeg2_movie
Als je de video delen hebt opgenomen, is het tijd voor de volgende stap. De conversie van Quicktime naar MPEG2 duurt erg, erg lang. De video en audio streams worden apart gecodeerd. In de subdirectory video van mpeg2_movie start je het programma encode:
>> encode -b 1900000 /tmp/record.mov /tmp/record.m2vDit programma produceerd de MPEG2 video (extensie .m2v).
De encoding kan erg lang duren, afhankelijk van de grootte van het bestand (15 - 20 uur voor 20 minuten video op onze PC).
Als je de video in delen splits, moet je alle delen op zich coderen:
>> encode -b 1900000 /tmp/record1.mov /tmp/record1.m2v >> encode -b 1900000 /tmp/record2.mov /tmp/record2.m2v >> encode -b 1900000 /tmp/record3.mov /tmp/record3.m2vAls alle m2v bestanden zijn gemaakt, gaan we verder met het converteren van het geluid. Daarvoor start je het programma encode in de audio subdirectory (voor een gesplitse film):
>> ./encode -b 192000 /tmp/record1.mov /tmp/record1.mp2 >> ./encode -b 192000 /tmp/record2.mov /tmp/record2.mp2 >> ./encode -b 192000 /tmp/record3.mov /tmp/record3.mp2Dit gaat een stuk sneller dan de video codering.
Nu moeten de drie video bestanden (.m2v) en de drie audio bestanen (.mp3) worden samengevoegd in een bestand. Het programma mpeg2cat in de subdirectory libmpeg2 zorgt hiervoor:
>> ./mpeg2cat /tmp/record1.m2v /tmp/record2.m2v /tmp/record3.m2v > /tmp/record_all.m2v >> ./mpeg2cat /tmp/record1.mp2 /tmp/record2.mp2 /tmp/record3.mp2 > /tmp/record_all.mp2
In de laatste stap voeg je de video- en audio streams samen. Hiervoor gebruiken we de tool mplex, deze kun je in de mplex subdirectory van mpeg2_movie vinden:
>> mplex /tmp/record_all.m2v /tmp/record_all.mp2 /tmp/record_all.mpgNu hebben we het doel bereikt na een hoop tijd en hebben we het uiteindelijke MPEG2 bestand dat we wilden.
XMovie
Nu, hoe kunnen we de MPEG film zien?
In tegenstelling tot MPEG1, wordt MPEG2 niet erg goed ondersteund onder
Linux (zelfs MPEG2 M$Win tools zijn niet zo gemakkelijk te vinden).
Onder Linux kun je het programma XMovie gebruiken om het bestand af te
spelen. Dit is niet zo makkelijk als je zou denken, omdat het programma de
xv extensie nodig heeft om te compileren en deze extensie is alleen
opgenomen bij de nieuwste X servers.
Als je een oudere X server gebruikt, moet je niet te teleurgesteld zijn.
Het kan helpen als je de overkomende regels in de broncode uitschakeld.
Er zijn nogal wat meer regels dan we hier kunnen weergeven en dat is
waarom we onze "aangepaste" versie van XMovie hier beschikbaar hebben
gemaakt. Je kunt de broncode of een binaire versie (RedHat 6.2) hier
downloaden:
(Download
Xmovie en "Dank je wel" tegen de GPL zeggen).
Als de voor-gecompileerde versie niet werkt, kun je de broncode downloaden
en een "make clean; make" uitvoeren.
Deze aangepaste versie kan niet alle functies ondersteunen van het
origineel, maar zolang je MPEG2 bestanden kunt afspelen, zou het moeten
volstaat.
Het starten van XMovie gaat als volgt:
>> xmovie /tmp/record_all.mpg
Wensen voor de toekomst
Een automatische opname is nog niet mogelijk omdat Broadcast niet
automatisch afsluit en het video apparaat locked zolang het actief is.
Je kunt geen opnamen starten in een gedefinieerde tijd-tabel zonder het
venster met de hand te sluiten.
We hopen dat Broadcast's ontwikkelaars deze optie toevoegen en het
mogelijk maken om de PC als VCR te gebruiken via het at commando.
We dromen over een klein Web frontend zodat je je VCR kunt programmeren
via het Internet (en als je je bedenkt hoeveel geld je je kunt besparen
in vergelijking met een commerciële AV-server, zul je breed
grijnzen!!)
Zodra Broadcast's auteurs een nieuwe versie vrijgeven, zullen we het
volgende artikel schrijven.
| http://members.xoom.com/NicholasF/ |
Trinity is een ander programma voor het opnemen van video's. Het is net zo
goed ontwikkeld als Broadcast, maar het lijkt er op dat de ontwikkeling
gestopt is. |
| http://heroine.linuxave.net | Homepage van Broadcast, Xmovie en mpeg2_movie. Hier kun je een grote collectie van andere tools en informatie over MPEG en Linux vinden. |
|
http://www.ma inconcept.com/products/ mainactorLinux.shtml |
Hier kun je de commerciële tool vinden voor het bewerken van frames, geschikt voor Linux. |
|
http://bmrc.berkeley.edu/frame/ research/mpeg/mpeg_encode.html |
De bron van alle MPEGs: de Berkeley MPEG tools. |
| http://moes.pmnet.uni-oldenburg.de/bttvgrab/ | Bttvgrap is een ander programma om MPEG videos te maken, maar met een compleet andere video-audio synchronisatie. Het programma kan volledig via opties worden aangestuurd en kan gebruikt worden voor automatische opname. |
Trinity is een ander programma voor het opnemen van video's. Het is net zo
goed ontwikkeld als Broadcast, maar het lijkt er op dat de ontwikkeling
gestopt is.