LINUX.ORG.RU

ffmpeg смена fps

 


0

1

Привет. Получаю неожиданный эффект при смене fps у ролика. Есть видос, 30.48 fps, делаю ему:

$ ffmpeg -i orig.mp4 orig_frames/%04d.png
$ ls orig_frames | wc
    557
$ ffmpeg -i orig.mp4 -vf fps=fps=20 fps20_frames/%04d.png
$ ls 2 | wc
    370

Дальше простая арифметика: 557/30.48=18.2сек; 370/20=18.5сек.
После смены фпс видос стал жирнее на 0.3 секунды. Почему? Куда вставились дополнительные фреймы и зачем? Если в случае с кодированием выхлопа кодеком ещё можно порассуждать на тему кратности кадров чему-то там важному в контексте этого кодека, то здесь же голые фреймы.

$ ffprobe orig.mp4 2>&1 | grep fps
  Stream #0:0[0x1](eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720, 8936 kb/s, SAR 1:1 DAR 16:9, 30.48 fps, 30 tbr, 90k tbn (default)


Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да, это мобилка. В целом я понял, когда я дампаю фреймы без фпс фильтра (с нативным фпс), то длительность не сохраняется (количество фреймо не соответствует длительности видика). Если же я юзаю fps фильтр даже не изменяя фпс ffmpeg -i orig.mp4 -vf "fps=fps=30.48" 6/%04d.png, то количество фреймов соотвествует ожидаемому.

В общем надо юзать фпс фильтр, логика рабты голового $ ffmpeg -i orig.mp4 orig_frames/%04d.png без всякого преобразования фпс для меня осталась неясной.

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

в общем случае, нужно быть полностью уверенным в себе используя fps, ведь он по своей логике выкидывает и добавляет кадры, он их не генерирует, он очень простой
30.48 fps это скорее всего, то, что записано в sps или в mp4, это больше похоже на variable fps, то есть внутри видео кадры с разной длительностью, а не все кадры с длительностью 1000/30.48 мсек

anonymous
()
Ответ на: комментарий от anonymous

Там честные 30.48 (иногда пишутся видики 30.47). Как-то трахался уже с этим дробным фпс, разделил на фреймы и звуковую дорожку, в голове запомнил, что там 30 фпс должно быть. После некоторых коррекций начал сливать обратно в видик, а у видеокадров со звуком рассинхрон, долго парился, пытался там разобраться в хранении звука, дампать там какие-то метки. В общем где-то на 100500 круге плясок с бубном заметил, что там не ровно 30 ФПС, учел это и всё сошлось.

Ещё интересно то, что когда юзаю фпс фильтр с фпсом равным нативному (30.48), то кадров больше (по сравнению если дампасть первой командой из первого поста), и тут кажется логичным, что там в конце или начале должны быть копии последнего/первого кадра (например для добивки длительности до кратного чему-то там). Но никакие там не копии, картинка движется. У меня совсем нет идей откуда эти доп фреймы берутся и куда вставляются, и почему их нет в первой команде.

kvpfs_2
() автор топика

Смена fps — это одна из самых тяжелых процедур, за неё берут огромные бабки и всё равно почти нерешаемая задача.

Лучше постараться отказаться от неё.

max_lapshin ★★★★★
()