Какой самый низкий FPS, при котором человеческий глаз может заметить мерцающее изображение? (тестирование с помощью ffmpeg)

979
USer22999299

Я хотел проверить, какой самый низкий FPS, который человеческий глаз не может заметить как мерцание.

Я создал белый JPG и черный JPG. Я начал с 25 кадров в секунду, что означает, что у меня есть 24 JPG белого и 1 черного.

Чем я воспользовался этой командой:

ffmpeg -r 25 -i %d.jpg -vcodec mpeg4 test.avi 

Фильм длился 3 секунды (у меня было всего 75 jpg). Я легко мог видеть черную картинку.

Затем я перешел на 100 кадров в секунду, и я все еще мог видеть это - но не 3 раза, как раньше (здесь у меня было 300 JPG, 3 из них были черными). Когда я перешел на 200 кадров в секунду, я не смог увидеть черный мерцание JPG (I 600 JPG).

Есть ли нижний предел для FPS, когда люди не могут почувствовать разницу между двумя кадрами?

Кодек, который я использовал наверняка, показал эти изображения ... или есть способ сжатия, где черная рамка не будет показана в фильме? Если да, какой кодек я должен использовать?

1
Примечание для близких избирателей: этот вопрос касается ffmpeg, то есть программного обеспечения. В ответе также говорится, что это технически невозможно, в отношении аппаратного обеспечения. slhck 10 лет назад 0

1 ответ на вопрос

6
slhck

То, что вы хотите, в принципе невозможно с имеющимся у вас оборудованием. Вы можете создать видео с 600 кадрами в секунду без проблем, но ни один потребительский монитор не сможет воспроизвести его. Типичные компьютерные мониторы имеют частоту обновления от 60 до 100 Гц, лучше всего это 3D-мониторы, которые могут отображать до 120 Гц.

Так что получается, что вы видите интерполяцию реального видео, где показаны только некоторые кадры.

Обратите внимание, что люди уже воспринимают отдельные изображения как движение с частотой кадров от 10 до 15 Гц. Это может быть не так заметно с высококонтрастными черно-белыми изображениями, но увеличение частоты до 60 Гц и более не требуется. Как только продолжительность отдельного кадра станет меньше 13 миллисекунд (что примерно равно 60 Гц), он не будет распознаваться как таковой - и это должно ответить на ваш вопрос.

Чтобы быть точным, вы можете не захотеть спрашивать, когда человеческий глаз воспринимает изображение, а зрительную систему человека как сложный аппарат. С таким же успехом глаз мог бы уловить изображение, но мозгу не нужно с ним обращаться, потому что это далеко за порогом того, что полезно для него обрабатывать.

Если вам нужны исследовательские материалы на эту тему, я рекомендую вам прочитать кое-что в следующих статьях:

  • Potter, Mary C., et al. «Обнаружение значения в RSVP при 13 мс на изображение». Внимание, восприятие и психофизика (2013): 1-10.

  • Ватсон, Эндрю Б. «Временная чувствительность». Справочник по восприятию и человеческому поведению 1 (1986): 6-1.

  • Томпсон, Питер и Леланд С. Стоун. «Контраст влияет на мерцание и восприятие скорости по-разному». Исследование зрения 37.10 (1997): 1255-1260.

So basically if i creating a video with 60 hz == 30 fps , the human eye should now recognize it? witch codec i should use for that? USer22999299 10 лет назад 0
60 Гц означает 60 кадров в секунду. Это примерно равняется 16 мсам на кадр, так что теоретически вы должны это видеть. Кодек не имеет большого значения, но если вы хотите быть уверенным, используйте кодек только с I-кадром, такой как MJPEG (`-vcodec mjpeg`). slhck 10 лет назад 0
how can i make sure that this one is progressive and not interlace ? in interlace 2 fields are 1 frame.. USer22999299 10 лет назад 0
Это будет прогрессивно, поскольку у вас нет чересстрочного источника. Вы просто делаете одиночные снимки. slhck 10 лет назад 0
Thanks a lot , you were right , used mjpeg at -r 60, and i could not noticed the injected frame. Is there some how to do post processing to the video to make sure that the specific frame is different? (just to check my self) USer22999299 10 лет назад 0
Любая приличная программа для редактирования видео позволит вам сделать это. Зависит от того, какую операционную систему вы используете, но VirtualDub будет работать на Windows. slhck 10 лет назад 0
при использовании команды ffmpeg -r 60 -i% d.jpg -vcodec mjpeg test.avi возникла проблема с открытием файла в virtualdub. есть какая-нибудь другая программа, поддерживающая этот кодек? что я могу видеть введенный кадр? USer22999299 10 лет назад 0
Каждый приличный видеоплеер должен иметь возможность просматривать это, например, VLC. Или вы можете кодировать без потерь с помощью x264: `ffmpeg… -vcodec libx264 -crf 0 output.avi` slhck 10 лет назад 0
да, я могу просматривать видео с помощью BS Player. Проблема в том, что я хочу убедиться, что этот «введенный» кадр существует в выходном видео. Есть ли программное обеспечение, которое может декодировать или просматривать его кадр за кадром? Кстати, где я могу увидеть, какой кодек я могу использовать, который наверняка сохранит введенный кадр в фильме и не будет сжимать их? USer22999299 10 лет назад 0
`ffplay` может сделать это, или VirtualDub, или MPEG-Streamclip и т. д. И каждый кодек обычно сохраняет каждый кадр как есть, если вы не укажете другую частоту кадров во время преобразования или не перейдете от прогрессивного к чересстрочному кодированию. slhck 10 лет назад 0
Итак, вот проблема, к которой я стремлюсь: выходное видео составляет 60 FPS, когда я открываю его в Virtual dub, я вижу, что каждые 60-ые кадры, которые я получил, отличаются. Я сделал фильм из 120 jpeg, что означает, что мне нужно получить 2 секунды на видео. Это швы, как и его 2-секундное видео, это то, что он показывает на каждом проигрывателе, но когда я играю, он проигрывает его гораздо дольше, чем 2 секунды (скорость ниже, чем 60 кадров в секунду). доза плеер выбрал декодер через расширение файла как avi? как заставить плеер показывать 60 кадров в секунду? USer22999299 10 лет назад 0
Тогда, возможно, ваш плеер не может обрабатывать 60 кадров в секунду, ваше оборудование работает слишком медленно или что-то подобное. Что возвращает меня к первому пункту моего ответа - без специального аппаратного или программного обеспечения было бы невозможно провести тестирование. slhck 10 лет назад 0

Похожие вопросы