У меня есть видео mkv (h264), которое составляет 23,976 к / с (24000/1001), но я хочу преобразовать его в 25 к / с без перекодирования и потери качества. Я знаю, что mkvmerge может это сделать (с опцией --default-duration '0: 25fps'), но я бы хотел сделать это напрямую из ffmpeg, если это возможно. Согласно документации это должно работать:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
но когда я выполняю его, я получаю только те же кадры видео в секунду. Какой правильный способ сделать это (если существует) в ffmpeg?
-r
несовместим с потоковым копированием, и нет битовых фильтров для изменения частоты кадров.Ответы:
Вот метод, использующий текущие версии FFmpeg. Он опирается на демультиплексор concat, который не пересчитывает PTS входов после первого файла, а просто применяет фиксированное смещение. Допустим, у вас есть поток 30 кадров в секунду с временной шкалой
15360
(типично для вывода FFmpeg). Это означает, что у кадра0
есть PTS,0
а у кадра30
- PTS15360
. Это стало бы потоком в 45 кадров в секунду, если бы мы могли изменить шкалу времени,23040
не влияя на значения PTS.По сути, это то, что делает метод ниже.
1 . Определите исходные свойства.
Вы хотите отметить свойства источника, особенно разрешение и
tbn
.2а . (Необязательно) Измените шкалу времени на более удобную, чтобы упростить вычисления.
Это нас заводит
Если вы выполните этот шаг, новая шкала времени должна быть равна или кратна исходной частоте кадров.
2б . Вычислите необходимую временную шкалу, чтобы для целевой частоты кадров
x
PTS кадра #x
в источнике имел то же значение, что и новыйtbn
. Если вы выполнили шаг 2а, это очень просто, и это просто новая частота кадров. Таким образом, для целевых кадров в секунду45
, новоеtbn
должно быть45
.3 . Генерация фиктивного видео.
Все свойства должны быть такими же, как разрешение, профиль H.264, формат пикселей, количество ссылок ... и т. Д. Для достижения наилучших результатов.
4 Конкат видео.
Сначала создайте текстовый файл
Затем конкат
Выходной файл будет иметь второе видео, воспроизводимое со скоростью 45 кадров в секунду.
5 . Теперь отколоть манекен preroll
и у тебя есть
Я сказал, что это было запутанным!
источник