Das OGV-Format wird auf meinem Computer ordnungsgemäß wiedergegeben, beim Transcodieren werden jedoch (doppelte?) Frames gelöscht

11

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) ansehe, sieht sie gut aus - Audio und Video sind synchron. Wenn es transkodiert wird (von mir oder YouTube), sind Audio und Video nicht synchron. Es sieht so aus, als würde ich beim Erzählen ein oder zwei Folien überspringen.

Aktualisieren

Ich vermute, dass das Problem besser dadurch gekennzeichnet ist, dass doppelte Frames während der Transcodierung gelöscht werden. Das Konvertieren von Videos, bei denen sich die Maus bewegt, scheint normalerweise einwandfrei 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 (ich versuche von ogv zu gehen -> irgendetwas) /superuser/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

AVI-Dateien scheinen korrekt zu übersetzen! Ich gehe davon aus, dass dies ein großer Hinweis für jemanden sein wird. Ich möchte immer noch das zugrunde liegende Problem aufspüren. Ich teste die Konvertierung meiner vorherigen Videos in AVI, aber dies dauert eine Weile, da ich jeden Übergang überprüfen muss.

Beispiele

Dies ist die ursprüngliche 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 Dias 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 an):

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4

  • Dieser zeigt die erste Folie im ersten Frame, geht aber schnell daran vorbei
  • Dies geschah mit dem Stock ffmpeg

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4

  • Dieser ist ziemlich nah dran - aus irgendeinem Grund entscheidet er sich mit 13 Jahren, weiterzukommen
  • Dies wurde mit dem statischen Build von ffmpeg von vor einigen Tagen durchgeführt

Hier ist es auf Youtube - Sie können sehen, dass es gegen 13 Uhr früh voranschreitet (von Folie 1 -> Folie 2):

Hier ist der Beweis, dass die OGV-Datei korrekt funktioniert:

ffmpeg Übersetzung

Mit ffmpeg oder avconv erhalte ich anscheinend ähnliche Ergebnisse wie mit youtube (Ü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 die Ausgabe:

$ ~ / ffmpeg / ffmpeg -i JSP.ogv JSP.mp4
ffmpeg Version N-50025-gb8bb661 Copyright (c) 2000-2013 die FFmpeg-Entwickler
  gebaut am 17. Februar 2013 um 05:23:03 Uhr 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-grey --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, bedeutet dies, dass Ihre Datei über eine Funktion verfügt, die nicht implementiert wurde.
[ogg @ 0x34d4640] Die Header-Analyse für Stream 0 ist fehlgeschlagen
[ogg @ 0x34d4640] Defekte Datei, Keyframe nicht korrekt markiert.
Geben Sie # 0, ogg, von 'JSP.ogv' ein:
  Dauer: 00: 12: 49,67, Start: 0,000000, Bitrate: 224 kb / s
    Stream # 0: 0: Daten: keine
    Stream # 0: 1: Video: theora, yuv420p, 1600 x 880 [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-Funktionen: 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 gemischt_ref = 1 me_range = 16 chroma_me = 1 spalier = 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 beschränkter_intra = 0 bframes = 3 b_pyramid = 2 b_adapt = 1 b_bias = 0 direct = 1 weightb = 0 open_g weightp = 2 keyint = 250 keyint_min = 15 szenecut = 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, an '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 tbc
    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], um zu stoppen, [?] Um Hilfe zu erhalten
[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.3kbit / s dup = 675 drop = 0    
Defekte Datei, Keyframe nicht korrekt markiert. Time = 00: 00: 55.05 Bitrate = 140.2kbit / s dup = 782 drop = 0    
Defekte Datei, Keyframe nicht korrekt markiert. Time = 00: 00: 59.60 Bitrate = 140.5kbit / 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.6kbit / 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    
Rahmen = 11521 fps = 87 q = -1,0 Lsize = 14849 kB Zeit = 00: 12: 49,48 Bitrate = 158,1 kbit / 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 Durchschn. QP: 16.05 Größe: 29658
[libx264 @ 0x369c5e0] Frame P: 2912 Durchschnittlicher QP: 9,88 Größe: 114
[libx264 @ 0x369c5e0] Frame B: 8560 Durchschnittlicher 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% 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] Ref. B L0: 47,2% 52,4% 0,4%
[libx264 @ 0x369c5e0] Ref. B L1: 99,2% 0,8%
[libx264 @ 0x369c5e0] kb / s: 25,60

Das Video schreitet immer noch früh voran, aber zu unterschiedlichen Zeiten. Es hört sich so an, als würde gtk-recordmydesktop eine "kaputte Datei" generieren. Was ärgerlich ist, ist, dass das OGV funktioniert, so dass es so aussieht, als ob ich in der Lage sein sollte, 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 immer noch gerne wissen, was los ist. kdenlive macht einen viel besseren Job, aber manchmal kommt es immer noch früh voran.

Amir T.
quelle
2
Bitte zeigen Sie Ihren Befehl ffmpeg und die daraus resultierende vollständige Konsolenausgabe.
Llogan
Gute Idee @LordNeckbeard Ich habe den Befehl und die Ausgabe hinzugefügt. Ich bemerke einen Fehler / eine Warnung: max_analyze_duration erreicht.
Amir T
Tritt das Problem weiterhin auf, wenn Sie einen aktuellen statischen Build von ffmpeg verwenden ? Dies schließt mögliche Fehler aus, auf die Sie möglicherweise stoßen und die bereits mit einer neueren Version von ffmpeg behoben wurden. Keine Notwendigkeit zu installieren oder irgendetwas. Laden Sie einfach das Archiv herunter, extrahieren Sie es und führen Sie die enthaltene ffmpegBinärdatei aus.
Llogan
Können Sie eine Beispiel-Eingabedatei bereitstellen, mit der das Problem reproduziert werden kann?
Llogan
Gute Idee, ich werde eine kleine zaubern und sie später heute Abend veröffentlichen.
Amir T

Antworten:

4

Warum in OGV konvertieren, wenn Ihr endgültiger Upload auf YouTube erfolgen soll? Ich kann mich irren, aber Sie können mit AAC Audio auch unter Linux in einen x264-Videocodec konvertieren und diesen auf YouTube hochladen, da dies ohnehin lieber hochgeladen wird. Haben Sie versucht, ein h264 zu erstellen und anstelle der OGV-Datei auf YouTube hochzuladen und zu prüfen, ob dies das Problem war? Weil ich wetten würde, dass wenn dies das Problem löst, Sie wissen, dass es ein Problem mit dem Hochladen des OGV auf YouTube war, und wenn es es nicht löst, könnte es ein Problem mit der Bildrate bei der Interpretation von YouTube oder ähnlichem sein.

In der Vergangenheit gab es viele Probleme mit OGV-Dateien, die auf YouTube hochgeladen wurden. Ich kann mir nicht vorstellen, dass es auch zu diesem Zeitpunkt 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

EDIT 2: Ich schien die Frage ein wenig falsch verstanden zu haben ... da Sie mit einer Videodatei beginnen, die OGV ist, und ich sah, dass Sie zu MP4 gehen ... dies ändert die Dinge ein wenig. Aber ich gehe davon aus, dass es etwas mit dem 15fps- und 22050-Hz-Audio zu tun hat ... Ich weiß, dass die Samplerate nichts mit der Synchronisierung des Audios zu tun hat, sondern aus Erfahrung mit nicht standardmäßigen Frameraten und Audio-Sampleraten. Ich habe tendenziell Driften gesehen ... es kann ziemlich schwierig sein, diese zu synchronisieren, obwohl ich sie nach der ersten Aufnahme mit einem billigen Video-Editor nicht bearbeiten kann ...

Obwohl die Software das Driften von Audio verbessert hat, ist es immer noch ein häufiges Problem bei der Verwendung ungewöhnlicher Frameraten und Sampleraten, da die Synchronisierungspunkte mit Keyframes nicht Standard sind und Keyframes usw. runden können.

Sie sehen, wo "Defekte Datei, Keyframe nicht richtig markiert" steht. das ist es, worauf es sich bezieht ...

Mein Rat für Sie wäre, es so nah wie möglich zu bringen, es in einen Video-Editor zu bringen und das Audio zu verschieben und zu schneiden, damit es so passt, wie Sie es möchten. Leider ist das manchmal so behoben ...

Softwarebasierte Transcoder funktionieren nicht immer so, wie sie sollten.

Eine andere Sache, die Sie versuchen könnten, ist, das Filmmaterial in eine Standard-Framerate zu konvertieren und zu versuchen, das Audio wieder herzustellen ... da ich mir ziemlich sicher bin, dass das Video driftet ... wahrscheinlich etwas langsamer und dann schneller das Ende oder umgekehrt.

BEARBEITEN: Mit diesem Befehl ffmpeg konnte ich das Video mit dem Original synchronisieren. Möglicherweise wurde die Rate-Klausel benötigt, die ich vermutet habe

ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4

Chris James Champeau
quelle
Die Originaldatei ist Theora Video und Vorbis Audio im ogv Container. Amir T codiert meines Wissens nicht in dieses Format neu, aber wenn er versucht, das Original entweder mit ffmpeg oder YouTube neu zu codieren, tritt das Synchronisierungsproblem auf.
llogan
Das Eingabeformat ist ogv, was gtk-recordmydesktop ausgibt. Ich versuche, zu etwas anderem als ogv (flv usw.) zu gelangen.
Amir T
Lesen Sie meine aktualisierte Antwort ... Ich denke, es ist eine Ausgabe von FPS
Chris James Champeau
1
Das Hinzufügen -r 15ist dasselbe wie das Weglassen, da ffmpeg standardmäßig die Eingabe -r 15-Framerate erbt und die resultierenden Ausgabedateien mit oder ohne mit ffmpeg von git head (Version N-50285-gad89952) genau identisch sind. Wenn es für Sie mit einer älteren ffmpeg-Version funktioniert, kann dies eine Regression sein und sollte dem FFmpeg-Bug-Tracker gemeldet werden .
Llogan
1
Ich bin mit @LordNeckbeard Sie sollten dies als Fehler an FFMPEG melden
Chris James Champeau
3

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.

user2768
quelle
1
Ich habe auch einen statischen Build ausprobiert und es hat etwas besser funktioniert. Möglicherweise wurde der Fehler behoben. In diesem Fall kann es hilfreich sein, die Versionsnummer aus dem statischen Build zu Ihrer Antwort hinzuzufügen.
Amir T
0

Versuchen Sie einfach, den Container auf avi zu ändern, anstatt ihn zu transkodieren, was für youtube besser zu funktionieren scheint:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi
CpnCrunch
quelle
Ich habe es versucht und der Upload wird nie beendet, so als würde ich OGV hochladen. Da diese Antwort älter ist als die Annahme von OGV durch YouTube, muss es diese Änderung sein. Ärgerlich, dass ffmpeg auch vier Jahre später noch dieses Konvertierungsproblem hat.
mcr
Mein ffpmeg ist: 3.2.14-1 ~ deb9u1 (apt-get installiert)
mcr
Ich habe alle oben genannten Variationen mit statischen Builds (git-20191029) ausprobiert, und obwohl es ein bisschen besser wird, sind Audio und Video nicht synchron. Wenn Sie es versuchen, benötigen Sie einen großen Wert --max_muxing_queue_size. Ich habe 40960 verwendet.
mcr