home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Ronny Ziegler
Vertaald door: Guus Snijders
Languages: en de
Help Ons!
 

Linux als VCR

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.

 

Linux & Multimedia

Bijna iedereen die videos professioneel wil bewerken gebruikt vaak een ander platform dan Linux met GPL programma's.
Tot nog toe waren er slechts weinig MPEG kaarten die door Linux ondersteund werden en was MainActor de enige beschikbare software.

Wie heeft genoeg geld om een MPEG kaart van zo'n $500 te kopen? Wij niet!
Zoals gewoonlijk biedt Linux een veel goedkopere oplossing met wat nadelen en wat meer werk.

Een TV kaart, een middelgrote, snelle harde schijf (hoeft geen SCSI te zijn), wat GPL programma's en hoop tijd zijn de benodigdheden.
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.

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

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

Broadcast2000

Broadcast kan beeld en geluid van een TV kaart opnemen, net als veel andere programma's.
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.

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:

Opname knop

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:

Broadcast instellingen

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"):

Opname

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
160x120
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)      		      #
  


download script

Nu kan een automatische opname worden gestart via

  >> /path/to/bcast2000.sh -b /path/to/record_script
  
Bcast2000 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.m2v
  
Dit 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.m2v
  
Als 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.mp2
  
Dit 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.mpg
Nu hebben we het doel bereikt na een hoop tijd en hebben we het uiteindelijke MPEG2 bestand dat we wilden.

XMovie

xmovie Screenshot 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 Logo 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.