Linux als Videorecorder
Falls Sie eine TV-Karte besitzen, aber keinen Videorecorder haben, oder wenn Sie schon immer
Ihren Lieblingsfilm auf CD brennen wollten, sollten Sie unbedingt weiterlesen...
Wer professionelle Video-Bearbeitung machen will, stößt schnell an die Grenzen
von Linux und GPL.
Aber wer kann sich schon eine 1000DM teure MPEG-Karte leisten?
Eine TV-Karte, eine große mittelschnelle Festplatte (es muß nicht unbedingt
SCSI sein), einige GPL-Programme und viel Geduld bringen einen zum gleichen
Ziel.
Wer noch vor ca. zwei Jahren unter Linux MPEG-Videos erzeugen wollte, kam um die
Berkeley-Tools nicht herum. Mit diesen Programmen mußte man sein Video zuerst
in Einzelbilder zerlegen, dann jedes einzelne Bild berechnen lassen und
abschließend zu einem MPEG-Stream zusammensetzen.
Mittlerweile existiert eine recht komfortable Alternative, um MPEG-Videos zu
erzeugen. Wir benutzen hier die Programme Broadcast2000, mpeg2_movie und XMovie, die
alle drei vom Programmierer Adam Williams
stammen.
Aufgenommen wird das Video mittels Bcast2000 im Quicktime-Format, die
Umwandlung von Quicktime in MPEG2 erfolgt mittels der Tools des
mpeg2_movie-Pakets und um das entstandende Werk anschauen zu können,
benötigt man noch einen MPEG2-Player (die bei Distributionen normalerweise
mitgelieferten Player unterstützen nur MPEG1). Hierfür benutzen wir XMovie.
Wie das Zusammenspiel der einzelnen Programme im Detail aussieht, ist
allerdings etwas komplizierter, als man auf den ersten Blick erwartet...
Broadcast besitzt (wie viele andere Linux-Programme auch) die Fähigkeit Bild
und Ton einer TV-Karte aufzunehmen.
Abhängig von der Leistungsfähigkeit Ihres PC's (speziell von der
Schnelligkeit der Festplatte) ist eine obere Grenze für den Datenfluß beim
Abspeichern gegeben. Leider erreicht man diese Grenze beim Abspeichern von Video-Dateien
recht schnell, da dies mit einem hohen Datenfluß verbunden ist.
Deshalb ist nur eine maximale Auflösung bei der Video-Aufnahme möglich, weil
oberhalb dieser es zu Fehlern in der Aufnahme kommt, die sich zumeist in
fehlenden Bildern auswirken. Diese obere Grenze ist jeweils abhängig von
dem PC an dem Sie arbeiten und sollte individuell herausgefunden werden.
Vor der Benutzung von Broadcast2000 als Videorecorder ist es erstmal notwendig,
die Fernsehsender, welche Sie später aufnehmen wollen, einzuprogrammieren.
Dies geschieht, indem Sie den Aufnahme-Knopf drücken:
Linux & Multimedia
Die bisher unterstützten MPEG-Karten lassen sich an einer Hand abzählen,
und auf Softwareseite existiert als einziger halbwegs brauchbarer Kandidat
das Programm MainActor.
Wie so häufig kann man dies (wenn auch nur eingeschränkt) unter Linux
kostengünstig haben, wenn man den Aufwand nicht scheut.
Seit sich Linux immer stärker auch dem Desktop widmet, wächst das Interesse
an Multimedia-Programmen. Während in der Anfangszeit des Betriebssystems
hauptsächlich Textverarbeitungen und Netzwerktools den Linux-Software-Markt
beherrschten, erscheinen mit zunehmender PC-Leistung und
Desktop-Orientiereung der Linux-Benutzer immer mehr Multimedia-Programme.
Zum Schluß mußte man dann noch den Sound in MPEG umwandeln und beide Streams
zusammenfügen.
Ob nach diesem Aufwand Bild und Ton noch synchron sind, ist eher Glückssache gewesen.
Die Software
Broadcast2000
Im Unterschied zu den anderen Programmen, wie z.B. kWinTV, wird das Video-Signal
allerdings nicht im AVI-, sondern im Quicktime-Format abgespeichert.
Dies ist mittlerweile möglich, da die Quicktime-Libraries seit einiger Zeit
nun auch unter GPL vertrieben werden.

In dem erscheinenden Fenster benutzen Sie einen beliebigen Dateinamen, wo
testweise die Video-Datei später abgespeichert werden soll
(z.B. /tmp/tmp.mov).

Aktivieren Sie den Knopf 'Render audio tracks' und 'Render video tracks' und
drücken Sie auf OK.
Nun erscheint ein weiteres Fenster (möglicherweise auch zwei). Falls er
nicht schon gedrückt ist, drücken Sie jetzt den Knopf 'Monitor Video'.
Spätestens jetzt erscheint ein Fenster, in dem das Signal Ihrer TV-Karte
angezeigt wird. Normalerweise sollten Sie hier nur Rauschen sehen, da noch keine
Programme eingestellt wurden.
Mit dem oberen linken Knopf in diesem Fenster, kommen Sie zu einem weiteren Fenster,
in dem Sie die Programme einstellen können.
Mit dem Menüpunkt 'Add' erscheint nun noch ein Fenster, bei dem Sie die Quelle,
noch weiter spezifizieren müssen:

Das Finetuning geschieht noch per Hand und es gibt auch keine automatische
Sendersuche, so daß es schon etwas dauern kann, bis man alle Kanäle beisammen
hat.
Merken Sie sich genau den Namen (besonders Groß- und Kleinschreibung) der Sender,
den Sie den einzelnen Sendern geben, da Sie später diesen Namen zum Aufnehmen
benötigen, um den richtigen Sender anzusteuern.
Sind alle Sender eingestellt, können Sie mit dem Aufnehmen des Videos beginnen.
Wählen Sie dafür den gewünschten eingespeicherten Sender aus,
deaktivieren Sie die Darstellung des Videosignals (Button: 'Monitor Video') und
drücken Sie auf den roten Aufnahmeknopf.
Beachten Sie, wieviele Frames bei der Aufnahme verloren gehen (zu sehen unter
'Frames behind'):
Hier sollte ein Zahlenwert von nicht mehr als konstant 1 bis 2 Frames
angezeigt werden.
Falls die Zahl ständig wachsen sollte, ist der PC dem Datenstrom nicht gewachsen,
und Sie müssen eine niedrigere Auflösung oder Framerate einstellen.
Dies geschieht im Broadcast2000 Hauptfenster in den Menüpunkten
Video -> Frame rate und
Video -> Resize
Gängige Auflösungen sind hierbei:
| Auflösungen |
|
192x144 320x240 384x288 400x300 640x480 768x576 |
Die Framerate sollte dabei zwischen 15 bis zu 24 Bildern pro Sekunde liegen.
Das aufgenommene Video kann man sich dann nach Beenden der Aufnahme und Drücken
auf den Save-Knopf anschauen, wenn man den Play-Knopf im Broadcast2000 Hauptfenster
drückt (Der Menüpunkt Window -> Show Video muß dafür
auch aktiviert sein).
Nun sollten Sie ausprobieren, was Ihrem Geschmack am ehesten entgegenkommt:
Hohe Auflösung mit leicht ruckelnden Bildern, oder lieber mehr Bilder pro Sekunde,
dafür aber eine kleinere Auflösung.
Wenn Sie das Maximum herausgefunden haben, was Ihr PC gerade noch verarbeiten kann, schreiben
Sie sich die Werte (Framerate und Auflösung) auf, und beenden Sie Broadcast.
An meinem Rechner (K6-400 mit IBM-Festplatte) habe ich mich für eine Auflösung von 320x240 und einer Framerate von 15 Fps entschieden, was zwar nicht überragend, aber durchaus nutzbar ist.
Das Video kann natürlich, wie eben geschehen, per Hand aufgenommen werden,
viel effektiver ist es hingegen, die Aufnahme mittels eines Skriptes zu starten, was
nämlich von Bcast2000 auch unterstützt wird.
Ein solches Skript sollte dann folgendermaßen aussehen:
| record_scipt |
(new_project) # starte ein neues Projekt (set_atracks 1) # Anzahl der Audio-Spuren (set_vtracks 1) # Anzahl der Video-Spuren (set_channels 1) # (set_samplerate 48000) # Rate der Sound-Aufnahme (set_framerate 15) # Frame-Rate (set_trackw 320) # Bild-Breite (set_trackh 240) # Bild-Höhe (set_outputw 320) # Höhe des ausgegebenen Bidles (set_outputh 240) # Breite ----- (set_aspectw 4) # Seitenverhältnis (set_aspecth 3) # (ok) # (record) # Aufnahme starten (set_channel Pro7) # der Sendernamen (set_path /tmp/aufnahme.mov) # Dateinamen zur Aufnahme (set_audio 1) # Audio Aufnehmen (set_video 1) # Video Aufnehmen (set_format Quicktime) # Datei-Format (set_audio_compression IMA4) # Audio-Kompression (set_audio_dither 0) # (set_audio_signed 1) # (set_audio_channels 1) # (set_video_compression JPEG) # Video-Kompression (set_video_quality 80) # Qualitaet der Kompression (ok) # (set_mode timed) # nur begrenzte Zeit aufnehemen (set_duration 1200) # Aufnahmedauer in Sekunden (set_monitor_audio 0) # Ton nicht darstellen (set_monitor_video 0) # Bild nicht darstellen (start_recording) # (ok) # |
Um jetzt die Aufnahme vollautomatisch zu starten, genügt ein Aufruf der Form
>> /path/to/bcast2000.sh -b /path/to/record_scriptBcast2000 arbeitet dann das Skript ab, öffnet das Aufnahmefenster mit den jeweiligen Einstellungen und beginnt mit der Aufnahme.
Ist die Aufnahmezeit dann abgelaufen, beendet sich Broadcast allerdings nicht automatisch, sondern stoppt nur die Aufnahme. Das Abspeichern der Datei und das Beenden von Broadcast muß immer noch vom Benutzer per Hand geschehen (dies ist sehr nachteilig für eine vollautomatische Aufnahme, wie wir später noch sehen werden...)
Da Linux kein Echtzeitbetriebssystem ist, kann es leider immer wieder vorkommen,
daß während der Aufnahme andere Programme mit anspringen (z.B. gestartet durch
einen Cron-Job) und somit die vom PC bewältigte Framerate plötzlich absinkt.
Einzige Lösung hierfür ist nur, alle anderen Programme, die nicht dringend
benötigt werden, zu stoppen.
Ein anderes Problem bei der Aufnahme ist, daß man nicht beliebig lange im
Quicktime-Format aufnehmen kann, da die erzeugte MOV-Datei schnell die
maximal erlaubte Dateigröße des ext2-Dateiformats erreicht.
Abhilfe schafft hier die Benutzung eines anderen Dateisystems (z.B. ext3
oder besser ReiserFS), wovon aber unerfahrenen Linux-Benutzern dringend abgeraten
wird.
Der einfachere Ausweg lautet, den aufzunehmenden Film einfach in mehrere
kleinere Teile aufzubrechen. Besonders gut eignen sich hierfür natürlich
Werbepausen, die man somit gleich herausschneiden kann. Beachten Sie aber,
daß Sie bei jeder Aufnahme einen anderen Dateinamen benutzen,
um die vorherige Datei nicht zu überschreiben.
mpeg2_movie
Haben Sie die Videos aufgenommen, geht es an den zeitaufwendigsten Teil, der Umwandlung der Quicktime-Dateien ins MPEG2-Format. Hierbei müssen Video- und Audio-Stream einzeln berechnet werden. Im Unterverzeichnis video von mpeg2_movie startet man das Programm encode:
>> encode -b 1900000 /tmp/aufnahme.mov /tmp/aufnahme.m2vDieses Programm erzeugt das MPEG2-Video (Endung .m2v).
Die Umwandlung kann sehr lange dauern (15-20 Stunden, abhängig von der Dateigröße).
Hat man das Video in mehrere Teile aufgetrennt, muß man jeden Teil einzeln berechnen:
>> encode -b 1900000 /tmp/aufnahme1.mov /tmp/aufnahme1.m2v >> encode -b 1900000 /tmp/aufnahme2.mov /tmp/aufnahme2.m2v >> encode -b 1900000 /tmp/aufnahme3.mov /tmp/aufnahme3.m2vSind alle m2v-Dateien erzeugt, geht es daran, den Ton in eine MPEG2-Datei zu konvertieren. Dafür startet man im Unterverzeichnis audio das Programm encode (bei mehreren Teilen folglich):
>> ./encode -b 192000 /tmp/aufnahme1.mov /tmp/aufnahme1.mp2 >> ./encode -b 192000 /tmp/aufnahme2.mov /tmp/aufnahme2.mp2 >> ./encode -b 192000 /tmp/aufnahme3.mov /tmp/aufnahme3.mp2Das Konvertieren des Tons in das mp2-Format geht wesentlicher schneller als beim Bild.
Nun müssen die drei Video-Dateien (.m2v) und die drei Audio-Dateien (.mp2) zu jeweils einer Datei zusammengefügt werden. Dafür benutzt man das Programm mpeg2cat im Unterverzeichnis libmpeg2:
>> ./mpeg2cat /tmp/aufnahme1.m2v /tmp/aufnahme2.m2v /tmp/aufnahme3.m2v > /tmp/aufnahme_all.m2v >> ./mpeg2cat /tmp/aufnahme1.mp2 /tmp/aufnahme2.mp2 /tmp/aufnahme3.mp2 > /tmp/aufnahme_all.mp2Im letzten Schritt müssen nun noch Bild und Ton zu einer einzigen Datei zusammengefügt werden. Hierfür gibt es wieder ein weiteres Tool namens mplex, welches sich auch im Unterverzeichnis mplex von mpeg2_movie befindet:
>> mplex /tmp/aufnahme_all.m2v /tmp/aufnahme_all.mp2 /tmp/aufnahme_all.mpgDies ist endlich die MPEG2-Datei, die wir die gesamte Zeit haben wollten.
Mit viel Zeit und reichlich Konsolen-Arbeit hat man es endlich geschafft ...
XMovie
Hat man bis hierhin alles überstanden, steht man vor dem Problem, die MPEG-Datei
auch anschauen zu wollen. Im Gegensatz zum MPEG1-Format wird das MPEG2-Format
bisher unter Linux nur von wenigen Programmen unterstützt (selbst unter Windows
ist es problematisch auf die schnelle einen MPEG2-Player zu finden).
Unter Linux kann allerdings das Programm XMovie eingesetzt werden, um die
Dateien abzuspielen. Dies gestaltet sich aber schwerer als erwartet, da
das Programm zum Kompilieren die xv-Erweiterungen benötigt, welche nur die
neuesten X-Server bereitstellen.
Wer einen älteren X-Server besitzt, muß aber nicht gleich verzweifeln.
Es genügt nämlich, die entsprechenden Stellen im Quellcode zu entfernen, die
diese Erweiterungen benutzen.
Allerdings sind dies mehr Stellen, als man hier kurz nennen könnte, deshalb
plazieren wir hier lieber gleich unsere angepasste Version von XMovie,
sowohl im Quellcode als auch kompiliert auf eine RedHat 6.2
(download XMovie, GPL sei Dank!).
Sollte die vorkompilierte Version bei Ihnen nicht laufen, müssen Sie den
Quellcode wahrscheinlich mit "make clean; make"
erneut kompilieren.
Diese gekürzte Version wird nun vielleicht nicht mehr alle Funktionen des
Originals bieten, so lange man aber seine MPEG2-Dateien abspielen kann, wird
es genügen.
Mit einem geeigneten Aufruf von XMovie kann man sich nun seine Videos ansehen:
>> xmovie /tmp/aufnahme_all.mpg
Für die Zukunft
Eine vollautomatische Aufnahme ist leider noch nicht möglich, da Broadcast2000
sich nicht automatisch beendet, und deshalb das Video-Device nicht wieder freigegeben
wird. Man kann somit nicht per Skript mehrere Aufnahmen hintereinander starten,
ohne jedesmal das Fenster per Hand zu schließen.
Wir hoffen, daß dies vom Broadcast-Programmierer demnächst behoben wird, denn dann ist es
möglich, den PC als vollwertigen Videorecorder mittels eines at-Aufrufs zu benutzen.
Mir schwebt dabei ein kleines Web-Frontend vor, so daß man von überall aus seinen
"Videorecorder" über das Internet programmieren könnte (Man sollte sich die Ersparnis
gegenüber dem kommerziellen AV-Server mal vorstellen!!).
Sobald der Autor von Broadcast2000 diesen Mißstand behoben hat, wird es bestimmt
einen Folgeartikel geben.
| http://members.xoom.com/NicholasF/ |
Trinity ist ein weiteres Programm zum Aufnehmen von Videos. Allerdings ist es noch nicht
so weit entwickelt wie Broadcast. Außerdem scheint die Entwicklung des Programms momentan
nicht mehr weiterzugehen. |
| http://heroine.linuxave.net | Homepage von Broadcast, Xmovie und mpeg2_movie. Außerdem finden sich hier eine große Fülle weiterer Tools und Informationen rund um MPEG und Linux. |
|
http://www.mainconcept.com/products/ mainactorLinux.shtml | Hier finden Sie das kommerzielle Bildbearbeitungsprogramm MainActor, welches mittlerweile auch für Linux erhältlich ist. |
|
http://bmrc.berkeley.edu/frame/ research/mpeg/mpeg_encode.html | Die Quelle allen MPEGs: die Berkeley-MPEG-Tools. |
| http://moes.pmnet.uni-oldenburg.de/bttvgrab/ | Bttvgrab ist ein weiteres Programm zum Erzeugen von MPEG-Videos, allerdings mit schlecheter Bild-Ton-Synchronisation. Das Programm kann komplett per Konsole gesteuert werden, und eignet sich somit besonders gut für automatische Aufnahmen. |
Anmerkungen zu diesem Artikel
Eigene Anmerkung eintragen
Trinity ist ein weiteres Programm zum Aufnehmen von Videos. Allerdings ist es noch nicht
so weit entwickelt wie Broadcast. Außerdem scheint die Entwicklung des Programms momentan
nicht mehr weiterzugehen.