Cuando ejecuto mis archivos Quicktime mov de 24 fps a través de una transcodificación FFmpeg, aparecen con una escala de tiempo de encabezado de película de 1000, cuando el archivo fuente tiene una escala de tiempo de 24000. Este valor de escala de tiempo bajo está causando problemas en algunas herramientas de software profesionales al buscar el archivo. .
En mi caso, el archivo fuente es un Quicktime con 1 pista de vídeo (DNx115) y 1 pista de datos (código de tiempo). Lo estoy transcodificando a DNx36.
Puedo forzar la escala de tiempo del video a 24000 agregando "-video_track_timescale 24000", pero esto no afecta nada más que la pista del video.
El comando es el siguiente:
ffmpeg -i input.mov -c:v dnxhd -b:v 36M -pix_fmt yuv422p -video_track_timescale 24000 output.mov
Salida de consola sin cortes:
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
Revisé el valor de la escala de tiempo en Atom Inspector y puedo ver claramente que mvhd (encabezado de película) se cambió a 1000 en output.mov cuando input.mov se configuró en 24000.
1000 no es claramente divisible por 24, por lo que la búsqueda resulta inexacta.
Al usar Atom Inspector para cambiar manualmente esta escala de tiempo del encabezado a 24000 y modificar los campos de duración a lo que deberían basarse en esta escala de tiempo, el archivo funciona como se esperaba.
¿Existe alguna forma de establecer el valor de escala de tiempo del encabezado de la película como una opción en FFmpeg?
Respuesta1
De acuerdo con el valor MOV_TIMESCALE en libavformat/movenc.h, esto está establecido en 1000. No estoy seguro de por qué se eligió este valor, ya que realmente no es un valor bueno/útil.
Envié un parche para cambiar esto a 600.