Fourcc что это за программа
Принес один знакомый 3 фильма, видимо скачанных в Инете, в формате XviD. Ни его, ни мой бытовой плеер диск с этими файлами не читают. У меня никогда не было раньше такой необходимости конвертировать XviD, поэтому кодеков XviD в системе нет. Да и DivX оказался в системе только 6.8 почему-то, но и его бытовой плеер не понимает (там только на 5-ку прошивка).
Из софтовых плееров файлы воспроизводит только KMPlayer (PowerDVD не берет, виндовый — не берет).
Стал «репу» чесать:
1. Решил применить для конверсии Студию (ПАЛ, широкий, прогрессив). Ну и — рассинхрон. Оказалось, что у этого XviD’a частота кадров 23,762 . В итоге звук отстает от видео. Что тут сделать — к видеоряду «Скорость» применить? Сколько.
2. Поскольку я уже года 4 с DivX дело не имею, то и позабыл — как его «воткнуть» в систему-то (недавно переустановленную с форматированием винта), чтобы ВиртуалДабом конвертнуть фильм. Какой-то кодек нашел (5.21 Pro), вроде установил, но он в списке ВиртуалДаба не появился (там, где кодек компрессии выбираешь). Есть только 6.8. А даже если и встанет — какую частоту кадров указывать-то. Или при этой конверсии рассинхрона не будет?
Цикл for. Что это. Что делает. Пример. Синтаксис. Циклы. Урок #16.
Или вообще иначе надо делать? Формат выходной интересует либо ДВД-диск, либо DivX-5.
Прошу подсказать, ибо кажный эксперимент — на моей машине — примерно 5-6 часов занимает. Справочно: фильмы длиной около 100 минут каждый.
Источник: drbobah.com
Коды FOURCC
Многим форматам цифровых носителей назначены коды FOURCC. Код FOURCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII. Например, код FOURCC для видео YUY2 — YUY2. Для сжатых форматов видео и форматов видео, отличных от RGB (например, YUV), необходимо задать для элемента biCompression структуры BITMAPINFOHEADER код FOURCC.
Существуют различные макросы C/C++, которые упрощают объявление значений FOURCC в исходном коде. Например, макрос MAKEFOURCC объявлен в Mmsystem.h, а макрос FCC объявлен в Aviriff.h. Используйте их следующим образом:
DWORD fccYUY2 = MAKEFOURCC(‘Y’,’U’,’Y’,’2′); DWORD fccYUY2 = FCC(‘YUY2’);
Можно также объявить код FOURCC непосредственно в виде строкового литерала, просто отменив порядок символов. Пример:
DWORD fccYUY2 = ‘2YUY’; // Declares the FOURCC ‘YUY2’.
Отмена порядка необходима, так как операционная система Microsoft Windows использует архитектуру с небольшим порядком. ‘Y’ = 0x59, ‘U’ = 0x55, и ‘2’ = 0x32, поэтому ‘2YUY’ имеет значение 0x32595559.
Преобразование кодов FOURCC в идентификаторы GUID подтипов
Диапазон из 2*32 GUID зарезервирован для представления FOURCC. Эти идентификаторы GUID — это все формы XXXXXXXX-0000-0010-8000-00AA00389B71 , где XXXXXXXX находится код FOURCC. Таким образом, guid подтипа для YUY2 имеет значение 32595559-0000-0010-8000-00AA00389B71 .
Computer Science | Что Должен Знать Программист?
Многие из этих идентификаторов GUID уже определены в файле заголовка Uuids.h. Например, подтип YUY2 определяется как MEDIASUBTYPE_YUY2. Библиотека базовых классов DirectShow также предоставляет вспомогательный класс FOURCCMap, который можно использовать для преобразования кодов FOURCC в значения GUID. Конструктор FOURCCMap принимает код FOURCC в качестве входного параметра. Затем можно привести объект FOURCCMap к соответствующему GUID:
FOURCCMap fccMap(FCC(‘YUY2’)); GUID g1 = (GUID)fccMap; // Equivalent: GUID g2 = (GUID)FOURCCMap(FCC(‘YUY2’));
Источник: learn.microsoft.com
Расщепляем QuickTime на атомы
В предыдущих сериях цикла я делал комплименты формату файлов QuickTime. Формат их заслуживает, но эпитеты в наши дни почти ничего не стоят. Поэтому я решил рассказать о том, как этот формат устроен.
Одной из ключевых задач создаваемой технологии была десакрализация мультимедиа. Из чего-то возвышенно-футуристического её следовало превратить в обычный тип данных. И в еще один формат файлов, которые могли бы быть использованы в любой системе любой компьютерной платформы, “в настоящем и будущем”.
Задача несложная. Дано: конструкция файла должна обеспечивать хранение и быстрое извлечение данных с заранее неизвестного типа и размера. Данные могут храниться вне файла, нужно предусмотреть универсальный механизм ссылок на данные в файловой системе.
Свобода (настоящая) обеспечивается четко определенными правилами и жесткой базовой структурой технического устройства или общества. В социумах эту роль играют своды законов, продуманных и проверенных реальностью, которые выполняются строго и неукоснительно. Поскольку идеально только то, чего нет, все выявляемые “баги” должны немедленно браться “в работу”, изучаться и исправляться. Но я отвлекся.
Формат файла QuickTime обеспечивает максимальную (полную) свободу для размещаемых в нем данных. Свобода данных проще чем свобода социума, поэтому её базовые принципы могут быть заложены на этапе разработки. Формат выдержал проверку временем, хотя и в него пришлось вносить изменения. Это случилось один раз за почти 30 лет существования технологии.
Мир изменился. В 1990 году никто и представить себе не мог, что когда-нибудь появятся файлы больше 4 гигабайт. Не уверен что это повод для гордости, но этот барьер мир успешно преодолел. В QTFF все чаще стали пытаться впихнуть данные объемом в 5 или 6 гигабайт. Ничего хорошего из этого не получалось, и поднялся злобный вой на весь Интернет.
В итоге, в формат QTFF и в QuickTime были внесены небольшие изменения. Совместимость обновленного формата с старым абсолютная.
Если данным станет тесно в 18,4 экзабайтах (максимум адресуемого пространства для 64-битной адресации), изменений в QTFF потребуется еще меньше. Экзабайт это миллион терабайт, 10 в 18-й степени байт. Насколько я знаю, объём крупнейших в мире банков данных уже измеряется в петабайтах (это 10 в 15-й степени байт), может быть уже в десятках петабайт. До 18 экзабайт еще очень далеко.
Подробности? Если вам они интересны, я вами горжусь.
Структура QTFF
Файл-вездеход состоит из… атомов. Разработчики формата назвали индивидуальные куски данных (chunks, говоря по-русски) атомами. Атом в QTFF может состоять или из данных, или из других атомов. В физике атомы устроены иначе, но цифровые технологии – иные миры. Законы в которых устанавливает создатель.
Кроме того, атом в QTFF – всего лишь термин. По моему, удачный.
Кстати, и у создателей QTFF, и у физиков, термин “атом” противоречит смыслу слова, от которого он произошел. С древнегреческого слово “атом” переводится как “неделимый”.
У каждого типа атомов уникальный идентификатор, обозначаемый особым типом данных, который на своей родине называется OSType, а за её пределами – FOURCC.
Описанию этого типа и его истории ниже посвящен целый раздел, но если не вдаваться в детали, это двуликий Янус среди типов данных. Это одновременно и целое число без знака, размером в 32 бита, и 4-символьная мнемоника.
Вот абстрактная структура QTFF-файла (приведены мнемоники типов атомов):
Файл QTFF тоже можно считать атомом: от состоит из двух атомов, ‘moov’ и ‘mdat’. Самый важный из них – ‘moov’. Он состоит из атома-заголовка, и одной или нескольких дорожек. В дорожке могут быть представлены самые разные данные: видео, аудио, эффекты, текст, и вообще что угодно.
Пусть мнемоника ‘moov’ не введёт вас в заблуждение – это не только видео или аудио, это могут быть совершенно любые синхронизированные данные. Результаты исследования на полиграфе (подозреваемого или подопытного), результаты слежения за каким-то объектом в природе, что угодно.
Это фиксация в файле процессов с привязкой их к общей шкале времени. Представление данных в дорожке и их интерпретация – забота codec’ов. (от Code-Decode).
Естественно, ни QuickTime Player, ни другие стандартные инструменты для пользователя, об этих вариантах QTFF совершенно не в курсе. Для работы с этими узкоспециальными данными требовались немалые усилия программистов – QuickTime предоставлял только удобную структуру файла и набор API (интерфейс программиста приложений – функции, структуры данных, константы) для создания, редактирования и воспроизведения QTFF.
К сожалению, это многообещающее направление было упущено руководством Apple, и в разных областях человеческой деятельности появились свои собственные форматы и наборы API для работы с ними. Я работал с QuickTime исключительно в области его типичных приложений (аудио, видео, конверсия графических и видео форматов), но другие применения QuickTime видел – они ничем не уступают специализированным решениям. Просто об этой стороне QuickTime мало кто знал.
Дорожка (‘trak’) – атом с целой иерархией. А то, что заключено в прямоугольные скобки, может быть абсолютно любыми по сложности и структуре комбинациями атомов. Если в операционной системе, где “исполняется” пришедший извне файл, не установлен codec для работы с дорожками определенного типа, она не будет исполнена. Если непонятны все дорожки, открытие файла завершится сообщением об ошибке.
Объемов памяти уже давно достаточно для установки в систему сотен codec’ов, для самых разных вариантов медиа.
FOURCC
Забавно, но факт: об этом типе данных в сети сведений выше крыши. Только, если не знать как все было на самом деле, возникает стойкое убеждение в том, что FOURCC изобрела Microsoft. Иногда (часто), вскользь, упоминается и Apple, применяющая этот тип данных в QuickTime. Украли, наверное, у Microsoft.
Впрочем, процесс забвения пока еще не зашел слишком далеко, да и Microsoft давно уже не та. Моё сообщение об этом типе данных не единственное. В англоязычной википедии, например, этот тип данных описан вполне прилично (хоть и не так подробно, как нравится мне).
FOURCC расшифровывается как “Four Characters Code”. Используется как идентификатор для самых разных целей, в различных форматах файлов и программном обеспечении.
По своей сути это 4-байтовое число, с диапазоном значений от 0 до 4 294 967 295. Но это для компьютера. Ему проще работать с числами.
Есть у FOURCC и “человеческое” лицо. Для людей (программистов и прочих посвященных) это комбинация из 4 символов, мнемоническое обозначение типа объекта. Мнемоники для человека удобнее чисел.
Например, ‘trak’ или ‘mdat’.
FOURCC впервые появились (не говорить же про такую мелочь “изобрели”) в 1982 или 1983 на Apple, в команде разрабатывавшей Mac. На Mac’е этот тип данных называется OSType, им обозначали типы файлов, ресурсов и тому подобные объекты, многих из которых в macOS уже нет. По мнению вики, OSType появился в 1984, вместе с Mac’ом.
В 1985 году компания Electronic Arts использовала FOURCC в IFF (Interchange File Format), формате разработанном для применения на Amiga канадской компании Commodore, в качестве тэгов для обозначения типов данных.
Microsoft впервые применила этот формат в начала 90-х, в RIFF, собственной реализации Amiga IFF для процессоров от Intel. Порядок байт в Intel и Motorola отличается, little- и big-endian.
Строение атома
До внедрения в QuickTime поддержки 64-битных архитектур, атомы в QTFF были устроены только так:
Байты 0-3 размер атома плюс 4 байта размера плюс 4 байта обозначения типа;
Байты 4-7 тип атома, FOURCC;
Байты 8..n данные
Обратите внимание: даже если в атоме данные нулевой длины, значение размера будет 8, это важно для последующего изложения.
Для поддержки данных объемом более 4 гигабайт был разработан еще один формат атомов:
Байты 0-3 всегда 0x00000001;
Байты 4-7 тип атома, FOURCC;
Байты 8-15 размер атома плюс 16 байт заголовков;
Байты 16..n данные.
32-битные атомы никогда не начинаются с 0x00000001, поэтому переделывать старые файлы нет необходимости.
Кроме 0x00000001, значением первых 4 байтов может быть 0x00000000, что означает “атом занимает всю оставшуюся часть файла”. Размер атома в таких случаях не имеет значения.
Если данные, не умещающиеся в 18 экзабайт, станут реальностью, появятся атомы “поколения 0x00000002”.
В продолжении – ответ на вопрос “зачем Apple Computer понадобился QuickTime для Windows?”
Источник: appleinsider.ru
OpenCV в Python: Часть 1 — Работа с изображениями и видео
Добро пожаловать! Перед вами первая статья из серии OpenCV в Python, которая, как вы уже догадались по названию, посвящена тому, как научиться комфортно работать в OpenCV.
Я понимаю, что у каждого свой стиль обучения, но я настоятельно рекомендую вам вместе со мной следовать за мыслью и писать код по мере прохождения уроков. Все файлы кода и данных будут доступны в конце каждой статьи. Если у вас будут появляться вопросы, не стесняйтесь их задавать.
Не будем терять времени, начнем!
Начало работы с OpenCV
Поскольку мы начинаем с самого начала, в этом разделе мы поговорим об основах обработки изображений. Чтобы начать работать с OpenCV, надо сначала ее установить. Для этого введите команду в терминале (на Windows):
pip install opencv-python
Как только установка будет завершена, можно начинать писать код.
Для начала давайте импортируем необходимые библиотеки.
import cv2 import argparse
Модуль cv2 – это и есть OpenCV. Его мы будем использовать для анализа изображений и видео. Модуль argparse будет полезен при работе с аргументами, передаваемыми через терминал. Если вам неудобно работать с командой строкой, можете почитать это руководство (https://www.pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/), в котором все очень хорошо объясняется.
Работать мы будем с этим изображением.
Разместите это изображение (или любое другое на выбор) в директорию, где находится ваш файл с программой.
В терминале мы передадим это изображение в качестве аргумента, поэтому в файле с исходным кодом нужно сделать парсер аргументов.
ap = argparse.ArgumentParser() ap.add_argument(«-i», «—image», required=True, help=»path to input image») args = vars(ap.parse_args())
После создания экземпляра argparse , добавим аргумент, который, по сути, сообщает, что изображение передается, как аргумент, и его нужно распарсить. Затем обработанный аргумент передается функции vars() , которая возвращает атрибут dict указанного объекта.
С помощью метода imread из cv2, мы положим изображение в переменную image .
image = cv2.imread(args[«image»], cv2.IMREAD_GRAYSCALE)
Первый аргумент, передаваемый функции – это args[“image”] , обработанный аргумент, содержащий путь к изображению. Поскольку мы сохранили изображение в той же папке, просто передадим имя файла изображения.
Второй аргумент конвертирует изображение в оттенки серого. Этот шаг мы будем часто выполнять при работе с изображениями и видео, потому что обработка цветных изображений намного сложнее и занимает много времени, тогда как зачастую изображений в оттенках серого вполне достаточно для многих задач. Следовательно, нам нет необходимости использовать более сложные и трудные в обработке цветные изображения.
Для отображения изображений используется метод imshow. Первый аргумент – заголовок отображаемого изображения, а второй – сама переменная изображения.
cv2.imshow(«Image», image) cv2.waitKey(0)
cv2.waitKey(0) будет ждать, пока пользователь не нажмет любую клавишу, после чего окно с изображением закроется.
Помимо вывода самого изображения, эту переменную image можно использовать для отображения некоторой базовой информации, такой как высота и ширина изображения.
(h, w) = image.shape[:2] # display image properties print(«width: <> pixels».format(w)) print(«height: <> pixels».format(h))
OpenCV позволяет сохранить этот файл и записать его на диск. Что интересно, OpenCV также под капотом обрабатывает преобразование типов, то есть вы можете сохранить изначально .jpeg файл в формате .png.
Метод imwrite принимает путь к выходному изображению, которое будет сохранено в качестве первого аргумента, и переменную с изображением в качестве второго. Если вы хотите изменить тип файла, просто измените его в имени пути, а OpenCV позаботится об остальном.
cv2.imwrite(«folder/newimage.png», image)
А вот и полный код:
import cv2 import argparse ap = argparse.ArgumentParser() ap.add_argument(«-i», «—image», required=True, help=»path to input image») args = vars(ap.parse_args()) image = cv2.imread(args[«image»], cv2.IMREAD_GRAYSCALE) cv2.imshow(«Image», image) cv2.waitKey(0) (h, w) = image.shape[:2] # display image properties print(«width: <> pixels».format(w)) print(«height: <> pixels».format(h)) cv2.imwrite(«photos/newimage.png», image)
Команда для выполнения файла:
python app.py —image photo_one.jpeg
Примечание: Я назвал файл с программой app.py, а файл с изображением photo_one.jpeg, не забудьте вставить свои названия.
После выполнения этого файла, вы получите исходное изображение в оттенках серого:
В вашем основном каталоге создастся папка с изображениями, в которой вы увидите то же изображение, что и в файле newimage.png.
Работа с видео в OpenCV
Теперь, когда мы закончили с изображениями, пришло время познакомиться с основами взаимодействия с веб-камерой или видеофайлами в OpenCV. Работа с видео мало чем отличается от работы с изображениями, поскольку видео состоит из кадров, которые по сути являются изображениями.
Для начала импортируем библиотеки.
import cv2 import numpy as np
Теперь создадим объект VideoCapture , чтобы, как следует из названия, «захватывать» видео.
cap = cv2.VideoCapture(0)
Число, которое мы передаем, означает источник. 0 – первая веб-камера в вашей системе, 1 – вторая и т.д.
Если вы хотите загрузить уже существующий видеофайл вместо захвата прямой трансляции, просто на место номера вставьте путь к нему.
Затем создадим цикл while , чтобы получать из источника кадр за кадром.
while True: ret, frame = cap.read() cv2.imshow(‘video feed’, frame)
Функция cap.read() возвращает логическое значение (True/False) и кадр. Если кадр был считан верно, то возвращается True.
cv2.imshow() используется для отображения видео. Название видео будет первым аргументом.
Поскольку мы сделали бесконечный цикл, нам нужно что-то, что его прервет.
if cv2.waitKey(1) 0xFF == ord(‘q’): break cap.release() cv2.destroyAllWindows()
После выполнения файла, вы увидите изображение с веб-камеры в окне под названием «video feed». Чтобы закрыть окно, нажмите «q».
Помните, как мы преобразовали наше цветное изображение в оттенки серого и сохранили его на диске? То же самое можно сделать и с видео. Нужно просто внести несколько незначительных изменений.
В цикл while добавьте следующие инструкции:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow(‘gray feed’, gray)
После сохранения и выполнения файла вы получите два окна:
- Исходную версию.
- Версию в оттенках серого.
Теперь мы можем выводить два или более окон, когда хотим сравнить наши изменения с исходным файлом/потоком. Так проще обнаруживать изменения, которые мы внесли.
Также мы можем сохранить файл с помощью объекта VideoWriter . Перед этим нужно указать переменную fourcc (https://en.wikipedia.org/wiki/FourCC). FourCC – это 4-байтовый код, который используется для указания видеокодека. Полный список кодов можно посмотреть в кодеках FourCC (http://www.fourcc.org/codecs.php).
fourcc = cv2.VideoWriter_fourcc(*’XVID’) out = cv2.VideoWriter(‘output.avi’, fourcc, 20.0, (640, 480))
Имя выходного файла будет первым аргументом. Затем нужно передать количество кадров в секунду (fps) и размер кадра.
Чтобы сохранить видео, нужно записать каждый кадр в цикле while.
out.write(frame) out.release() cv2.destroyAllWindows()
Не забудьте в конце освободить экземпляр VideoWriter .
import cv2 import numpy as np cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*’XVID’) out = cv2.VideoWriter(‘output.avi’, fourcc, 20.0, (640, 480)) while True: ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) out.write(frame) cv2.imshow(‘video feed’, frame) cv2.imshow(‘gray feed’, gray) if cv2.waitKey(1) https://habr.com/ru/company/otus/blog/558426/» target=»_blank»]habr.com[/mask_link]