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.
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.
Aber wer kann sich schon eine 1000DM teure MPEG-Karte leisten?
Wie so häufig kann man dies (wenn auch nur eingeschränkt) unter Linux
kostengünstig haben, wenn man den Aufwand nicht scheut.
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.
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.
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.
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.
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.
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.
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:

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