Nicht synchrones Audio-Video mit Mencoder

6830
nhinkle

Ich habe eine mkv (matroska) -Datei mit ffmpeg in avi konvertiert:

ffmpeg -i input.mkv -f mp4 -vcodec mpeg4 -sameq -r 29.97 -b 512kb -acodec ac3 -ab 128kb -vol 512 output.avi 

Die Ausgabedatei wird mit mplayer einwandfrei abgespielt. Danach habe ich mit dem Mencoder Untertitel eingefügt:

mencoder output.avi -o new.avi -oac pcm -ovc lavc -subfont-text-scale 3 -sub subtitle.srt 

Nachdem ich das Video "new.avi" wiedergegeben habe, sind Video und Audio nicht mehr synchron. Welche Optionen kann ich in den Mencoder setzen, um das A / V zu synchronisieren?

Ich habe auch die ffmpeg -newsubtitleOption ausprobiert, kann aber nicht funktionieren. Alle Anwendungsbeispiele von -newsubtitlewürden uns sehr freuen.

1
Ich schlage vor, (a) die gesamte Codierung mit dem Mencoder zu machen, hier ist keine Notwendigkeit für ffmpeg; (b) -mc 0, -noskip und -vf Harddup. derobert vor 14 Jahren 0
Haben Sie es nach der Konvertierung wiedergegeben, aber vor dem Einfügen von Untertiteln? ist es dann synchron? quack quixote vor 14 Jahren 0

2 Antworten auf die Frage

1
Justin Smith

Wie derobert erwähnt hat, können Sie das Ganze in mencoder erledigen, das die ffmpeg-Bibliotheken selbst verwendet und viel leistungsfähiger ist. Dadurch wird die Transkodierung vermieden, die Sie gerade durchführen. Die Option -audio-delay im Mencoder legt einen Offset für das Audio relativ zum Video fest, wenn die Offsetdifferenz absolut ist. Sie können auch andere Einstellungen für -autosync versuchen (der Standardwert ist 0, bis zu 30 werden im Handbuch erwähnt).

1
quack quixote

Wenn Sie die AVI- Schnittstelle nicht wirklich benötigen, können Sie dies mit mkvmerge aus der MkvToolnix-Suite versuchen (anstelle eines Mencoders ). MKVs können "weiche" Untertitelspuren enthalten, was bedeutet, dass Sie den Videostrom nicht neu codieren müssen, um sie aufzunehmen. (Dies bedeutet auch, dass Spieler die Untertitelspuren bei Bedarf deaktivieren können.)

Das Hinzufügen einer SRT-Datei zu einem MKV ist so einfach wie

$ mkvmerge -o with-subtitles.mkv without-subtitles.mkv mymovie.srt  or to specify a language for the subtitle track: $ mkvmerge -o with-lang-codes.mkv without-lang-codes.mkv --language 0:eng english.srt --default-track 0 

(Angepasst aus dem Abschnitt Beispiele der oben verlinkten Manpage mkvmerge ).