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?
Antworten:
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.
quelle