Без завантаження, 100% локально, без облікового запису

Стаття

Витягнення кадрів відео для мініатюр і контактних аркушів

Відео, це послідовність нерухомих зображень. Витягнення одного такого зображення дає мініатюру, обкладинку або контактний аркуш. Результат є чіткішим і більш передбачуваним, коли ви розумієте, як відеокодек зберігає кадри та які моменти варто фіксувати.

Кадри та частота кадрів

Відеофайл є послідовністю нерухомих зображень, що відображаються достатньо швидко для створення ілюзії руху. Кількість зображень, показаних за секунду, є частотою кадрів, вираженою у fps. Поширені значення: 24 fps для кіно, 25 fps для PAL-трансляцій, 30 fps для вебвідео та 60 fps для ігрового відзнятого матеріалу. При 24 fps двогодинний фільм містить близько 172 800 окремих кадрів. Кожен кадр відповідає одному моменту в часі; витягнення одного фіксує цей момент як окреме зображення. Частота кадрів також визначає, скільки кадрів ви отримаєте за секунду відзнятого матеріалу при пакетному витягненні: при 30 fps, витягнення кожного кадру з однієї хвилини відео дає 1800 зображень, що часто є значно більше, ніж потрібно. Витягнення з нижчою частотою кадрів, або кожного N-го кадру в інструментах, що це підтримують, є практичним способом зменшення цього обсягу, все одно охоплюючи повну тривалість.

Смуга часової шкали, що показує 24 окремих кадри за секунду відзнятого матеріалу, з номером кадру та міткою часу, видимими під кожним кадром.

Ключові кадри проти інтерпольованих кадрів

Сучасні відеокодеки не зберігають кожен кадр як повне зображення. Вони використовують три типи кадрів для економії місця. I-frame, також названий ключовим кадром, є повним самодостатнім зображенням. P-frame зберігає лише пікселі, що змінилися з часу останнього I-frame або P-frame. B-frame зберігає зміни відносно як попереднього, так і майбутнього кадру, вимагаючи кадрів з обох сторін для відновлення. Оскільки P-frame або B-frame є неповними самі по собі, декодування одного вимагає навколишніх опорних кадрів. Якщо ці опорні кадри містять розмиття руху або перехід, відновлене зображення успадковує це розмиття. I-frame, навпаки, декодується незалежно. Він завжди чіткий, оскільки нічого не запозичує від сусідів. При витягненні кадру для використання як мініатюри потрапляння на I-frame дає найчистіший можливий результат. Більшість кодеків розміщують I-frame при змінах сцени, які є природно чіткими відправними точками.

Вибір правильного моменту

Навіть добре декодований I-frame може бути поганою мініатюрою, якщо зафіксований момент є невдалим. Кілька факторів знижують якість мініатюри. Розмиття руху виникає, коли камера або суб'єкт швидко рухається під час витримки кадру; результуючий змаз робить кадр розмитим, навіть якщо декодування було чистим. Перехідні кадри, захоплені в середині розчинення або затухання, містять два накладених зображення і рідко підходять як самостійні фотографії. Недоекспоновані або переекспоновані кадри, поширені на початку сцени до того, як автоматична експозиція стабілізується, втрачають деталі в тінях або світлих ділянках. Найкращі кадри для мініатюр приходять з моментів чіткої дії або виразу, доброго освітлення та стабільної камери. Перегляд відео в плеєрі, що показує точні мітки часу, дозволяє ідентифікувати ці моменти перед витягненням. Кадр, що виглядає добре на паузі в плеєрі, зазвичай виглядатиме добре як статичний експорт.

Відеоплеєр, зупинений на добре освітленому, стабільному кадрі суб'єкта в момент дії, з міткою часу, відображеною в кутку.

Експорт: роздільність, формат та кожен N-й кадр

При витягненні кадру експортоване зображення повинно відповідати рідній роздільності відео. Масштабування вгору вводить артефакти інтерполяції; масштабування вниз відкидає пікселі, які можуть знадобитися. Відео 1080p виводить зображення 1920x1080 пікселів, а відео 4K виводить 3840x2160. Для формату PNG зберігає кожен піксель точно і є правильним вибором, коли потрібна максимальна чіткість для редагування або подальшого масштабування. JPEG є меншим і підходить для попереднього перегляду або поширення, але вводить артефакти стиснення навколо чітких країв. Якщо ви будуєте контактний аркуш, сітку невеликих репрезентативних кадрів, що охоплюють повну тривалість, витягнення з фіксованою частотою кадрів замість вибірки кожного кадру є стандартним підходом: запит 1 кадру на секунду з джерела 30 fps дає одне зображення на секунду відзнятого матеріалу, а вища частота, наприклад 5 чи 10 fps, дає щільніший набір для детального огляду. Точна частота залежить від того, скільки деталей вам потрібно відносно кількості зображень, якими ви хочете керувати.

Локальна робота за допомогою video-extract-frames

Інструмент video-extract-frames на Sunasty декодує ваше відео повністю у браузері за допомогою FFmpeg, скомпільованого до WebAssembly. Ви кидаєте файл, вибираєте частоту кадрів від 1 до 30 кадрів на секунду, обираєте PNG або JPEG, і інструмент декодує кадри з цією частотою в пам'яті браузера та пропонує результати як окремі завантаження, з обмеженням у 300 кадрів за один запуск. Ваш відеофайл ніколи не покидає ваш пристрій. Жодні байти не надсилаються на сервер у жодний момент процесу. Це важливо для відзнятого матеріалу з особистим або конфіденційним вмістом: сімейний запис, інтерв'ю або необроблений матеріал перед монтажем. Браузер завантажує відео у віртуальну файлову систему в оперативній пам'яті, запускає декодування FFmpeg та повертає зображення вам. Компроміс полягає в тому, що декодування виконується програмно на процесорі, а не виділеним обладнанням, тому довге відео з високою роздільністю займає більше часу, ніж рідний застосунок. Для витягнення кількох кадрів або побудови контактного аркуша з короткого кліпу швидкість є прийнятною.

Інструменти з цієї статті

Поширені запитання

Чому мій витягнений кадр виглядає розмитим?

Найпоширенішою причиною є потрапляння на P-frame або B-frame в момент руху. Ці кадри зберігають різниці, а не повні зображення, і розмиття руху у вихідному відзнятому матеріалі переноситься у декодування. Спробуйте витягти найближчий I-frame, що відповідає зміні сцени або періодичному ключовому кадру, для чіткішого результату.

Чи варто експортувати кадри у форматі PNG або JPEG?

PNG, якщо ви плануєте редагувати кадр, масштабувати його або використовувати в контексті, де артефакти стиснення будуть помітними. JPEG, якщо вам потрібен менший файл для швидкого поширення або попереднього перегляду і незначне зниження якості є прийнятним. Для мініатюр, що відображаються у фіксованому малому розмірі, JPEG при розумних налаштуваннях якості зазвичай підходить.

Як зробити контактний аркуш із відео?

Оберіть частоту кадрів достатньо низьку, щоб отримати керовану кількість стоп-кадрів, а не одну мітку часу. Для двохвилинного кліпу 1 кадр на секунду дає близько 120 кадрів, чого достатньо, щоб вибрати гарну сітку; вивід у будь-якому разі обмежений 300 кадрами за один запуск. Наразі немає нижчої частоти, ніж 1 fps, тож для менш щільного аркуша витягніть кадри з частотою 1 fps і залиште лише ті, що потрібні для фінальної сітки.