Ich habe eine Reihe von Screencasts mit recordmydesktop unter Ubuntu 12.10 erstellt. Die Ausgabe ist eine OGV-Datei. Wenn ich die ogv-Datei mit dem Standard-Movie-Player (Totem) anschaue, sieht es gut aus - Audio und Video sind synchron. Wenn es (von mir oder YouTube) transkodiert wird, sind Audio und Video nicht synchron. Es sieht so aus, als würde ich beim Erzählen ein oder zwei Folien überspringen.
Ich vermute, das Problem lässt sich besser dadurch beschreiben, dass während der Transcodierung doppelte Frames gelöscht werden. Das Konvertieren von Videos, bei denen sich die Maus bewegt, scheint normalerweise gut zu funktionieren. Aber wenn ich nur während einer Folie spreche, werden diese doppelten Frames gelöscht.
Ich habe das gesehen, aber es ist nicht ganz meine Situation (versuche, von ogv -> irgendetwas zu gehen) https://superuser.com/questions/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync
AVI-Dateien scheinen korrekt zu übersetzen! Ich nehme an, dass dies ein großer Hinweis für jemanden sein wird. Ich würde immer noch gerne das zugrunde liegende Problem aufspüren. Ich teste die Konvertierung meiner vorherigen Videos in AVI, aber das dauert eine Weile, da ich jeden Übergang überprüfen muss.
Dies ist die Original-OGV-Datei von gtk-recordmydesktop: http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv
Das Video beginnt mit einer Folie für 10 Sekunden und geht dann zu 3 weiteren Folien mit jeweils 5 Sekunden über. Jedes Mal, wenn ich die Folien vorschiebe, tippe ich auch auf das Mikrofon (10s, 15s, 20s, 25s).
Hier sind einige Konvertierungen, die durchgeführt wurden (jede zeigt ihre eigenen Video-Timing-Probleme):
http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4
http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4
Hier ist es auf YouTube - Sie können sehen, dass es bei etwa 13 Sekunden früh voranschreitet (von Folie 1 -> Folie 2):
Hier ist der Beweis, dass die OGV-Datei korrekt funktioniert:
Mit ffmpeg oder avconv scheine ich ähnliche Ergebnisse wie bei youtube zu erhalten (Übergänge scheinen früh, aber nicht unbedingt gleichzeitig zu erfolgen).
Hier ist der Befehl, den ich verwende (mit einem aktuellen statischen Build von ffmpeg) und ausgebe:
$ ~/ffmpeg/ffmpeg -i JSP.ogv JSP.mp4 ffmpeg-Version N-50025-gb8bb661 Copyright (c) 2000-2013 die FFmpeg-Entwickler erstellt am 17. Februar 2013 05:23:03 mit gcc 4.6 (Debian 4.6.3-1) Konfiguration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg- static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable -zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass - -enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx libavutil 52.17.101 / 52.17.101 libavcodec 54.91.103 / 54.91.103 libavformat 54.63.100 / 54.63.100 libavdevice 54.3.103 / 54.3.103 libavfilter 3.38.100 / 3.38.100 libswscale 2.2.100 / 2.2.100 libswresample 0.17.102 / 0.17.102 libpostproc 52. 2.100 / 52. 2.100 [ogg @ 0x34d4640] Mehrere Fisbone für denselben Stream sind nicht implementiert. Aktualisieren Sie Ihre FFmpeg-Version auf die neueste Version von Git. Wenn das Problem weiterhin auftritt, weist Ihre Datei eine Funktion auf, die nicht implementiert wurde. [ogg @ 0x34d4640] Header-Parsing für Stream 0 fehlgeschlagen [ogg @ 0x34d4640] Defekte Datei, Keyframe nicht korrekt markiert. Eingabe #0, ogg, aus 'JSP.ogv': Dauer: 00:12:49.67, Start: 0.000000, Bitrate: 224 kb/s Stream #0:0: Daten: keine Stream #0:1: Video: theora, yuv420p, 1600x880 [SAR 1:1 DAR 20:11], 15 fps, 15 tbr, 15 tbn, 15 tbc Metadaten: RECORDMYDESKTOP : 0.3.8.1 Stream #0:2: Audio: vorbis, 22050 Hz, mono, fltp, 89 kb/s [libx264 @ 0x369c5e0] mit SAR=1/1 [libx264 @ 0x369c5e0] mit CPU-Fähigkeiten: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX [libx264 @ 0x369c5e0] Profil Hoch, Stufe 4.0 [libx264 @ 0x369c5e0] 264 - Kern 129 r2230 1cffe9f - H.264/MPEG-4 AVC-Codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - Optionen: cabac=1 ref=3 deblock =1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip= 1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Ausgabe #0, mp4, zu 'JSP.mp4': Metadaten: Encoder: Lavf54.63.100 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1600x880 [SAR 1:1 DAR 20:11], q=-1--1, 15360 tbn , 15 zu bestätigen Metadaten: RECORDMYDESKTOP : 0.3.8.1 Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, mono, s16, 128 kb/s Stream-Mapping: Stream #0:1 -> #0:0 (theora -> libx264) Stream #0:2 -> #0:1 (vorbis -> libvo_aacenc) Drücken Sie [q] zum Stoppen, [?] für Hilfe [ogg @ 0x34d4640] Defekte Datei, Nicht-Keyframe nicht korrekt markiert. Letzte Nachricht 2 Mal wiederholt Defekte Datei, Nicht-Keyframe nicht korrekt markiert.=00:00:08.37 Bitrate= 28,7kbit/s dup=66 drop=0 Defekte Datei, Keyframe nicht korrekt markiert.time=00:00:51.01 bitrate= 125.3kbits/s dup=675 drop=0 Defekte Datei, Keyframe nicht korrekt markiert.time=00:00:55.05 bitrate= 140.2kbits/s dup=782 drop=0 Defekte Datei, Keyframe nicht korrekt markiert.time=00:00:59.60 bitrate= 140.5kbits/s dup=836 drop=0 [ogg @ 0x34d4640] Defekte Datei, Keyframe nicht korrekt markiert. Defekte Datei, Keyframe nicht korrekt markiert.time=00:01:08.00 bitrate= 143.0kbits/s dup=900 drop=0 Defekte Datei, Keyframe nicht korrekt markiert.time=00:01:11.86 bitrate= 141.6kbits/s dup=910 drop=0
... viele Male wiederholt ...
Defekte Datei, Keyframe nicht korrekt markiert.time=00:12:47.62 bitrate= 153.0kbits/s dup=9087 drop=0 frame=11521 fps= 87 q=-1.0 Lsize= 14849kB time=00:12:49.48 bitrate= 158.1kbits/s dup=9087 drop=0 Video: 2401 KB Audio: 12024 KB Untertitel: 0 Globale Header: 0 KB Muxing-Overhead 2,938094 % [libx264 @ 0x369c5e0] Frame I:49 Durchschnitt QP:16.05 Größe: 29658 [libx264 @ 0x369c5e0] Frame P: 2912 Durchschnitt QP: 9,88 Größe: 114 [libx264 @ 0x369c5e0] Frame B: 8560 Durchschnitt QP: 12,76 Größe: 78 [libx264 @ 0x369c5e0] aufeinanderfolgende B-Frames: 0,9 % 0,1 % 0,2 % 98,9 % [libx264 @ 0x369c5e0] mb I I16..4: 90,8 % 0,4 % 8,8 % [libx264 @ 0x369c5e0] mb P I16..4: 0,0 % 0,0 % 0,0 % P16..4: 0,0 % 0,0 % 0,0 % 0,0 % 0,0 % überspringen: 99,9 % [libx264 @ 0x369c5e0] mb B I16..4: 0,0 % 0,0 % 0,0 % B16..8: 0,3 % 0,0 % 0,0 % direkt: 0,0 % überspringen: 99,7 % L0: 65,3 % L1: 34,6 % BI: 0,1 % [libx264 @ 0x369c5e0] 8x8-Transformation intra: 0,5 % inter: 15,8 % [libx264 @ 0x369c5e0] codiert y,uvDC,uvAC intra: 6,4 % 0,1 % 0,1 % inter: 0,0 % 0,0 % 0,0 % [libx264 @ 0x369c5e0] i16 v, h, dc, p: 94 % 4 % 2 % 0 % [libx264 @ 0x369c5e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19 % 22 % 44 % 1 % 2 % 2 % 3 % 1 % 6 % [libx264 @ 0x369c5e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35 % 17 % 19 % 4 % 5 % 5 % 5 % 5 % 5 % [libx264 @ 0x369c5e0] i8c dc,h,v,p: 100 % 0 % 0 % 0 % [libx264 @ 0x369c5e0] Gewichtete P-Frames: Y: 0,0 % UV: 0,0 % [libx264 @ 0x369c5e0] ref P L0: 82,5 % 1,4 % 11,9 % 4,3 % [libx264 @ 0x369c5e0] Referenz B L0: 47,2 % 52,4 % 0,4 % [libx264 @ 0x369c5e0] Referenz B L1: 99,2 % 0,8 % [libx264 @ 0x369c5e0] kb/s:25,60
Das Video rückt immer noch früh vor, aber zu unterschiedlichen Zeiten. Es hört sich so an, als würde gtk-recordmydesktop eine "kaputte Datei" erzeugen. Was ärgerlich ist, ist, dass das OGV funktioniert, also scheint es, als sollte ich in der Lage sein, dies mit einigen Optionen zum Laufen zu bringen.
Ich habe festgestellt, dass ich das Video in kdenlive rendern kann und es scheint dort zu funktionieren. Ich würde trotzdem gerne wissen, was los ist. kdenlive macht einen viel besseren Job, aber es kommt manchmal immer noch früh voran.
Warum in OGV konvertieren, wenn Ihr endgültiger Upload auf YouTube erfolgen soll? Ich kann mich irren, aber Sie können den x264-Videocodec mit AAC-Audio sogar unter Linux konvertieren und auf YouTube hochladen, wenn man bedenkt, dass dies sowieso der bevorzugte Upload ist. Haben Sie versucht, ein h264 zu erstellen und es auf YouTube hochzuladen, anstatt die OGV-Datei, und zu sehen, ob das das Problem war. Denn ich würde wetten, dass Sie, wenn das Problem dadurch gelöst wird, wissen, dass es ein Problem mit dem Hochladen des OGV auf YouTube war, und wenn es nicht gelöst wird, könnte es sich um ein Bildratenproblem mit der Interpretation von YouTube oder etwas Ähnliches handeln.
In der Vergangenheit gab es viele Probleme mit OGV-Dateien, die auf YouTube hochgeladen wurden. Ich kann mir nicht vorstellen, dass es auch jetzt zu 100% behoben ist.
http://support.google.com/youtube/bin/answer.py?hl=de&answer=1722171
BEARBEITEN: Ich habe auch gerade bemerkt, dass Ihr Originalmaterial 15 fps hat ... dies könnte sehr wohl die Ursache des Problems sein
BEARBEITEN 2: Ich schien die Frage ein wenig falsch verstanden zu haben ... da Sie mit einer Videodatei beginnen, die OGV ist, und ich gesehen habe, dass Sie zu MP4 wechseln ... das ändert die Dinge ein wenig ... .aber ich vermute, dass es etwas mit den 15 fps und 22050 Hz Audio zu tun hat ... Ich weiß, dass die Abtastrate nichts mit der Synchronisierung des Audios zu tun hat, aber aus Erfahrung bei der Verwendung von nicht standardmäßigen Bildraten und Audio-Sampleraten, Ich habe tendenziell ein Abdriften gesehen ... es kann ziemlich schwierig sein, diese zu synchronisieren, wenn man sie nach der ersten Aufnahme nicht mit einem billigen Video-Editor bearbeiten kann ...
Obwohl die Software beim Abdriften von Audio besser geworden ist, ist es immer noch ein häufiges Problem, wenn ungewöhnliche Frameraten und Sampleraten verwendet werden, da die Keyframe-Synchronisierungspunkte nicht standardmäßig sind und Keyframes runden usw.
Sie sehen, wo es heißt: "Beschädigte Datei, Keyframe nicht korrekt markiert." darauf bezieht es sich...
Mein Rat für Sie wäre, es so nah wie möglich zu bringen, es in einen Videoeditor zu nehmen und das Audio zu verschieben und zu schneiden, damit es Ihren Wünschen entspricht. Leider wird das manchmal so gelöst...
Softwarebasierte Transcoder funktionieren nicht immer so, wie sie sollten ... daher würde ein Protools-Setup und / oder ein Avid-Setup mit Hardware geliefert, um die Synchronisierungsfähigkeiten und konstante Bildraten usw. weiter sicherzustellen ...
Eine andere Sache, die Sie versuchen könnten, ist, das Filmmaterial in eine Standard-Framerate zu konvertieren und zu versuchen, das Audio neu zu marieren ... da ich mir ziemlich sicher bin, dass es das Video ist, das driftet ... wahrscheinlich ganz leicht langsamer und dann in Richtung beschleunigt Ende oder umgekehrt.
BEARBEITEN: Ich konnte das Video mit diesem ffmpeg-Befehl mit dem Original synchronisieren. Möglicherweise ist die Ratenklausel erforderlich, was ich vermutet habe
ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4
-r 15
ist dasselbe wie das Weglassen, da ffmpeg standardmäßig die Eingabebildrate erbt und die resultierenden Ausgabedateien mit oder ohne -r 15
genau die gleichen sind wie ffmpeg von git head (Version N-50285-gad89952). Wenn es bei Ihnen mit einer älteren ffmpeg-Version funktioniert, könnte dies eine Regression sein und sollte dem FFmpeg-Bug-Tracker gemeldet werden .Ich hatte mit einem ähnlichen Problem unter Ubuntu 12.04.3 LTS zu kämpfen. Ich habe das Problem mit dem statischen ffmpeg-Build behoben, der unter http://johnvansickle.com/ffmpeg/ verfügbar ist.
Es scheint, dass dieser Fehler immer noch in recordmydesktop
ist, oder zumindest habe ich genau die gleichen Symptome hier mit der Version von Debian testing ( 0.3.8.1+svn602-1.1
).
Ich habe es gerade geschafft, dieses Video auf folgende Weise fast korrekt zu transcodieren:
Das Ergebnis hat immer noch die korrekte Synchronisation (yay!), aber es leidet immer noch unter einem Problem: Das resultierende Video kündigt sich als länger als 4 Stunden an, während mein Video nur 25 Minuten dauert. Peertube listet es daher als 4-Stunden-Video auf, obwohl beim Start der Wiedergabe die korrekte 25-Minuten-Dauer angezeigt wird, sodass das Problem nicht zu schwerwiegend ist.
Punkt 3 ist wichtig, aber auch Punkt 2: Vielleicht funktionieren auch andere Profile, aber zumindest das H264-Profil lieferte mir ein unbrauchbares Video (entweder mit schlechtem Sync wie ffmpeg
oder schlechter).
Versuchen Sie, den Container einfach in avi zu ändern, anstatt ihn zu transcodieren, was für YouTube besser zu funktionieren scheint:
ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi
Logan
Amir T
Logan
ffmpeg
Binärdatei ausführen.Logan
Amir T
böse Suppe
Amir T
Logan
sync_test1.ogv
, und versuchen Sie, das Problem nach Möglichkeit nur mit nativen Encodern (keinelib*
wielibx264
) anzuzeigen.Amir T