MEncoder: Aufnahme ruckelt

0815Chaot

FreeBSD/sparc64-Tüftler
In nächster Zeit möchte ich gerne ein paar Fernsehsendungen aufzeichnen. Dazu habe ich die gute alte Hauppauge WinTV mit BT848 verbaut:
Code:
> dmesg | grep bktr0
bktr0: <BrookTree 848A> mem 0xf8100000-0xf8100fff irq 20 at device 9.0 on pci2
bktr0: [GIANT-LOCKED]
bktr0: Hauppauge Model 60114 C VM
bktr0: Detected a MSP3410D-B4 at 0x80
bktr0: Hauppauge WinCast/TV, Philips PAL I tuner, msp3400c stereo.
Das System ist ein P4 Northwood 2.8 GHz mit 2048 MB RAM (HT deaktiviert, UP-Kernel). Fernsehen mit MPlayer funktioniert auch zur vollsten Zufriedenheit.

Nun möchte ich was mit MEncoder aufnehmen und verwende dazu:
Code:
> mencoder -quiet tv://1 \
     -tv driver=bsdbt848:input=1:channels=[b][Komplette Liste der Kanäle][/b] \
     -ovc lavc -oac lavc \
     -lavcopts vcodec=mpeg4:vbitrate=2048:acodec=mp3:abitrate=128 \
     -vop pp=lb,crop=720:544:24:16 \
     -endpos 5 \
     -o TV-Aufnahme.avi
Dies nimmt mir nun fünf Minuten lang den Kanal 1 auf, wobei die resultierende Datei TV-Aufnahme.avi ein MPEG4 mit MP3-Tonspur ist. Während der Aufnahme liegt die CPU-Belastung bei etwa 55-60%.

Spiele ich nun TV-Aufnahme.avi mit dem MPlayer ab, ruckelt das Video leicht, aber doch merklich. Ich habe auch mal geringere Bitraten versucht, die einzige Auswirkung ist allerdings, daß die CPU-Belastung während der Aufnahme sinkt - das Ruckeln beim Abspielen der resultierenden Datei bleibt.

Ich habe ehrlich gesagt von Videobearbeitung keine Ahnung, weiß also nicht, wo der Schuh drückt. Gibt es eine Möglichkeit, die Aufnahme irgendwie zu tunen? Ist das eventuell eine Einschränkung der verwendeten Codecs? Wäre super, wenn da jemand einen Tip für mich hätte. Danke im Voraus.
 
Das Problem ist, dass es bei analogem TV keine wirkliche synchronisation zwischen Bild und Ton gibt. Sprich Bild und Ton werden völlig getrennt voneinander abgespielt, synchron sind sie nur, weil sie vom Sender synchron gesendet werden. Mplayer (und andere Programme) stehen nun vor dem Problem, dass sie bei Aufnahme für die Datei Video und Audio synchronisieren müssen.
Das eigentliche Verfahren ist recht kompliziert, es geht aber davon aus, dass beim Aufnahmestart Audio und Video synchron sind und gleich schnell laufen. Weicht eines von beiden ab, dupliziert Mplayer Videoframes oder läst schlicht welche weg. Als Folge ruckelt das Bild.

Es gibt nun 3 Lösungsansätze:
1. Mit Hardframedrop aufnehmen. Macht das Ruckeln allerdings meist nur regelmäßiger :)
2. Die Audio-Video-Synchronisation tollranter einstellen. Also ein höheres Delay zulassen. Funktioniert recht gut, du riskierst allerdings einen vom Bild abweichenden Ton.
3. Audio und Video getrennt aufnehmen und später in einem Tool wie avidemux2 verheiraten. Geht meist sehr gut, macht allerdings viel Arbeit und erfordert das Anpassen auf einem Frame genau von Hand.

Abseits dieser Lösungen würde sich ein anderes Tool zum Aufnehmen (ich kenne leider keines) anbieten. Oder einfach mal schauen, ob Mplayer nicht Einstellmöglichkeiten für den Synchronisationsalgorytmus hat.
 
Moin,

ich hatte mal ein ähnliches Phänomen. Bei mir lag´s an gkrellm, das hat alle
zwei Sekunden die Festplattenbelegung abgefragt.
Als ich´s abgestellt hatte liefen auch die Video´s wieder flüssig.

....nur mal so ins blaue getippt.....:)

Gruss
 
Hallo 0815Chaot,

als glücklicher Besitzer einer Dreambox (die liefert mir TV-Aufnahmen als MPEG2-Transport-Streams frei Haus) habe ich noch nicht viel mit mencoder gearbeitet.

Wenn die Aufnahme ruckelt, spricht einiges dafür, dass die Framerate nicht in Ordnung ist. Mit den üblichen Videoplayern (hier wohl: mplayer) kannst Du feststellen, mit wieviele Frames pro Sekunde die Aufnahme erstellt wurde. PAL verwendet 25 fps, NTSC knappe 30 fps.

Analoges Fernsehen wird im übrigen interlaced ausgestrahlt, d.h. das Bild wird aus zwei Halbbildern zusammengesetzt. Das ergibt die vom TV gewohnten 50 Hz, durch die lange Nachleuchtdauer der TV-Röhren merkt man das Interlacing nicht.

Möglicherweise wird durch die Verwendung des genannten Codecs bei der Aufnahme nur jedes zweite Halbbild gespeichert. Was genau ist bei Dir "Ruckeln"?

Details zum interlacing und den verschiedenen Ausgabeformaten stehen meines Wissens in der mplayer-manpage bzw. der Doku dazu.

juergen
 
So, habe nun mit verschiedenen Einstellungen probiert. Zunächst schien vmax_b_frames=1 die Lösung zu sein. Die ersten drei Minuten der Aufnahme waren auch absolut ruckelfrei. Doch plötzlich, so ab Minute 4 etwa, fing es extrem zu ruckeln an. Das ganze erinnerte mehr an eine Dia-Show. Dieser Fehler war reproduzierbar in jeder Aufnahme, die länger als drei Minuten dauerte.

Aktuell experimentiere ich mit pp=default/tmpnoise herum. Das scheint auch bei halbstündigen Aufnahmen durchgehend ruckelfrei zu sein. Jedoch muß ich das noch genauer verifizieren.

Na gut, ich probiere weiter. So wirklich schlau werde ich aus der ganzen Sache aber nicht. Trotz eurer Hinweise hänge ich ziemlich in der Luft. Meiner Beobachtung nach sollten Framerate und Synchronisation funktionieren. Das mit dem Interlacing muß ich mir noch mal ansehen. Durch die langen Aufnahmezeiten gestalten sich die Tests allerdings ziemlich zäh.
 
Das mit der Festplatte glaube ich nun wirklich nicht. Die letzte 30 Minuten lange Aufnahme belegt 426 MB, das sind etwa 12,5 MB pro Minute. Das sollte nun wirklich jede Platte schaffen. Immerhin ist das der theoretische Bruttodurchsatz, den selbst ein 100-MBit-Netz in einer einzigen Sekunde schaffen sollte. Und sollte die Platte wirklich mal nicht hinterherkommen, gibt es noch den Cache. Für den ist bei 2 GB RAM auch genug Platz, da würde die komplette Aufnahme viermal reinpassen, und bei der letzten Aufnahme waren sogar noch etwa 1700 MB RAM frei...

-ofps 25 bringt nichts, weil die Ausgabedatei bereits 25 FPS hat. Das hat der MEncoder bereits korrekt aus dem Eingabe-Stream übernommen.
 
Zurück
Oben