Как говорили люди в комментариях, правильный способ решить проблему, которую вы на самом деле пытаетесь решить, - это настроить субтитры или сказать своему игроку, что они хотят получить другое скоростное видео. (Например, mpv --sub-fps 25
будет поддерживать переходы для шоу 25fps синхронно с его копией 24/1.001 fps.) (http://mpv.io/)
Но чтобы ответить на актуальный вопрос:
Вам не нужно перекодировать, чтобы изменить fps. К сожалению, ffmpeg не может ремукшироваться с новыми временными метками без перекодирования, но это ограничение дизайна ffmpeg. Кодирование видео происходит с потерями и очень медленно, поэтому не делайте этого.
Попробуйте mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
чтобы изменить FPS видео. Это не повлияет на синхронизацию звука, поэтому вы получите /v десинхронизацию. 0:
выбирает дорожку 0
во входном файле, который, как я думаю, обычно является видео.
Вам нужно будет перекодировать аудио после обработки с помощью ускоряющего фильтра с сохранением высоты тона. Я обычно делаю это только во время воспроизведения с scaletempo
фильтра масштабирования (mpv / mplayer)(mpv вставляет его автоматически). У ffmpeg есть фильтр atempo
который, вероятно, добивается цели .
Так что смешайте замедленное аудио с видео 24/1.001fps, и у вас снова будет рабочий файл.
Я действительно не проверял все это, потому что обычно вам никогда не нужно это делать. Просто скажите своему игроку, для какой скорости подводные лодки. И вы даже можете использовать mpv --speed 25025/24000 -subfps 25 myfile.mkv
для воспроизведения видео «на лету» со скоростью 25fps, если у вас есть копия британского шоу 24/1.001 fps, которая изначально была 25fps, и Вы хотите воспроизвести его на оригинальной скорости с постоянным звуковым ускорением.