Я знаю, что это старый вопрос, но ни один из текущих ответов больше не является рекомендуемым способом.
Без потерь (видео) ремиксинг
Как отмечено в комментариях, есть способ сделать это, когда видео не
нужно перекодировать. Требуется повторное смешивание файла с другим форматом контейнера MKV, а затем повторное смешивание его обратно в MP4. Вот пример, который изменяет видео до 12 кадров в секунду:
mkvmerge --default-duration 0:12fps --fix-bitstream-timing-information 0 original-video.mp4 -o temp-video.mkv
ffmpeg -i temp-video.mkv -c:v copy slow-video.mp4
Если видео содержит аудио, вы также можете замедлить его, не изменяя высоту тона, но это не преобразование без потерь. В приведенном ниже примере предполагается, что исходное видео было 24 кадра в секунду, поэтому звук необходимо было замедлить до половины (0,5) скорости с помощью фильтра atempo ffmpeg .
mkvmerge --default-duration 0:12fps --fix-bitstream-timing-information 0 original-video.mp4 -o temp-video.mkv
ffmpeg -i temp-video.mkv -c:v copy -c:a aac -filter:a "atempo=0.5" slow-video-with-audio.mp4
FFMPEG Wiki Руководство
Это руководство из ffmpeg wiki . Обратите внимание, что все эти параметры требуют перекодирования видео.
Ускорение / замедление видео
Вы можете изменить скорость видеопотока, используя фильтр видео setpts. Обратите внимание, что в следующих примерах аудиопоток не изменяется, поэтому в идеале его следует отключить с помощью -an.
Чтобы удвоить скорость видео, вы можете использовать:
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
Фильтр работает путем изменения метки времени представления (PTS) каждого видеокадра. Например, если на временных метках 1 и 2 показаны два последовательных кадра и вы хотите ускорить видео, эти временные метки должны равняться 0,5 и 1 соответственно. Таким образом, мы должны умножить их на 0,5.
Обратите внимание, что этот метод пропускает кадры для достижения желаемой скорости. Вы можете избежать пропущенных кадров, указав более высокую частоту кадров на выходе, чем на входе. Например, чтобы перейти от входа 4 FPS к тому, который увеличен до 4x, что (16 FPS):
ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.25*PTS" output.mkv
Чтобы замедлить видео, вы должны использовать множитель больше 1:
ffmpeg -i input.mkv -filter:v "setpts=2.0*PTS" output.mkv
Гладкий; плавный
Вы можете сгладить медленное / быстрое видео с помощью видеофильтра minterpolate. Это также известно как «интерполяция движения» или «оптический поток».
ffmpeg -i input.mkv -filter "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" output.mkv
Другие варианты включают slowmoVideo и Butterflow. Ускорение / замедление звука
Вы можете ускорить или замедлить звук с помощью аудио фильтра atempo. Чтобы удвоить скорость звука:
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
Фильтр atempo ограничен использованием значений от 0,5 до 2,0 (поэтому он может замедлять его не менее чем до половины первоначальной скорости и увеличивать скорость до не более чем вдвое). Если вам нужно, вы можете обойти это ограничение, соединив несколько фильтров atempo вместе. Следующее с четырехкратной скоростью звука:
ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv
Используя сложный фильтр графа, вы можете ускорить видео и аудио одновременно:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv