Динамическая длина звуковой дороги?..

Страницы:  1
Ответить
 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 05-Ноя-23 00:08 (1 год 1 месяц назад)

Столкнулся со странной историей.
Есть видео в контейнере MKV. Длина видео 1:36:07. В нём есть (одна из) звуковая дорожка. Формат звука DTS. Открываю файл в MediaInfo – длина 1:36m, и у видео, и у всех аудио.
Сохраняю аудио DTS отдельно, без перекодирования – длина получается 1:35:09. И к видео уже не подходит.
Что за чёрная магия?
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 07-Ноя-23 00:06 (спустя 1 день 23 часа)

Черная магия это временные метки контейнера. delay их частный случай.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 07-Ноя-23 19:31 (спустя 19 часов)

Я догадывался, но делеем втупую подогнать не получается.
Бывает такое, что внутри контейнера элемент "растягивается"?
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 07-Ноя-23 20:47 (спустя 1 час 15 мин.)

halo_cool писал(а):
85438512Бывает такое, что внутри контейнера элемент "растягивается"?
Бывает всё, что угодно. Почитайте. Обычно в середине из-за всяких резок, клеек, например рекламы.
Я даже сталкивался, что mediainfo показывает fps 25 и первый кадр 25, а дальше всё шпарит в 23.976. Или mediainfo показывает constant frame rate и какую-то частоту, а там vfr со смартфона (обычно опостоянивает в метаданных прогон через Avidemux).
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 12-Ноя-23 19:09 (спустя 4 дня)

Ну а как-то извлечь те метки из контейнера возможно?
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 12-Ноя-23 19:51 (спустя 42 мин.)

halo_cool
Лучше всего не извлекать дорожки из контейнера, а перепаковывать в mkvtoolnix. Или цель извлечь dts, чтобы как-то обработать?
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 12-Ноя-23 21:43 (спустя 1 час 52 мин.)

К другому релизу того же видео прикрутить.
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 12-Ноя-23 22:19 (спустя 35 мин.)

Ну тогда надо извлекать dts и синхронить под новое видео (с пересжатием или без). Если с пересжатием, то можно сохранить в wav ffmpeg'ом применив таймкоды, если конечно дело в них. Если для релиза.
А если для себя всё можно сделать в mkvtoolnix без извлечения. Закинуть два фильма, поснимать галочки. Можно и для релиза так.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 13-Ноя-23 17:41 (спустя 19 часов)

Хм, вынуть из контейнера видео и заменить на другое, оставив при этом исходное аудио контейнера, мне как-то в голову не пришло. Попробую при случае.
В любом случае аудио хотел пережать. Если делать ffvmpeg и wav, где таймкоды брать?
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 14-Ноя-23 02:23 (спустя 8 часов, ред. 14-Ноя-23 02:23)

Два варианта.
Расжать в wav:
Код:
ffmpeg.exe -drc_scale 0 -i input.mkv -map 0:1 -c:a pcm_f32le -ac 2 -async 1 output.wav
Или:
Извлечь таймкоды в консольном mkvextract (входит в состав mktoolnix) или каком-нибудь gui для mkvextract:
Код:
mkvextract.exe timecodes_v2 input.mkv 1:timecodes.txt
Нумерация начинается с нуля. Т.е. там где 1, значит вторая дорожка (0 или первая обычно видео).
Потом их можно скормить при муксе в mkvtoolnix, но я бы так не делал.
halo_cool писал(а):
85466300вынуть из контейнера видео
Лучше дорожки из контейнера не извлекать. Добавляете два mkv в mkvtoolnix, снимаете галочки, выводите в третий mkv.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 14-Ноя-23 11:19 (спустя 8 часов)

Лепота, благодарствую.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 28-Ноя-23 17:56 (спустя 14 дней)

artenax писал(а):
85468302Лучше дорожки из контейнера не извлекать. Добавляете два mkv в mkvtoolnix, снимаете галочки, выводите в третий mkv.
Всё получилось. Отличный совет. Сам бы не додумался. Ещё раз спасибо.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 15-Мар-24 15:43 (спустя 3 месяца 16 дней)

artenax писал(а):
85468302Извлечь таймкоды в консольном mkvextract (входит в состав mktoolnix) или каком-нибудь gui для mkvextract:
Код:
mkvextract.exe timecodes_v2 input.mkv 1:timecodes.txt
Нумерация начинается с нуля. Т.е. там где 1, значит вторая дорожка (0 или первая обычно видео).
После извлечения это выглядит примерно так:
скрытый текст
Код:
# timestamp format v2
0
42
85
127
170
213
255
298
341
383
426
468
511
554
596
639
683
725
768
810
853
896
938
981
Там должна быть какая-то доп. информация? И что с ними можно сделать? Сравнить и попробовать синхронизировать с таймкодами в mka, к примеру, если они там есть?
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 15-Мар-24 21:42 (спустя 5 часов)

halo_cool
Таймкоды практично извлекать вместе с сырой дорожкой. Чтобы потом скормить их (таймкоды и дорожку) в mkvtoolnix. Конечно, менять длительность дорожки нельзя, а вот отредактировать (эквалайзер, шумоподавление) можно. Для этих целей. А если редактирование не нужно, то проще сразу перепаковать в mkvtoonix. Зачем тогда с таймкодами вручную возиться, mkvtoolnix сам скопирует их из одного файла в другой и синхронизация не нарушится.
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 15-Мар-24 22:26 (спустя 44 мин.)

artenax
Я открываю для себя прелести разных стандартов. Столкнулся с тем, что можно, например, подпихнуть аудио от 23,97 к видео 25 fps, если выставить принудительно в контейнере matroska частоту кадров для видео, соответствующую частоте кадров видео, из которого взято аудио. Вот пытаюсь разобраться, может, такие вопросы можно решать без полного перекодирования дорог (тем же eaс3to), а через контейнер или даже, возможно, через настройки плеера.
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 15-Мар-24 22:51 (спустя 24 мин.)

Выставлять fps лучше для видео, не для звука.
eac3to может извлечь дорожки и применить таймкоды (он это называет delay, gaps, overlaps) для некоторых форматов. Но не очень точно из-за ограничения редактирования без пересжатия (размера аудио сэмплов).
[Профиль]  [ЛС] 

halo_cool

Стаж: 16 лет 2 месяца

Сообщений: 449

halo_cool · 15-Мар-24 23:08 (спустя 16 мин.)

artenax писал(а):
86017392Выставлять fps лучше для видео
Да, я это и имел в виду.
Суть этого нового вопроса в следующем. Есть релиз видео в 25 fps и звуковая дорога от 23,97 fps. Если подключать их к друг другу напрямую, то они не подходят, и делеем аудио это не лечится. Можно выставить в контейнере fps видео принудительно в 23,97 fps. Контейнер при этом сохраняется быстро, перекодирования ни видео, ни аудио не происходит, насколько я понимаю. После такого трюка аудио от 23,97 fps подходит к этому видео в контейнере, которое по факту 25 fps, но контейнер "принудительно переводит" его в 23,97.
Вот я и подумал: при такой небольшой разнице в кадрах эту конверсию fps наверняка можно делать прямо на лету, при просмотре, даже на не очень мощных процессорах. Возможно, есть возможность выставить отдельные свойства для каждой звуковой дороги в контейнере, если, например, одна дорога от 25 fps, а другая от 23,97, и не перекодировать их, а менять fps видео на лету средствами контейнера и/или плеера.
[Профиль]  [ЛС] 

artenax

Стаж: 2 года 5 месяцев

Сообщений: 1665


artenax · 16-Мар-24 01:39 (спустя 2 часа 31 мин., ред. 16-Мар-24 03:18)

halo_cool писал(а):
86017464при такой небольшой разнице в кадрах эту конверсию fps наверняка можно делать прямо на лету, при просмотре, даже на не очень мощных процессорах
Очень легко плеер это может сделать, просто играя чуть с другой скоростью. Скорость в плеере поменять легко. Проблема в том, что он сделает это и для видео и для звука. А надо только для одной звуковой дорожки и тут придётся уже дать какое-то указание в контейнере для неё.
halo_cool писал(а):
86017464Возможно, есть возможность выставить отдельные свойства для каждой звуковой дороги в контейнере, если, например, одна дорога от 25 fps, а другая от 23,97, и не перекодировать их, а менять fps видео на лету средствами контейнера и/или плеера
Можно указать для нужной звуковой дорожки в mkvtoonix "растянуть на", я только не помню точные значение. Это не рекомендуется (именно для звука) потому что могут быть проблемы потом в некоторых случаях и такая растяжка никак не фигурирует в mediainfo и можно потом забыть (если не сделать пометку, например в Title) и голову ломать от аномалий. Но так можно сделать. Что интересно, плееры (например, MPC-HC) при переключении на такую звуковую дорожку, скорее всего изменят fps видео в противоположную сторону, вместо того, что замедлять/ускорять звук. Т.е. видео подстроят под звук, а не наоборот. Цель всё равно будет достигнута. Но это зависит от плеера и в целом, как я сказал, не всегда может работать нормально.
Т.е. для видео в mkvtoolnix можно указать fps. А если надо для звука, то можно указать "растянуть на", хоть это и не рекомендуется. Точные значения я не помню, думаю что-то вроде 25000/23976. Ну и такое нельзя раздавать на рутрекере.
А вот как указать плееру без mkvtoolnix изменить скорость звуковой дорожки я не знаю.
Edit: Ведь что такое fps. Это 1 / длительность каждого кадра. Если в мс, то ещё умножить на 1000. А длительность это сколько мс кадр показывается на экране. Изменяется время показа, меняется и fps. Например, для 25 fps это 1 / 25 * 1000 = 40 мс. Если каждый кадр имеет разную длительность, то это переменная частота кадров. Такое бывает в смартфонах и не все конвертеры дружат с ней. Длительность каждого кадра записывается в таймкоды контейнера. Плееры читают их. При этом в заголовках контейнера (то, что показывает mediainfo) может быть всякая ерунда.
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error