Quicktime .mov - Geben Sie eine Movie Header-Zeitskala von 24000 an

1

Wenn ich meine 24-fps-Quicktime-Mov-Dateien über einen FFmpeg-Transcode starte, werden sie mit einer Movie Header-Zeitskala von 1000 ausgegeben, wenn die Quelldatei eine Zeitskala von 24000 hat. Dieser niedrige Zeitskalenwert führt bei einigen professionellen Softwaretools zu Problemen beim Suchen der Datei .

In meinem Fall ist die Quelldatei eine QuickTime-Datei mit 1 x Videospur (DNx115) und 1 x Datenspur (Timecode). Ich wandle es in DNx36 um.

Ich kann die Video-Zeitskala auf 24000 erzwingen, indem ich "-video_track_timescale 24000" hinzufüge, aber dies betrifft nichts anderes als die Videospur.

Der Befehl lautet wie folgt:

ffmpeg -i input.mov -c:v dnxhd -b:v 36M -pix_fmt yuv422p -video_track_timescale 24000 output.mov

Unbeschnittene Konsolenausgabe:

    ffmpeg version N-90214-gdd3f1e3a11-tessus Copyright (c) 2000-2018 the FFmpeg developers
      built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
      configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
      libavutil      56.  8.100 / 56.  8.100
      libavcodec     58. 13.102 / 58. 13.102
      libavformat    58. 10.100 / 58. 10.100
      libavdevice    58.  2.100 / 58.  2.100
      libavfilter     7. 12.100 /  7. 12.100
      libswscale      5.  0.102 /  5.  0.102
      libswresample   3.  0.101 /  3.  0.101
      libpostproc    55.  0.100 / 55.  0.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mov':
      Metadata:
        major_brand     : qt  
        minor_version   : 537199360
        compatible_brands: qt  
        creation_time   : 2018-03-06T10:45:16.000000Z
        timecode        : 01:14:25:22
      Duration: 00:00:30.00, start: 0.000000, bitrate: 116392 kb/s
        Stream #0:0(eng): Video: dnxhd (DNXHD) (AVdn / 0x6E645641), yuv422p(tv, bt709), 1920x1080, 116391 kb/s, SAR 1:1 DAR 16:9, 24 fps, 24 tbr, 24k tbn, 24k tbc (default)
        Metadata:
          creation_time   : 2018-03-06T10:45:16.000000Z
          handler_name    : Apple Alias Data Handler
          encoder         : Avid DNxHD Codec
        Stream #0:1(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
        Metadata:
          creation_time   : 2018-03-06T10:45:20.000000Z
          handler_name    : Apple Alias Data Handler
          timecode        : 01:14:25:22
    Stream mapping:
      Stream #0:0 -> #0:0 (dnxhd (native) -> dnxhd (native))
    Press [q] to stop, [?] for help
    Output #0, mov, to 'output.mov':
      Metadata:
        major_brand     : qt  
        minor_version   : 537199360
        compatible_brands: qt  
        timecode        : 01:14:25:22
        encoder         : Lavf58.10.100
        Stream #0:0(eng): Video: dnxhd (DNXHD) (AVdn / 0x6E645641), yuv422p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-1024, 36000 kb/s, 0.04 fps, 24k tbn, 24 tbc (default)
        Metadata:
          creation_time   : 2018-03-06T10:45:16.000000Z
          handler_name    : Apple Alias Data Handler
          encoder         : Lavc58.13.102 dnxhd
    frame=  720 fps=151 q=4.0 Lsize=  132482kB time=00:00:29.95 bitrate=36226.7kbits/s speed=6.28x

Ich habe den Zeitskalenwert im Atom Inspector überprüft und sehe deutlich, dass in der Datei output.mov der Wert für mvhd (Movie Header) auf 1000 geändert wurde, als input.mov auf 24000 gesetzt wurde.

1000 ist nicht sauber durch 24 teilbar, was zu ungenauer Suche führt.

Wenn Sie diese Header-Zeitskala mithilfe von Atom Inspector manuell auf 24000 ändern und die Dauerfelder so ändern, dass sie auf dieser Zeitskala basieren, funktioniert die Datei wie erwartet.

Gibt es eine Möglichkeit, den Zeitskalenwert für Movie Header in FFmpeg als Option festzulegen?

mwjb
quelle
Ich habe ffmpeg aus dem neuesten Git erstellt und MOV_TIMESCALE in 600 geändert (was eigentlich die Standardspezifikation für Quicktime ist) und meinen Workflow erneut getestet. Dies hat das Problem behoben, so dass es den Anschein hat, dass der 1000-Wert, auf den das ffmpeg-Projekt festgelegt ist, das Problem ist.
Mwjb
Es lohnt sich, das als Antwort zu posten, und Sie können auch erwähnen, dass ein Patch eingereicht wurde!
Bertieb
Es ist das erste Mal, dass ich einen FFmpeg-Patch eingereicht habe und es ist sehr wahrscheinlich, dass meine neue Einreichung zurückgeworfen wird, weil sie nicht auf die richtige Art und Weise präsentiert wurde, wie die erste, wenn sie erfolgreich ist, werde ich sie hier mit Sicherheit aktualisieren.
Mwjb

Antworten:

0

Laut dem MOV_TIMESCALE-Wert in libavformat / movenc.h ist dieser Wert fest auf 1000 gesetzt. Ich bin nicht sicher, warum dies als kein guter / nützlicher Wert ausgewählt wurde.

Ich habe einen Patch eingereicht, damit dieser auf 600 geändert wird.

mwjb
quelle