небольшие уточнения по поводу алгоритма выбора используемого профиля:
1. профиль назначен для конкретного файла(медиа-ресурса) или для данного типа файлов(медиа-ресурсов),
2. профиль указан в настройках транскодинга (настройки - транскодер - кодеки, кадр)
3. профиль назначен по умолчанию в списке профилей (отдельно для фильмов, музыки и фото)
при этом профиль, используемый для случаев 2 и 3, должен быть универсальным для 3-х основных категорий медиа-ресурсов: интернет-тв, двд фильмов и остальных (!) с различными параметрами настроек транскодинга, которые храняться в соответствующих профилях.
в общем, на мой взгляд, в программе реализован не самый логичный алгоритм выбора подходящего профиля для конкретного случая. но это так, просто размышления для понимания, мож кому и пригодятся...
А вот с AVI-профилем, который выложил
Alexander, пришлось поковыряться.
Он не хотел у меня нормально воспроизводить картинку AVI-файла, полученного при перегонке с цифровой видеокамеры (видеодорожка - dvvideo, 720x576, аудиодорожка - PCM 2 канала).
Данный профиль воспринимал исходную картинку как в формате 4:3 и дополнял ее по бокам темными полями в полном соответствии с настройками транскодера, подгоняя при этом под ближайший подходящий размер для вывода на экран (настройка "изменение оригинального размера кадра" - минимально, пропорционально экрану), и выводил ее еще со сдвигом вправо, так что на экране видно было только левое темное поле и собственно кадр с искаженными пропорциями.
После многочисленных экспериментов и мучительного разбора скрипта профиля все-так удалось получить правильное отображение картинки. Для этого AVI-профиль был исправлен следующим образом:
1. исправлена ошибка, приводившая к тому, что в моем случае результирующий видеопоток формировался с неправильными размерами кадра.
в строке:
Code: Select all
sParams := sParams + Format(' -s %dx%d', [iWidth, iHeight]);
использованы не те переменные, которые перед этим определяются с учетом изменения размеров кадра.
должно быть:
Code: Select all
sParams := sParams + Format(' -s %dx%d', [iFrameWidth, iFrameHeight]);
2. добавлена проверка соответствия соотношения сторон кадра источника и соотношения сторон в настройке размера кадра в настройках транскодера, чтобы исключить изменение размера, если они совпадают.
для этого в строке:
Code: Select all
if HmsTranscodingFrameParams(iWidth, iHeight, cfgTranscodingScreenFormat,
iPadLeft, iPadTop, iPadRight, iPadBottom) then
добавлено условие:
Code: Select all
if (mpAspectRatio <> cfgTranscodingScreenFormat) and
HmsTranscodingFrameParams(iWidth, iHeight, cfgTranscodingScreenFormat,
iPadLeft, iPadTop, iPadRight, iPadBottom) then
после этого, как водится, все заработало
Хотя для меня так и остался открытым вопрос, как сделать так, чтобы весь алгоритм поиска способа вывода медиа-контента (в нашем случае фильма), а также подбора необходимых параметров транкодирования, находился в одном месте (в одном скрипте)?
Для меня, например, очевидно, что может быть сделан один такой общий алгоритм для всех случаев с учетом его параметризации в зависимости от источника контента, настроек транскодинга и параметров устройства вывода (в нашем случае ТВ).
В дальнейшем такой алгоритм может дополняться новыми условиями и ветками обработки различных ситуаций для разных форматов/кодеков/размеров/каналов и т.д.
На текущий же момент у меня получается, что используются 5-6 профилей плюс всевозможные настройки. При это нет никакой уверенности, что для следующего фильма с другими параметрами не придется заново изучать все эти скрипты и настройки для поиска где и чего надо еще подкрутить, чтобы насладиться его просмотром
