VLC - Warum ist eine Audiospur nach einem Screencasting länger als eine Videospur?

496
Fnifni

Ich verwende den VLC Media Player 2.2.8 Weatherwax (Version 2.2.7-14-g3cc1d8cba9), der von meinem Distrib Repo (Arch Linux) installiert wird. Mein Zweck ist es, einen Befehl zu erstellen, der ein Video meines Desktops mit Audioeingang von micro aufzeichnet.

Nach einiger Recherche habe ich diesen Befehl verwendet:

vlc screen://  :screen-fps=24  :screen-follow-mouse  :screen-mouse-image=cursor.png  :input-slave=alsa://hw:1,0 :sout="#transcode}:duplicate}" 

Ich habe es für ein ~ 1mn-Video getestet und es funktionierte ohne erkennbare Probleme. Dann habe ich ein ~ 1h Video aufgenommen, und das Ergebnis ist folgendes: Link zum Bild (imgur).

Die Werte sind ungefähr. Die Tonverzögerung beginnt mit ~ 3s und endet mit ~ 3mn. Mit Ausnahme der Verzögerung funktionieren Video und Audio ordnungsgemäß.

Warum gibt es eine Audioverzögerung? Liegt es an einer Art Kompression oder an Gründen wie "der Mikroeingang ist langsamer als die Bildschirmvideoaufnahme"?

Vielen Dank für Ihre Antwort.

1

1 Antwort auf die Frage

0
Fnifni

Ok, ich glaube, ich habe eine Lösung gefunden. Bitte korrigieren Sie mich, wenn ich falsch liege.

Lösung

vlc screen://  :screen-fps=24   ...  :sout="#transcode{...fps=24}... 

Die Lösung besteht darin, in der Transcode-Option die gleichen fps wie in der: screen-fps-Option anzugeben.

Vollständiger Befehl (als Referenz):

vlc screen://  :screen-fps=24  :screen-follow-mouse  :screen-mouse-image=cursor.png  :input-slave=alsa://hw:1,0 :sout="#transcode,fps=24}:duplicate}" 

Einzelheiten

Standardmäßig hat VLC:

  • ein Eingang 500 000 µs,
  • eine Ausgabe von 40 000 µs.

Sie können es in der Konsole nach dem Befehl vlc sehen: Link zu image (imgur).

  • Die :screen-fps=24Option bietet die stream_out_transcode stream out: input interval 41666 (base 1)Option für VLC.
  • Die fps=24in transcodeOption bietet die stream_out_transcode stream out: output interval 41666 (base 1)Möglichkeit, VLC.

Wenn ich Recht habe, zu erhalten 41666von 24fps (oder Hz), benötigen wir folgende Operation zu tun: 10^6 / 24 = 41666.66666... ~= 41666 µs

In meinem ursprünglichen Beitrag habe ich fps=24die transcodeOption nicht definiert . Der Standardwert für das Ausgabeintervall war also 40 000µs.

Wenn ich bedenke, dass mein Video 3600lang ist, mache ich folgende Operation: 3600 * (1-40000/41666) = 143.9447Sekunden.

Es ist> 2mn und entspricht dem beobachteten Delta.

Ergebnis mit korrekten Optionen: Link zum Bild (imgur).


Anmerkung

Obwohl es einen Parameter audio-syncin der transcodeOption gibt, funktionierte es nicht wie erwartet. Nur das Hinzufügen von fpsParametern hat den Trick bewirkt.


Verweise

Referenzen finden Sie hier: