<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Неофициальный форум DLNA Home Media Server &mdash; Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
		<link>https://hms.lostcut.net/viewtopic.php?id=124</link>
		<atom:link href="https://hms.lostcut.net/extern.php?action=feed&amp;tid=124&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку».]]></description>
		<lastBuildDate>Sat, 19 Dec 2015 16:23:59 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=2648#p2648</link>
			<description><![CDATA[<p>Очередная запись в блоге <img src="https://hms.lostcut.net/extensions/k_smiles/img/ab.gif" alt=":)" /><br />Видимо, Евгений, автор HMS, сюда заглядывает, ну или звезды сошлись.<br />Собственно профиль он скорректировал и выложил на форуме поддержки HMS.<br /><a href="http://homemediaserver.ru/forum/viewtopic.php?f=16&amp;t=4415">http://homemediaserver.ru/forum/viewtop … amp;t=4415</a><br />Эта тема закрыта, но от намерений по расширению функционала профиля я не отказываюсь и обязательно реализую свои задумки.<br />Евгений, если вы это читаете - спасибо.</p><p>P.S.<br />И, Евгений, если Вы это читаете, функция HmsGetStreamLanguage в случае внешней дорожки возвращает еще и полный путь к файлу... <img src="https://hms.lostcut.net/extensions/k_smiles/img/ad.gif" alt=";)" /></p>]]></description>
			<author><![CDATA[null@example.com (d1mas)]]></author>
			<pubDate>Sat, 19 Dec 2015 16:23:59 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=2648#p2648</guid>
		</item>
		<item>
			<title><![CDATA[Re: Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=2600#p2600</link>
			<description><![CDATA[<p>Что удалось выяснить.</p><p>Оновные профили транскодирования принимают на входе вот эту переменную:<br /></p><div class="codebox"><pre><code>HmsTranscodingInputParams</code></pre></div><p>И при наличии внешней аудиодорожки ее содержимое соответствует действительности:<br /></p><div class="codebox"><pre><code>HmsTranscodingInputParams = -probesize 7000000 -analyzeduration 10000000  -probesize 7000000 -analyzeduration 10000000 -i &quot;&lt;INPUT FILE&gt;&quot; -i &quot;G:\download\!video\Practical.Magic.1998.HDRip.All.Films.RG\Practical.Magic.1998.HDRip.All.Films.RG.Eng.ac3&quot;</code></pre></div><p>Видим два параметра -i, один с шаблоном имени файла фильма, второй с файлом внешней аудиодорожки.<br />Потом эта конструкция обрастает опциями преобразования файла и размера картинки, субтитрами и прочим, а так же двумя параметрами -map для видео и аудио.<br />Все работает корректно.</p><p>А вот профиль &quot;Фильмы (оптимальный)&quot; собирает эту строку немного по-другому.<br />Сначала HmsTranscodingProbeParams (это первые две опции из примера),<br />затем проверка на смещение времени начала просмотра и добавление при необходимости опции -ss HH:MM:SS,<br />затем проверка на тип исходного файла и добавление опции -f mpeg при необходимости.<br />затем к этой конструкции лепятся опции размера картинки, видео и аудио кодеков, субтитров - в нашем случае несущественно.<br />И вот затем начинается самое интересное:</p><div class="codebox"><pre><code>if bMapStreams then                           
sTranscodingParams := sTranscodingParams + Format(&#039; -map 0:%d -map 0:%d&#039;, [HmsGetStreamIndex(stVideo, 0), HmsGetStreamIndex(stAudio, iAudioStreamNo)]);</code></pre></div><p>Вот тут происходит второй &quot;косяк&quot;. Ну то-есть по логике профиля все правильно. Он не предусматривает наличия внешней аудио дорожки.</p><p>Опция -map указывает транскодеру, какие потоки в исходных файлах нужно использовать. Первая цифра - (номер файла-1), вторая - (номер потока в файле-1)<br />Т.е. профиль всегда использует основной файл для выбора потока и видео и звука.<br />В нашем случае должно быть не -map 0:0 -map 0:2, а -map 0:0 (видеопоток) -map 1:0 (аудио дорожка).</p><p>Таким образом - понятно, что нужно сделать. Указать профилю на наличие внешней дорожки, выбранной в настройках HMS и учесть этот момент при формировании параметров использования потоков.</p><p>Не хочется писать очередной &quot;костыль&quot; для частного случая, а сделать универсальное решение, адекватно работающее в любых условиях, с различными типами файлов и устройствами воспроизведения.</p><p>Есть же переменная InputFileName, ну наверняка автор предусмотрел соответствующие переменные для внешних ресурсов.<br />Ну, например: mpAudioSelected не подходит. Она прокатит, если заранее пометить аудиодорожку в HMS. А если пользователь решил выбрать дорожку прямо с устройства через папку транскодирование? Правильно - mpAudioSelected = null.<br />Еще вариант. Сочетание двух переменных mpAudioStreamList и HmsGetStreamParam(&#039;A&#039;,iAudioStreamNo,siStreamFilePath). Оно на первый взгляд работает. Потестировал. Показывает идентичные результаты и при выборе дорожки в HMS и при запуске через транскодирование. Тут делов - отпарсить путь к файлу и пару условий внести в скрипт.</p><p>Но почти уверен, есть более правильное решение в недрах HMS. </p><p>Зачем это все? Да в этом профиле можно реализовать большую часть уже опубликованных на форуме наработок. И с AR, и scale, и с акселерацией, автоподстановкой субтитров&nbsp; и пр.<br />Причем просто добавляя процедурку в профиль. Без костылей и регекспов.</p><p><strong>UPD</strong></p><p>Благодаря любезно предоставленному WendiH оффлайн справочнику переменных и функций HMS раскопал вот такую конструкцию:<br /></p><div class="codebox"><pre><code>HmsGetStreamParam(&#039;A&#039;,iAudioStreamNo,siStreamFilePath)</code></pre></div><p>Если результат вызова этой функции не null, то он содержит искомый нами путь к внешней дорожке.</p><p>И потом так:<br /></p><div class="codebox"><pre><code>HmsTranscodingMapParams(iAudioStreamNo);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (d1mas)]]></author>
			<pubDate>Tue, 15 Dec 2015 14:46:58 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=2600#p2600</guid>
		</item>
		<item>
			<title><![CDATA[Re: Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=2529#p2529</link>
			<description><![CDATA[<div class="quotebox"><cite>WendyH пишет:</cite><blockquote><p>Попробуем разобраться.<br />Не знаю, может вы знаете, но до меня не сразу дошло.... Что профили транскодирования можно выполнять в отладчике. Для этого нужно сначала выделить ссылку на видео фильм и потом пойти в Настройки, Транскодер, Профили, выбрать интересующий профиль, открыть его скрипт и начать отладку прям там. И он будет срабатывать на текущую ссылку.</p></blockquote></div><p>Я так и делал. А еще там можно выбрать профиль устройства, для которого выполняется скрипт. Собственно все цитаты из этого дебага. Но самостоятельно разобраться у меня не получилось <img src="https://hms.lostcut.net/extensions/k_smiles/img/ac.gif" alt=":(" /></p>]]></description>
			<author><![CDATA[null@example.com (d1mas)]]></author>
			<pubDate>Tue, 08 Dec 2015 21:42:24 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=2529#p2529</guid>
		</item>
		<item>
			<title><![CDATA[Re: Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=2528#p2528</link>
			<description><![CDATA[<p>Попробуем разобраться.<br />Не знаю, может вы знаете, но до меня не сразу дошло.... Что профили транскодирования можно выполнять в отладчике. Для этого нужно сначала выделить ссылку на видео фильм и потом пойти в Настройки, Транскодер, Профили, выбрать интересующий профиль, открыть его скрипт и начать отладку прям там. И он будет срабатывать на текущую ссылку.</p>]]></description>
			<author><![CDATA[null@example.com (WendyH)]]></author>
			<pubDate>Tue, 08 Dec 2015 21:33:45 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=2528#p2528</guid>
		</item>
		<item>
			<title><![CDATA[Профиль Фильмы (оптимальный) не цепляет внешнюю аудиодорожку]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=2521#p2521</link>
			<description><![CDATA[<p>Прошу помощи.</p><p>Понравилась мне концепция универсального профиля для транскодирования в зависимости от возможностей конечного устройства воспроизведения. Здорово ведь. Построил один раз таблицу совместимости и забыл. И все правки можно вносить в один единственный профиль, если что-то захочется доработать.<br />Здорово еще и то, что в этом профиле четко считается соотношение сторон фильма и устройства воспроизведения и можно забыть про допилку и прочие костыли с перехватом командной строки ffmpeg. Здесь же можно и все параметры кодеков и аппаратное ускорение обработки вставить. В-общем лепота.<br />И все бы хорошо, только сразу наткнулся на косяк, справиться с которым пока не получается. Суть в следующем:<br />Есть фильм, к нему отдельно скачал английскую аудиодорожку. Подцепил. Выбрал ее. В карточке все выглядит культурно.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p><span class="postimg"><img src="https://hms.lostcut.net/misc.php?action=pun_attachment&amp;item=404" alt="https://hms.lostcut.net/misc.php?action=pun_attachment&amp;amp;item=404" /></span></p></div></div><p>Видеодорожка, аудиодорожка с русской озвучкой и ниже внешняя аудиодорожка с англ озвучкой.<br />Установил профиль - Фильмы (оптимальный). Настроил таблицу для телика.<br />Запускаю фильм на телике - фигвам. Запускаю выборочно другие - работает все чудесно.<br />Делаю тестовое транскодирование - получаю ошибку в параметре -map.<br />Смотрю на строку транскодирования и вижу косяк. Там нет упоминания о файле с внешней аудиодорожкой. Вот так она выглядит (взял из дебага):<br /></p><div class="wh_markdown"><div class="markdown-body"><p>probesize 7000000 -analyzeduration 10000000 -i "G:\download!video\Practical.Magic.1998.HDRip.All.Films.RG\Practical.Magic.1998.HDRip.All.Films.RG.avi" -f dvd -vcodec mpeg2video -q:v 0 -pix_fmt yuv420p -vf "scale=1280:540,pad=1280:720:0:90:0x000000,setdar=16:9" -threads 4 -acodec ac3 -ab 448000 -ar 48000 -ac 6 -map 0:0 -map 0:2 "<OUTPUT FILE>"</p>
</div></div><p>А вот так выглядит строка после профиля Фильмы (дополнительный), да и после основного:<br /></p><div class="wh_markdown"><div class="markdown-body"><p>-probesize 7000000 -analyzeduration 10000000  -probesize 7000000 -analyzeduration 10000000 -i "G:\download!video\Practical.Magic.1998.HDRip.All.Films.RG\Practical.Magic.1998.HDRip.All.Films.RG.avi" -i "G:\download!video\Practical.Magic.1998.HDRip.All.Films.RG\Practical.Magic.1998.HDRip.All.Films.RG.Eng.ac3" -f dvd -vcodec mpeg2video -q:v 0 -pix_fmt yuv420p -acodec ac3 -ab 448000 -ar 48000 -ac 6 -vf "scale=1280:540,pad=1280:720:0:90:0x000000,setdar=16:9" -map 0:0 -map 1:0 -threads 4</p>
</div></div><p>Да, там два раза -probesize 7000000 -analyzeduration 10000000, но это не мешает. А вот отсутствие упоминания о файле с внешней дорожкой режет глаз не только мне, но и самому HMS, ибо транскодировать он это отказывается. Обратите внимание на мапы видео и аудио. Аудио различается.</p><p>Моих познаний хватило для того, чтобы понять, что при обработке аудиодорожки в профиле Фильмы оптимальный, скрипт считает, что аудио упаковано в том же файле, и формирует строку для транскода, исходя из этой уверенности. При этом параметры кодека, кол-ва каналов и проч он вполне замечательно получает из недр HMS.</p><p>Очень прошу знатоков и профи помочь с доработкой профиля для корректного взаимодействия с внешними аудио дорогами и субтитрами. Да и разработчику потом отправим, пусть чинит.</p><p>Заранее благодарю.</p>]]></description>
			<author><![CDATA[null@example.com (d1mas)]]></author>
			<pubDate>Tue, 08 Dec 2015 18:32:19 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=2521#p2521</guid>
		</item>
	</channel>
</rss>
