Problem beim Festlegen des Zeitcodes für den ersten Frame mit ffmpeg - Zeitcode weicht immer von dem für 59,94-fps-Video angeforderten ab

Bearbeiten: Gefunden, um ein kleiner Fehler in FFmpeg zu sein. Es sollte hoffentlich bald gepatcht werden.

Ich habe Probleme beim Einstellen des Timecodes für einige .MXF-Dateien, die ich habe. Wenn ich den Befehl ausführe:

ffmpeg -i test.MXF -vcodec copy -acodec copy -timecode "00:05:00;10" tmp.MXF

und dann mit ffprobe prüfen:

ffprobe tmp.MXF
dpc3:tmp me475$ ffprobe tmp.MXF
ffprobe version 3.4 Copyright (c) 2007-2017 the FFmpeg developers
  built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
[h264 @ 0x7fb652816600] Truncating likely oversized PPS (9469 > 4096)
    Last message repeated 4 times
[mxf @ 0x7fb652815200] decoding for stream 0 failed
Input #0, mxf, from 'tmp.MXF':
  Metadata:
    uid             : adab4424-2f25-4dc7-92ff-29bd000c0000
    generation_uid  : adab4424-2f25-4dc7-92ff-29bd000c0001
    company_name    : FFmpeg
    product_name    : OP1a Muxer
    product_version : 57.83.100
    product_uid     : adab4424-2f25-4dc7-92ff-29bd000c0002
    modification_date: 0000-01-02T00:00:00.000000Z
    material_package_umid: 0x060A2B340101010501010D0013E30DF252947134C9E30DF20052947134C9E300
    timecode        : 00:05:00;30
  Duration: 00:00:08.01, start: 0.000000, bitrate: 577647 kb/s
    Stream #0:0: Video: h264 (High 4:2:2 Intra), yuv422p10le(progressive), 3840x2160 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013E30DF252947134C9E30DF20052947134C9E301
    Stream #0:1: Audio: pcm_s24le, 48000 Hz, 1 channels, s32 (24 bit), 1152 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013E30DF252947134C9E30DF20052947134C9E301

Dann liegt der Timecode deutlich später als der angeforderte Timecode (00:05:00;20 -> 00:05:00;30)

Ich habe mit verschiedenen gültigen Eingabe-Timecodes getestet, und der Ausgabe-Timecode unterscheidet sich immer von dem, was ich anfordere.

z.B

00:10:00;00 -> 00:10:00;18
09:58:34;00 -> 09:58:51;58

Irgendwelche Vorschläge?

Es ist ein Fehler im Code. Es wird davon ausgegangen, dass alle Streams 30 fps haben.
Danke, habe den Fehler gerade auch selbst gefunden, sollte sich jetzt kompensieren lassen
Jetzt in ffmpeg git master behoben.

Antworten (1)

Der vom Benutzer bereitgestellte Timecode-Wert wird in einen ganzzahligen Wert konvertiert, der die Bildnummer darstellt, die diesem Timecode zugeordnet ist. Diese ganze Zahl wird in der Datei gespeichert.

Da beim Drop-Frame-Timecode einige Timecode-Labels regelmäßig übersprungen werden, stimmen Timecode und (Frame-Anzahl/fps) nicht mehr überein, dh timecode * fps != frame count. Dies erfordert eine Anpassung, um die entsprechende Rahmennummer abzuleiten. Der Code ging von festen 30 fps aus, wurde aber jetzt behoben.