Wenn ich meine Quicktime-MOV-Dateien mit 24 Bildern pro Sekunde durch eine FFmpeg-Transkodierung laufen lasse, erhalten sie eine Movie-Header-Zeitskala von 1000, während die Quelldatei eine Zeitskala von 24000 hat. Dieser niedrige Zeitskalenwert verursacht bei der Suche nach der Datei in einigen professionellen Softwaretools Probleme.
In meinem Fall ist die Quelldatei eine Quicktime mit 1 x Videospur (DNx115) und 1 x Datenspur (Timecode). Ich transkodiere sie in DNx36.
Ich kann die Videozeitskala auf 24000 erzwingen, indem ich „-video_track_timescale 24000“ hinzufüge, aber dies wirkt sich nur auf die Videospur aus.
Der Befehl lautet wie folgt:
ffmpeg -i input.mov -c:v dnxhd -b:v 36M -pix_fmt yuv422p -video_track_timescale 24000 output.mov
Ungeschnittene 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 geprüft und kann deutlich sehen, dass mvhd (Movie Header) in output.mov auf 1000 geändert wird, während input.mov auf 24000 eingestellt war.
1000 ist nicht sauber durch 24 teilbar, was zu ungenauen Suchvorgängen führt.
Wenn Sie diese Header-Zeitskala mithilfe von Atom Inspector manuell auf 24.000 ändern und die Dauerfelder basierend auf dieser Zeitskala auf die gewünschten Werte ändern, funktioniert die Datei wie erwartet.
Gibt es eine Möglichkeit, den Zeitskalenwert des Filmheaders als Option in FFmpeg festzulegen?
Antwort1
Gemäß dem MOV_TIMESCALE-Wert in libavformat/movenc.h ist dies fest auf 1000 eingestellt. Ich bin nicht sicher, warum dies gewählt wurde, da es wirklich kein guter/nützlicher Wert ist.
Ich habe einen Patch eingereicht, um dies auf 600 zu ändern.