Переменная частота кадров (или VFR) — это термин в сжатии видео, обозначающий функцию, поддерживаемую некоторыми форматами контейнеров, которая позволяет активно изменять частоту кадров во время воспроизведения видео или полностью отказаться от идеи частоты кадров и устанавливать индивидуальный тайм-код для каждого кадра.
Итак, я понимаю эту концепцию. Но это поднимает множество вопросов, и большинство информационных панелей — это заглушки:
Все ли десятичные fps vfr; может ли целочисленный fps быть vfr? Или это зависит от того, как было сделано видео, например, когда вы записываете свой экран с помощью OBS и устанавливаете fps на 30, но получаете десятичное значение 29,777? Действительно ли vfr существует только в записанном в реальном времени видео, но 3D/2D анимация не будет иметь vfr? Я не понимаю, какое отношение десятичное значение имеет к определению, любое целочисленное значение также может ему соответствовать. Я знаю, что вы можете использовать -vfrdet в ffmpeg, чтобы определить, является ли что-то vfr... но если все vfr десятичные, то в чем смысл, почему бы просто не проверить fps вместо этого.
Если перекодировать видео VFR с тем же fps, сохранится ли на выходе та же скорость и количество кадров или будет какая-то потеря данных (вне потери качества кодека), которая отличается от постоянной fps? Воспроизведение видео VFR показывает ВСЕ кадры или имеет тенденцию пропускать кадры (предположим, что оборудование работает идеально)?
Почему видеоредакторы не «все» поддерживают нецелые значения fps? Я имею в виду, что все, что я могу выразить как дробь целых чисел, должно быть доступно в качестве входной настройки fps, imo... в противном случае это сводит на нет смысл «редактирования видео». В чем именно заключается обоснование того, что эти якобы полностью загруженные видеоредакторы ограничивают вас только 5 предустановленными fps, т. е. (30/60/24/23,97/25). Я еще больше запутался, потому что некоторые видеоредакторы, хотя и говорят, что поддерживают 60fps, поддерживают только редактирование временной шкалы 60fps... а поддерживаемое выходное значение fps указано (еще до того, как вы экспортируете!) как 59,94, и я вижу ОФИЦИАЛЬНЫЕ обучающие видео, в которых мне и всем остальным говорят, что 59,94 — это то же самое, что и 60. Я не уверен, связано ли это с vfr или с чем-то еще.
Является ли значение fps vfr просто средним fps по всему видео? Или это какие-то более продвинутые средства усреднения/вычисления? Какова вообще роль наличия единственного указанного «среднего» fps в видео vfr? Определение гласит, что видео не зависит ни от одного fps... есть ли какой-то специальный пакет данных, который сообщает видеоплееру, что нужно воспроизводить видео определенным образом, так что некоторые части будут быстрее/медленнее желаемым образом? Разве vfr технически не может означать, что начало видео воспроизводится со скоростью 60 fps, а последние 10 секунд — со скоростью 5 fps? Как видеоплеер узнает, что нужно воспроизводить начало со скоростью 60 fps... а конец — со скоростью 5 fps... если у него есть только одно число, от которого можно отталкиваться.
решение1
Are all decimal fps vfr; can integer fps be vfr?
Нет, дробное число кадров в секунду все равно может быть постоянным. Например, NTSC (стандарт телевидения США) имеет постоянную частоту кадров 29,97 (часто представленную как 30000/1001) кадров в секунду.
Does vfr really only exist on real-life recorded video, but 3d/2d animation wouldn't have vfr?
Содержание не имеет значения. Анимация, как правило, создается с учетом определенной частоты кадров. Но нет никаких причин, по которым это должно быть так.
I don't see what being a decimal has to do with the definition
Ничего.
why not just check the fps instead.
Что такое «проверка fps»? Что это вообще значит (см. пункт 4)
If you re-encode vfr video at the same fps,
Это полностью зависит от того, КАК вы кодируете и как работает инструмент, который вы используете для кодирования. Большинство инструментов пропускают все, что входит в выход, не изменяя частоту кадров (если вы не скажете им об этом)
Does playback of a vfr video show ALL the frames or does it tend to skip frames
Зависит от устройства. Например, если ваш телевизор 60 Гц и вы кодируете 61 кадр в секунду, он НЕ МОЖЕТ отображать каждый кадр, но если контент в среднем 60 кадров в секунду, но он увеличивается до 62, телевизор может равномерно распределить кадры и отобразить их все, или может пропустить два кадра, а затем повторить 2 кадра. Каждый дисплей отличается, и нет правила, что он должен делать.
Why do video editors not 'all' support non-integer fps values?
Вам нужно будет спросить создателя этих инструментов. Нет никаких причин, кроме лени, стоимости или простоты, которые бы помешали такой функции в любом инструменте.
Если говорить более просто, то во многих случаях запрашиваемая пользователем частота кадров просто невозможна. Например, RTMP использует тактовую частоту 1 кГц, что означает, что даже 30 кадров в секунду CFR невозможны (30 не делится нацело на 1000, получается 30 кадров в секунду AFR, при этом две трети кадров имеют длину 33 мс, а одна треть — 34 мс). Если в пользовательском интерфейсе есть соотношение, в котором пользователь может ввести любое значение для частоты кадров, он очень часто будет получать результат, которого не ожидал, из-за ограничений выбранного им формата видео.
telling me and everyone that 59.94 is the same as 60
Это совершенно не одно и то же. В большинстве случаев это не имеет значения, а для интернет-видео это никогда не будет иметь значения, но для некоторых рабочих процессов вещательного телевидения частота кадров часто должна быть точной, чтобы различные части оборудования работали вместе.
Is the fps value of a vfr just the average fps across the entire video?
Нет стандарта, как вычислять среднюю частоту кадров. Программное обеспечение может просто считать значение из заголовка, оно может вычислить среднее значение за первые несколько секунд или может вычислить частоту кадров по всему файлу. Каждый инструмент работает по-разному.
What is even the role of having a singular listed 'average' fps in a vfr video?
попустительство.
is there some kind of special data packet that tells the video player to playback the video in a certain way such that some parts are faster/slower in the desired fashion?
Нет, каждый кадр имеет временную метку, связанную с ним. Плеер просто отображает кадр, пока не наступит время отображать следующий кадр. Он ускоряется и замедляется на каждом отдельном кадре.
Can't vfr technically mean the start of a video plays at 60 fps and the last 10 seconds play at 5 fps?
Да
How would a video player know to play the start at 60 fps...and the end at 5fps...if it only has 1 number to go off of.
У него нет одного числа, от которого можно отталкиваться. У него есть одно число на кадр.