У меня есть видео в формате mp4 с частотой кадров .33
(1 кадр за 3 секунды). Я хочу увеличить частоту кадров до 5 кадров / сек. Я попробовал приведенную ниже команду, но она ничего не делает:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Любая идея, почему ffmpeg игнорирует -r
параметр?
Ответы:
Я знаю, что это старый вопрос, но ни один из текущих ответов больше не является рекомендуемым способом.
Без потерь (видео) ремиксинг
Как отмечено в комментариях, есть способ сделать это, когда видео не нужно перекодировать. Требуется повторное смешивание файла с другим форматом контейнера MKV, а затем повторное смешивание его обратно в MP4. Вот пример, который изменяет видео до 12 кадров в секунду:
Если видео содержит аудио, вы также можете замедлить его, не изменяя высоту тона, но это не преобразование без потерь. В приведенном ниже примере предполагается, что исходное видео было 24 кадра в секунду, поэтому звук необходимо было замедлить до половины (0,5) скорости с помощью фильтра atempo ffmpeg .
FFMPEG Wiki Руководство
Это руководство из ffmpeg wiki . Обратите внимание, что все эти параметры требуют перекодирования видео.
Ускорение / замедление видео
Вы можете изменить скорость видеопотока, используя фильтр видео setpts. Обратите внимание, что в следующих примерах аудиопоток не изменяется, поэтому в идеале его следует отключить с помощью -an.
Чтобы удвоить скорость видео, вы можете использовать:
Фильтр работает путем изменения метки времени представления (PTS) каждого видеокадра. Например, если на временных метках 1 и 2 показаны два последовательных кадра и вы хотите ускорить видео, эти временные метки должны равняться 0,5 и 1 соответственно. Таким образом, мы должны умножить их на 0,5.
Обратите внимание, что этот метод пропускает кадры для достижения желаемой скорости. Вы можете избежать пропущенных кадров, указав более высокую частоту кадров на выходе, чем на входе. Например, чтобы перейти от входа 4 FPS к тому, который увеличен до 4x, что (16 FPS):
Чтобы замедлить видео, вы должны использовать множитель больше 1:
Гладкий; плавный
Вы можете сгладить медленное / быстрое видео с помощью видеофильтра minterpolate. Это также известно как «интерполяция движения» или «оптический поток».
Другие варианты включают slowmoVideo и Butterflow. Ускорение / замедление звука
Вы можете ускорить или замедлить звук с помощью аудио фильтра atempo. Чтобы удвоить скорость звука:
Фильтр atempo ограничен использованием значений от 0,5 до 2,0 (поэтому он может замедлять его не менее чем до половины первоначальной скорости и увеличивать скорость до не более чем вдвое). Если вам нужно, вы можете обойти это ограничение, соединив несколько фильтров atempo вместе. Следующее с четырехкратной скоростью звука:
Используя сложный фильтр графа, вы можете ускорить видео и аудио одновременно:
источник
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
изменить частоту кадров на контейнере MKV . Вы можете сделать ремукс в MKV и обратно в MP4, или найти инструмент, который делает это для MP4 напрямую. Кодирование видео очень загружает процессор и требует больших потерь, так что это ужасный вариант.Если у входного файла нет действительной частоты кадров, возможно, вам придется установить ее явно
источник
Я мог только заставить измененную частоту кадров вступить в силу, если входной файл был классифицирован как «сырой» файл:
Без указания
-f h264
этого значения по умолчанию будет 25 кадров в секунду, и его нельзя будет изменить. Очевидно, это произошло потому, что потоку вообще не хватало информации о частоте кадров, и это частота кадров по умолчанию для ffmpeg.Очевидно, когда вы используете
-r
в качестве опции вывода, он дублирует или отбрасывает кадры, поэтому видео воспроизводится с той же скоростью - в данном случае, не то, что вы хотите! Но изменение входной частоты кадров, как указано выше, приведет к ускорению или замедлению видео, без потери или дублирования кадров.источник
Такая особенность - изменение частоты кадров - называется «соответствующей» и часто используется для создания замедленной или ускоренной перемотки вперед, например, показывая рост растения в считанные минуты дней. ffmpeg не позволяет перезаписывать / изменять частоту кадров без перекодирования . Если это так, продолжительность изменится, и звук будет несинхронизирован, если не будет отдельно исправлено. Но я боюсь, что аудио не представляет интереса в вашем случае с частотой кадров .33
Вы хотите соответствия, потому что вы просто хотите изменить частоту кадров, но ffmpeg игнорирует
-r
молчаесли частота кадров указана во входном файле. Поскольку ваш входной файл имеет формат .mp4, его собственная частота кадров имеет приоритеткогда перекодировать не нужно. Для этого вам понадобится другой инструмент: mencoder.-r
Предполагая, что ваш входной файл не содержит звука - вероятно, верно для любого видео с частотой кадров .33 - вам нужно:
Обратите внимание, что по умолчанию mencoder производит вывод в формате AVI.
источник
r
в качестве переключателя вывода указано, ffmpeg будет производить вывод с указанной частотой кадров, независимо от частоты кадров ввода. Еслиr
в качестве переключателя ввода указано, ffmpeg будет дублировать или отбрасывать кадры по мере необходимости для подачи указанного количества кадров в секунду ввода в фильтр / кодировщик.r
переключении ввода, противоречит моему более раннему эксперименту с форматом .mp4, примечанию Малвиноуса (на этой странице) и описанию ошибки 403 trac.ffmpeg.org/ticket/403 ; Ваше описание, когдаr
используется на выходе, происходит при перекодировании, в то время как сценарий OP, кажется, соответствует случаю (исправить частоту кадров без перекодирования) тем фактом, что он имел частоту кадров .33.r
fps.-r
. Такое использование не могло повлиять на мои более ранние эксперименты в ответ на OP, потому что, рассматривая соответствующий случай, я никогда не сбрасывал параметр копирования из ffmpeg и-r
поэтому игнорируется. Я написал запрос на добавлениеСамый быстрый способ - создать BAT-файл в каталоге со следующими строками:
Вам нужно иметь mkvmerge и ffmpeg в одном каталоге. Он автоматически меняет каждый mp4-файл за секунды без потери качества.
источник