Тема: Настройки программы
Поясните, пожалуйста, что возвращают, чем различаются функции
HmsTranscodingDvdParams
HmsTranscodingInputParams
HmsTranscodingVideoParams
Вы тут как гость.
Неофициальный форум DLNA Home Media Server → Coding → Настройки программы
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Поясните, пожалуйста, что возвращают, чем различаются функции
HmsTranscodingDvdParams
HmsTranscodingInputParams
HmsTranscodingVideoParams
Боюсь, что точный ответ может дать только автор программы. Но в отладчике становится ясно, что:
HmsTranscodingDvdParams = HmsTranscodingInputParams + HmsTranscodingVideoParams
Как пример:
HmsTranscodingInputParams := '-probesize 7000000 -analyzeduration 10000000 -i "<INPUT FILE>"';
HmsTranscodingVideoParams := '-f dvd -vcodec mpeg2video -q:v 0 -pix_fmt yuv420p -threads 4 -acodec ac3 -ab 448000 -ar 48000';
HmsTranscodingDvdParams := '-probesize 7000000 -analyzeduration 10000000 -i "<INPUT FILE>" -f dvd -vcodec mpeg2video -q:v 0 -pix_fmt yuv420p -threads 4 -acodec ac3 -ab 448000 -ar 48000';
Т.е.:
HmsTranscodingVideoParams - это параметры транскодирования, т.е. выходного файла.
HmsTranscodingInputParams - это параметры входного файла.
HmsTranscodingDvdParams - вся строка параметров
HmsTranscodingVideoParams - это параметры транскодирования, т.е. выходного файла.
HmsTranscodingInputParams - это параметры входного файла.
HmsTranscodingDvdParams - вся строка параметров
Хорошо, только где эти параметры в настройках программы настраиваются? Вот к примеру pix_fmt yuv420p - разрешение по вертикали 420? Почему именно 420? Где это задано?
Нет, конечно же 420 это не размер. Параметр pix_fmt задаёт цветовую модель и 4:2:0 это один из форматов кодирования цвета (RGB) пикселей.
Всё это параметры выходного файла для ffmpeg.
Кратко:
ключ -f - это формат файла. По сути, контейнер.
-vcodec - видео кодек (может быть mpeg4, mpeg2, x264, flv...)
-q:v - качество, битрейт (на сколько я понимаю, ограничивающее значение, 0 - не ограничивать)
-r - частота кадров, frame rate (25, 30....)
-acodec - аудиокодек (может быть ac3, mp3, aac, wma, lpcm...)
-ab 448000 - аудио битрейт
-ar 48000 - частота семплов (типа частоты кадров для видео), sampling frequency
А параметр -pix_fmt, я не знаю, выбран как стандарт для определённого кодека.
Этих параметров много и в них нужно разбираться. Но мои познания поверхностны.
Все эти значения программа берёт прямиком из настроек устройства. Если включили на просмотр с определённого устройства, то настройки берутся именно для него. Если вы отлаживаете скрипт, то настройки могут браться для "Устройство по-умолчанию". Но суть одна - все эти данные заданы по следующему пути: в программе "Настройки" -> "Устройства" -> "Настройки" -> "Кодеки, кадр"
Всё там. Всё оттуда. Ну, не только оттуда. Из настроек в других местах тоже добавляются параметры (могут добавляться).
Также, в некоторых профилях транскодирования или при определённых условиях параметры могут также дополнительно задаваться или меняться.
Например, если у файла считаны свойства и известен размер кадра и какие дорожки, то может добавляться дополнительные параметры.
Например: -vf "scale=1280:720,setdar=16:9"
или даже
-vf "scale=720:400,pad=720:406:0:2:0x000000,setdar=16:9" map 0:0 -map 0:1
что означает, "неправильный" размер кадра файла дополнять полями до стандартного размера и мапятся конкретные выбранные дорожки 0:0 и 0:1 (если дорог много).
Что за параметры принимает ffmpeg и как с ними работать - читать не перечитать.
Понял. Тогда следующий вопрос - в подкасте PCScreen HmsTranscodingDvdParams не возвращает настроек для разрешения видео-потока. В тоже время у меня так же как и на вашем скриншоте установлен размер кадра 1920х1080, "минимально пропорционально экрану" и все галочки. Экран сервера 1920х1200 Так почему нет изменения разрешения? Правильно я понимаю, что размер кадра видео из исходного 1920х1200 должен был быть изменен до 1920х1080 как настроено для устройства?
Эти параметры работают только с профилями с транскодером FFMPEG которые полностью перекодируют видео. У меня профили фильмы основной и Ace Stream FFMPEG подгоняют видео под эти настройки, а на других профилях не наблюдал.
Экран сервера 1920х1200 Так почему нет изменения разрешения? Правильно я понимаю, что размер кадра видео из исходного 1920х1200 должен был быть изменен до 1920х1080 как настроено для устройства?
Нет, программа отдаёт поток как есть телеку. Ничего не меняя. А сам телек вполне тоже может правильно его масштабировать (иногда нет).
Чтобы правильно изменить разрешение указав нужные параметры, нужно программе знать свойства файла и размер кадра в этом файле (потоке). Программа не знает, что у видео размер 1920х1200, пока заранее не считает его свойства. Для интернет ссылок, типа подкастов и ссылок интернет телевидения программа автоматом не считывает свойства. И отдаёт потоки с тем размером кадра, который у них есть.
Конечно, всё делают профили транскодирования (формируют параметры). В некоторых стоит принудительное считывание свойств и выставление параметров масштабирования.
Чтобы правильно изменить разрешение указав нужные параметры, нужно программе знать свойства файла и размер кадра в этом файле (потоке). Программа не знает, что у видео размер 1920х1200, пока заранее не считает его свойства. Для интернет ссылок, типа подкастов и ссылок интернет телевидения программа автоматом не считывает свойства. И отдаёт потоки с тем размером кадра, который у них есть.
Конечно, всё делают профили транскодирования (формируют параметры). В некоторых стоит принудительное считывание свойств и выставление параметров масштабирования.
Если я правильно вас понял, настройки кадра для устройства программе по-барабану, но могут быть использованы профилем транскодирования. Некоторые профили его используют, некоторые нет (например, из-за невозможности получить свойства исходного потока и просто лени автора профиля). Так?
Теперь, чтобы разработчик профиля мог правильно сформировать параметры выходного потока, ему нужно получить настройки кадра для устройства, на котором будет воспроизводиться контент. Как мы уже разобрались выше, функции HmsTranscodingVideoParams и HmsTranscodingDVDParams эти настройки не возвращают. Так как их получить?
Если я правильно вас понял, настройки кадра для устройства программе по-барабану, но могут быть использованы профилем транскодирования. Некоторые профили его используют, некоторые нет (например, из-за невозможности получить свойства исходного потока и просто лени автора профиля). Так?
Теперь, чтобы разработчик профиля мог правильно сформировать параметры выходного потока, ему нужно получить настройки кадра для устройства, на котором будет воспроизводиться контент. Как мы уже разобрались выше, функции HmsTranscodingVideoParams и HmsTranscodingDVDParams эти настройки не возвращают. Так как их получить?
Поняли вы правильно.
Но по второму вопросу хочется уточнить, какие именно параметры вас интересуют?
Разработчик профиля пишет код профиля, где он этими функциями не пользуется. Как раз в коде профиля ему нужно сформировать строку параметров или обеспечить сам запуск транскодирования. Т.е. именно в профиле формируются данные, которые возвращают функции HmsTranscodingVideoParams и проч.
Для формирования параметров в профиле и получения данных о настройках устройства используются другие функции и встроенные переменные. Например, все переменные, начинающиеся на cfg: cfgTranscodingScreenHeight, cfgTranscodingScreenWidth... Эти переменные уже содержат значения настроек.
А функция HmsTranscodingVideoParams может быть использована для получения параметров, которые сформирует профиль, например, в скрипте получения ссылки на поток.
Вот проверьте. Встаньте на ссылку какого-нибудь подкаста, который использует стандартный профиль типа "Фильмы (Основной)", зайдите в скрипт формирования ссылки Alt+4 и там нажмите F8 (начало отладки). Потом нажмите кнопку внизу "Вычислить выражение" и вставьте туда: HmsTranscodingVideoParams.
Вы увидите примерно такую строку, которая приводилась выше (без указания параметров ширины и высоты и проч).
А потом, выйдя из скрипта на этой ссылке выберите "Загрузить свойства файлов", чтобы в информации о видео появилась информация о дорожках и проч.
И после этого опять проделайте заход в скрипт получения ссылки и во время отладки посмотрите что возвращает функция HmsTranscodingVideoParams.
Вы можете увидеть как строка параметров стала сложнее. Например, там может появиться вот это:
-vf "scale=1920:1040,pad=1920:1080:0:20:0x000000,setdar=16:9"
Это дополнительные параметры, указывающие транскодеру увеличить размер кадра до 1920x1040 и дополнить до размера 1920x1080 цветом 0x000000.
Почему scale говорит увеличить именно до 1920:1040? А затем, чтобы не исказить картинку и увеличить только до ближайшего значения ширины и высоты - чтобы увеличение произошло пропорционально. Недостающую высоту (1040 < 1080) дополняем указав pad=....
Так вот. Чтобы сформировать подобную строку программе (точнее в профиле), естественно нужно знать как исходный размер кадра видео, так и размер кадра нашего устройства (который и прописан в настройках).
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Неофициальный форум DLNA Home Media Server → Coding → Настройки программы