Quicktime .mov - Especifique uma escala de tempo do cabeçalho do filme de 24.000

Quicktime .mov - Especifique uma escala de tempo do cabeçalho do filme de 24.000

Quando executo meus arquivos mov Quicktime de 24 fps por meio de uma transcodificação FFmpeg, eles saem com uma escala de tempo de cabeçalho de filme de 1000, quando o arquivo de origem tem uma escala de tempo de 24.000. Esse valor baixo de escala de tempo está causando problemas em algumas ferramentas de software profissionais ao buscar o arquivo .

No meu caso, o arquivo de origem é um Quicktime com 1 trilha de vídeo (DNx115) e 1 trilha de dados (Timecode). Estou transcodificando para DNx36.

Posso forçar a escala de tempo do vídeo para 24.000 adicionando "-video_track_timescale 24.000", mas isso não afeta nada além da trilha de vídeo.

O comando é o seguinte:

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

Saída do console sem 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

Eu verifiquei o valor da escala de tempo no Atom Inspector e posso ver claramente que o mvhd (Movie Header) foi alterado para 1000 no output.mov quando o input.mov foi definido como 24000.

1000 não é divisível por 24, portanto resulta em uma busca imprecisa.

Usando o Atom Inspector para alterar manualmente a escala de tempo do cabeçalho para 24.000 e alterar os campos de duração para o que deveriam ser com base nessa escala de tempo, o arquivo funciona conforme o esperado.

Existe alguma maneira de definir o valor da escala de tempo do Movie Header como uma opção no FFmpeg?

Responder1

De acordo com o valor MOV_TIMESCALE em libavformat/movenc.h, é difícil definir como 1000. Não sei por que isso foi escolhido, pois não é realmente um valor bom/útil.

Enviei um patch para alterar isso para 600.

informação relacionada