Fourcc что это за программа

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 на атомы. Фото.

Одной из ключевых задач создаваемой технологии была десакрализация мультимедиа. Из чего-то возвышенно-футуристического её следовало превратить в обычный тип данных. И в еще один формат файлов, которые могли бы быть использованы в любой системе любой компьютерной платформы, “в настоящем и будущем”.

Задача несложная. Дано: конструкция файла должна обеспечивать хранение и быстрое извлечение данных с заранее неизвестного типа и размера. Данные могут храниться вне файла, нужно предусмотреть универсальный механизм ссылок на данные в файловой системе.

Свобода (настоящая) обеспечивается четко определенными правилами и жесткой базовой структурой технического устройства или общества. В социумах эту роль играют своды законов, продуманных и проверенных реальностью, которые выполняются строго и неукоснительно. Поскольку идеально только то, чего нет, все выявляемые “баги” должны немедленно браться “в работу”, изучаться и исправляться. Но я отвлекся.

Читайте также:
Что за программа спасибо от Сбербанка магазины партнеры

Формат файла QuickTime обеспечивает максимальную (полную) свободу для размещаемых в нем данных. Свобода данных проще чем свобода социума, поэтому её базовые принципы могут быть заложены на этапе разработки. Формат выдержал проверку временем, хотя и в него пришлось вносить изменения. Это случилось один раз за почти 30 лет существования технологии.

Мир изменился. В 1990 году никто и представить себе не мог, что когда-нибудь появятся файлы больше 4 гигабайт. Не уверен что это повод для гордости, но этот барьер мир успешно преодолел. В QTFF все чаще стали пытаться впихнуть данные объемом в 5 или 6 гигабайт. Ничего хорошего из этого не получалось, и поднялся злобный вой на весь Интернет.

В итоге, в формат QTFF и в QuickTime были внесены небольшие изменения. Совместимость обновленного формата с старым абсолютная.

Если данным станет тесно в 18,4 экзабайтах (максимум адресуемого пространства для 64-битной адресации), изменений в QTFF потребуется еще меньше. Экзабайт это миллион терабайт, 10 в 18-й степени байт. Насколько я знаю, объём крупнейших в мире банков данных уже измеряется в петабайтах (это 10 в 15-й степени байт), может быть уже в десятках петабайт. До 18 экзабайт еще очень далеко.

Подробности? Если вам они интересны, я вами горжусь.

Структура QTFF

Расщепляем QuickTime на атомы. Структура QTFF. Фото.

Файл-вездеход состоит из… атомов. Разработчики формата назвали индивидуальные куски данных (chunks, говоря по-русски) атомами. Атом в QTFF может состоять или из данных, или из других атомов. В физике атомы устроены иначе, но цифровые технологии – иные миры. Законы в которых устанавливает создатель.

Кроме того, атом в QTFF – всего лишь термин. По моему, удачный.

Кстати, и у создателей QTFF, и у физиков, термин “атом” противоречит смыслу слова, от которого он произошел. С древнегреческого слово “атом” переводится как “неделимый”.

У каждого типа атомов уникальный идентификатор, обозначаемый особым типом данных, который на своей родине называется OSType, а за её пределами – FOURCC.

Описанию этого типа и его истории ниже посвящен целый раздел, но если не вдаваться в детали, это двуликий Янус среди типов данных. Это одновременно и целое число без знака, размером в 32 бита, и 4-символьная мнемоника.

Вот абстрактная структура QTFF-файла (приведены мнемоники типов атомов):

Расщепляем QuickTime на атомы. Структура 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”] , обработанный аргумент, содержащий путь к изображению. Поскольку мы сохранили изображение в той же папке, просто передадим имя файла изображения.

Читайте также:
Diaglogger что это за программа и нужна ли она на Андроид

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

Для отображения изображений используется метод 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)

После сохранения и выполнения файла вы получите два окна:

  1. Исходную версию.
  2. Версию в оттенках серого.

Теперь мы можем выводить два или более окон, когда хотим сравнить наши изменения с исходным файлом/потоком. Так проще обнаруживать изменения, которые мы внесли.

Также мы можем сохранить файл с помощью объекта 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]

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru