Como as pessoas disseram nos comentários, o jeito certo de lidar com o problema que você está tentando resolver é ajustar as legendas, ou dizer ao seu player que elas são para um vídeo de velocidade diferente. (por exemplo, mpv --sub-fps 25
manterá subs para um show de 25fps em sincronia com uma cópia de 24 / 1.001 fps dele.) ( link )
Mas para responder à questão real:
Você não precisa recodificar para alterar o fps. ffmpeg não pode remuxar com novos timestamps sem recodificação, infelizmente, mas essa é uma limitação de design do ffmpeg. A codificação de vídeo é com perdas e muito lenta, por isso não faça isso.
Teste mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
para alterar o vídeo FPS. Isso não afetará o tempo do áudio, então você obterá um / desync. 0:
seleciona a faixa 0
em seu arquivo de entrada, que geralmente é o vídeo.
Você precisará recodificar o áudio após processá-lo com um filtro de aceleração de preservação de inclinação. Eu normalmente só faço isso em tempo de reprodução com scaletempo
filter do mpv / mplay (o mpv o insere automaticamente). O ffmpeg tem um filtro atempo
que provavelmente faz o truque.
Então mux o áudio mais lento com o vídeo de 24 / 1.001fps, e você deve ter um arquivo de trabalho novamente.
Eu realmente não testei tudo isso, porque normalmente você nunca precisa fazer isso. Apenas diga ao seu jogador para que velocidade os submarinos são. E você pode até mesmo usar mpv --speed 25025/24000 -subfps 25 myfile.mkv
para reproduzir seu vídeo a 25fps, se você tiver uma cópia de 24 / 1.001 fps de um programa britânico que tenha sido originalmente de 25 fps, e você quiser reproduzi-lo na velocidade original , com aceleração de áudio de pitch constante.