Русские субтитры: Синхронизация звуковой дорожки с видеоизображением - Русские субтитры

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Синхронизация звуковой дорожки с видеоизображением

#1 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 05 Май 2007 - 11:04

Синхронизация (подгонка) звуковой дорожки с видеоизображением в VirtualDub(Mod)

/Автор пользуется VirtualDubMod, и ввиду немного измененных опций в VirtualDub некоторые функции называются по-другому. И, несмотря на тематику сайта, он надеется, что сие изложение окажется полезным/


Ни для кого не секрет, что существует два основных два (три) основных формата, используемы при просмотре: PAL (25 кадров/сек) и NTSC (23,976 и 29,970 соответственно). Не вдаваясь в подробности описания форматов, я постараюсь в данном материале разобрать сложные случаи и проблемы, встречающиеся при синхронизации звуковой дорожки с видеоизображением.

Допустим, вы раздобыли какой-то редкий перевод. Например, михалёвского «Брубейкера». Скачали из торрента («осла», etc.) оригинал (или DVDRip), сделали DVDRip. Смиксовали «родную» (английскую) дорожку. Все, у вас есть готовый рип оригинала на английском языке. Открываете его в VD (VDMod), загружаете русскую, с трудом добытую дорожку и сразу видите, что она по времени отличается от времени фильма минут эдак на пять (или больше, или меньше). Соответственно миксование ничего не дает. Звук или с самого начала опаздывает непонятно на сколько, или резво убегает... И вообще неясно, где же он... звук. В общем, просмотр невозможен. Что же делать. Итак, по порядку...

1. Самый простой вариант. Функция в VD - «Video > Frame rate». Наипримитивнейший случай, если сработает функция «Change so Video and Audio durations match». Но это бывает редко. Как правило звук изначально отстает или опережает оригинал (помимо другого таймлайна) в лучшем случае на несколько секунд. Но об этом в п. 2. Данная функция увеличивает/уменьшает фильм по времени, чтобы он соответствовал длительности звуковой дорожки. Если такой вариант пройдет, то английская дорожка станет «неслушабельна», т.е. мы ее теряем. Нас такой вариант не устраивает, поэтому делаем следующее.

2. Посложнее. Наша задача на этом этапе не использовать п. 1, а ручками подобрать, какое нужное количество кадров поставить для видео в вышеописанной функции, чтобы звук от начала до конца был синхронизирован. Для этого мы должны запомнить на слух первую фразу, которая говорится в фильме, или первый звук, например удар молотком по наковальне, а потом «увидеть» этот звук на своем экране. Т.е. выполнив вышеперечисленные в предисловии действия, выделяем с самого начала небольшую область фильма, где ведется (показывается) активный разговор и т.п. (не трогая при этом Frame rate) сохраняем (Direct Stream Copy), проверяем в плеере. Если звук отстает от изображения или опережает, то подгоняем его с помощью опции «Audio Skew Correction», которая находится в «Streams > Stream List > Interleaving». Например, если звук изначально отстает примерно на секунду, то выставляем значение -1000 (минус 1000) (миллисекунд), а затем плавно по 50-100 мсек добиваемся абсолютной синхронизации. Когда все готово, запомните эту цифру (запишите где-нибудь). Далее отматываем фильм в самый конец и ищем там изображение, где ведется диалог или звук, который можно «засечь». Выделяем фрагмент и сохраняем, как делали раньше. Он, естественно, рассинхронизирован со звуком, нужна корректировка. Только теперь, мы делаем выравнивание звука и изображения не с помощью «Audio Skew Correction», а с помощью функции «Frame rate > Change to». Каким образом: очень просто. Если звук отстает, то мы уменьшаем количество кадров, как бы «растягивая» время показа видеоизображения, т.е. замедляем. Например, было 25.000, ставим, 24.998 и т.д. до полной синхронизации. Если звук слишком сильно отстает, например на минуту, то можно не по тысячным долям уменьшать частоту кадров (эффективно при отставании в от нуля до нескольких секунд), а по сотым или даже десятым. Если звук «спешит», то, наоборот, увеличиваем количество кадров в секунду, заставляя видео быстрее «крутиться». Когда все готово, запомните эту получившуюся цифру (например 25.003).

3. Обработка звука. Наверняка многие из вас знакомы со звуковыми редакторами Sound Forge (SF) или CoolEdit (CE). В этих программах есть замечательные функции-эффекты Time Stretch (Временное сжатие). Их мы и будем использовать. (!) Примитивный вариант, если вы уверены на 100%, что, например, видео 25.000, а звук у вас 23.976, и вам не хочется менять видео на 23.976, чтобы сохранить оригинальную дорожку, то вам эти громоздкие программы могут и не понадобиться. С этим легко справится Besweet. А в частности, его пресеты NTSC > PAL, PAL > NTSC и др. Если не вам неохота разбираться с Besweet или BesweetGUI, то просто установите Gordian Knot, откройте его и в последней закладке Encoder, выберите добавить, выберите вашу дорожку (имеется ввиду, что дорожка WAV или AC3, если MP3, то сначала раскодируйте в WAV), выберите Custom Parameters и в нижнем левом углу станет активным combobox с пресетами Besweet'а. Вернемся к нашим баранам. У нас - более сложный случай. Нам необходимо увеличить или уменьшить длительность звуковой дорожки на значение, не равное таким отношениям как 25/23,976 или 23.976/25.000 или 23.970/23,976 и т.д. и т.п. (значения в вышеупомянутых пресетах), а на значение, имеющее расхождение с названными соотношениями. Например, на 25.000/25.003 или даже25.000/25.00375. Чувствуете разницу? Да, тонкая работа.
Итак, SF и CE: Time to stretch, baby!) Достоинства SF - быстрая работа, не портит звук. Недостатки - может быть большая (до 400 мсек погрешность) при сжатии дорожки при стандартной длине фильма 1 ч 40 мин, невозможность выставить тысячные значения (только сотые). Зачем, что, почему - чуть позже.б) CE - очень медленная работа, раз в 5 медленнее SF, портит звук (примерно 4-5 слов, именно слов (!), произносимых диктором, может больше, за весь фильм, могут быть искажены после сжатия).Достоинства: практически нет погрешности - всего лишь до 10-40 мсек за весь фильм! Позволяет работать с тысячными значениями. Я рекомендую в ущерб времени использовать CE - нервов меньше жрет. За весь фильм 4-5 слов переводчик скажет раз в 5 быстрее чем надо (как бы «глотая» окончания, как будто fast and distort фильтр применили) - это ерунда полная, зато вы сможете абсолютно точно, с невидимой глазу разностью, синхронизировать A/V.
Итак, к самому процессу. Помните, последнюю цифру (частоту кадров), которую вы записали? Сейчас она понадобится. Открываем дорожку в CE. Идем в «Effects > Time/Pitch > Stretch».Перед нами окошко Stretch. Выбираем Constant Stretch. Ставим опции High Presision, Time stretch (preserves pitch). Нас должно интересовать, какую цифру нам вводить в editbox «Ratio». Открываем калькулятор и делаем следующее. Если нам нужно сжать звук, тогда большее число делим на меньшее и умножаем на сто, в нашем примере (25.003/25.000)*100, берем три знака после запятой, т.е. «100.012». Это число и вводим в «Ratio». Если нам нужно увеличить звучание дорожки, то наоборот, делим меньшее число на большее, опять умножаем на сто, берем три знака и вводим в этот editbox. Вот и все. Жмем OK и ждем, затем сохраняем в WAV и кодируем обратно в MP3. Можно сразу сохранить в MP3, кому как нравиться. Получившийся файл загружаем опять в VD, и с помощью «Audio Skew Correction» или первой цифры подгоняем, как должно быть. В SF («Process > Time Stretch») в принципе все то же самое, только там нельзя выставить тысячные доли, отсюда и погрешность. Единственное что, там наоборот, если вам надо уменьшить звук, то и выставляете меньшее значение %, если увеличить, то большее ста (оригинала).

4. Совсем сложно. Звук с видеокассеты. С ТВ. Синхронизировали первую и последнюю точку. Все сделали. Ан нет. В середине-то звук оказывается отстал, а к концу выравнивается? Как такое происходит? Очень просто: дело в том, что в таких дорожках часто случаются паузы (например, рекламные), а потом когда дорожку резали, то секунду-две пропустили. Что делать: механизм такой же. Отмеряем две точки, первую и последнюю. Ищем, где звук «отрывается», пропадает. Например, на 25 минуте звук резко отстал на 20 секунд. Запоминаем, что там сейчас говорят и время. Все прекрасно. Перегоняем дорожку в WAV. Загружаем в SF или CE. Идем на тот проблемный участок. И с того момента вырезаем 20 секунд времени (или добавляем, например, тишину - «Insert Silence», если звук наоборот, слишком рано). Далее в Загружаем в VD. Выставляем синхрозначения. Проверяем опять. И т.д. пока не будут пройдены все проблемные места. Для сглаживания звука на проблемных участках есть прекрасные фильтры FadeIn/FadeOut. Любой звук можно синхронизировать, это лишь вопрос количества таких проблемных участков, «провалов», и, соответственно, Времени. Успехов. Арифметика рулит :P
0

#2 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 07 Май 2007 - 11:55

Кому как удобнее... Я, например, подгоняю второй звук в АвиСинте. Пример:

PAL=25.000
FILM=23.976 # 30000/30001*0.8
delay_sec=3.4
v = DirectShowSource("Movie.mkv",fps=PAL)
a = WAVSource("out.wav").TimeStretch(tempo=(100.0*PAL)/FILM) #AmplifydB(-5)
return AudioDub(v,a).DelayAudio(delay_sec)

Здесь звук out.wav растягивается на фактор tempo и задерживается на параметр delay_sec. Потом "на лету" (при просмотре avs-файла в любом плеере) юстирую подгоночные параметры, добавляю в нужных местах паузы (на случай, если есть пропущенные сцены), громкость подгоняю и когда меня наконец всё устраивает - выдираю и ужимаю из AVS-скрипта получившуюся звуковую дорогу (можно только вторую, а можно уже смикшированную с английским треком).
0

#3 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 08 Май 2007 - 19:28

НуПогоди

Хотелось бы более подробного описания (чего-куда нажимать и т.д.). Ну и, естественно, какие погрешности при "сжатии"/"растягивании" звука. Под погрешностью я имеюю вввиду конечное расхождение по времени от планируемого:

например длина звука 60.000 - шестьдесят секунд, формат 25.000.
Необходимо превратить его в 23.475, т.е. в 56.340 секунд или
56340 миллисекунд.
В зависимости от используемого софта можно получить и 56.380 и 56.290, т.е. в первом случае погрешность 40 мсек, во втором - 50. Я специально привел пример маленького файла, чтобы было понятнее с цифрами. В реальности на таких длительностях погрешностей обычно не бывает. Погрешности становятся очевидными как раз на больших треках, час-два-три длиной.

Ведь вопрос-то не в удобстве использования софта, а в соотношении затраты по времени/качество конечного файла.
0

#4 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 08 Май 2007 - 20:19

Просмотр сообщенияrplgj (8.5.2007, 16:28) писал:

Хотелось бы более подробного описания (чего-куда нажимать и т.д.). Ну и, естественно, какие погрешности при "сжатии"/"растягивании" звука.
Вечером поэкспериментирую с конкретными цифрами, хотя практика и показывает, что подогнать "голый" голос переводчика под тайминг фильма достаточно с точностью, не превышающей аналогичной точности для субтитров (~0.1...0.2сек). "чего-куда нажимать"? типовой скрипт я вроде привёл, ну а детали зависят от конкретного случая и описывать их особого смысла нет... как из скрипта выдрать звук? как кому удобнее:
0. есть малюсенькая утилита avs2wav > просто сохраняет несжатый звук
1. или в VDM грузить и сжимать ACM-компрессорами (Lame, ACM Vorbis, etc)
2. хоть в VDM > Demux > сжать каким-нибудь BeSweet и обратно домешать к видео.
3. или сразу в AviSynth-based аудиокомпрессор (Diko, BeHappy) - я так обычно и делаю...
Ладно, вечером поиграюсь и завтра выложу цифирь...
0

#5 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 09 Май 2007 - 02:23

НуПогоди

подогнать "голый" голос переводчика под тайминг фильма достаточно с точностью

здесь, возможно, говорится о другой задаче. Если подгонять (накладывать на оригинальный звук) "чистый" голос, то можно пренебрегать и 500 и 1000 мсек погрешностями. А если подгонять аудиодорожку под видео, то необходимо синхронизировать анимацию губ персонажей (lips animation) и звук, издаваемый ими. Первый вариант, определенно, проще.

типовой скрипт я вроде привёл

Есть AVISynth, есть VDM и есть скрипт. Как хочешь так и возись :)
Типового скрипта может быть недостаточно, т.к. нет алгоритма исполнения действий.
Хотя бы укрупненно.

Ждемс...
0

#6 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 09 Май 2007 - 11:50

Просмотр сообщенияrplgj (8.5.2007, 23:23) писал:

НуПогоди

подогнать "голый" голос переводчика под тайминг фильма достаточно с точностью

здесь, возможно, говорится о другой задаче. Если подгонять (накладывать на оригинальный звук) "чистый" голос, то можно пренебрегать и 500 и 1000 мсек погрешностями. А если подгонять аудиодорожку под видео, то необходимо синхронизировать анимацию губ персонажей (lips animation) и звук, издаваемый ими. Первый вариант, определенно, проще.

типовой скрипт я вроде привёл

Есть AVISynth, есть VDM и есть скрипт. Как хочешь так и возись :)
Типового скрипта может быть недостаточно, т.к. нет алгоритма исполнения действий.
Хотя бы укрупненно.

Ждемс...

Повозился. Результаты...
1. Исходник: что попалось под руку, а именно 2Ch АС3 с комментариями к какому-то из фильмов. Взял маленькую утилиту ac3cut и отрезал от этой дороги ровно 1 час (01:00:00.000).

Скрипт:
PAL=25.000
FILM=23.97600

v = BlankClip(length=90000,width=320,height=240,fps=25.000,color=$204020)
a = NicAC3Source("Audio.ac3", 2).TimeStretch(tempo=(100.0*PAL)/FILM) 
v=AudioDub(v,a)

return v+v+v+v+v+v+v+v+v+v

Пояснения (если вдруг кто не знаком с AviSynth):
а) первые две строки - задаём параметры для более удобной работы с коэффициентом сжатия.
б) v = пустой видеострим длиной 90000 фреймов, fps = 25.000 > 1 час
в) импортируем звук командой NicAC3Source, 2 канала и сжимаем звук с коэффициентом PAL/FILM (сотня - в процентах)
г) смешиваем видео и уже ужатый аудиопотоки в один поток v=AudioDub(v,a) длительностью 1 час
д) команда return v+v+v+v+v+v+v+v+v+v повторяет получившееся видео 10 раз, т.е. на выходе должен быть клип с длиной видео 10h и длиной аудио (10h/PAL*FILM )

Метод оценки точности сжатия
a) создаем текстовый файл с приведенным текстом, обзываем его скажем AdjustSound.avs
б) открываем его VDMом
в) лезем в Streams > Audio и смотрим длитеьность аудиопотока (можно и File > FileInfo, но там чуть меньше точность)
г) меняем в скрипте один из параметров сжатия (я игрался с FILM), жмём в VDM клавишу F5 (refresh) и повторяем пункт в) для нового значения коэффициента сжатия

Результаты
а) видео мы не сжимали, оно для всех параметров FILM/PAL остаётся постоянным = 10h
б) сами результаты
# Parameter	In calculator	VDM (StreamInfo)		
# FILM=25.00000	> 36000.0000s	-> 10:00:00.000 
# FILM=23.97600	> 34525.4400s	-> 09:35:25.441 
# FILM=23.97601	> 34525.4544s	-> 09:35:25.453 
# FILM=23.97602	> 34525.4688s	-> 09:35:25.472 
# FILM=23.97603	> 34525.4832s	-> 09:35:25.484 
# FILM=23.97604	> 34525.4976s	-> 09:35:25.496 
# FILM=23.97605	> 34525.5120s	-> 09:35:25.512

в) Пояснения: вторая колонка получена расчетом в калькуляторе = 10h*FILM/PAL, третья - значения, вытащенные из VDM (Streams > Audio).

Вывод: AviSynth обеспечивает точность до 1 аудиосэмпла.

Послесловие
1. Не знаю точно, какой именно алгоритм применяет AviSynth, но точность преобразования явно превышает типовые точности кодеков типа MP3, особенно в режиме VBR.
2. Что делать с полученным аудиостримом, т.е. как его потом вытащить из скрипта? вариантов миллион: а) самый напрашивающийся - все в том же VDM (right click на аудиостриме > FullProcessing > снова right click на аудиостриме, выбрать Compression и ужать ACMами)
б) есть кое-какие программы (BeHappy, DAudioK, avs2wav), которые "кушают" звук из AviSynthовских скриптов и позволяют их сжимать внешними кодеками...
в) в самом AviSynth есть плагин для сжатия звука, называется SoundOut
г) IIRC, в новые версии AviSyntha этот плагин собирались встроить...
0

#7 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 09 Май 2007 - 17:57

НуПогоди

Попробовал ваш способ. Поначалу обрадовался, увидев желаемые цифры в Stream List.
Но когда сохранил сжатый WAV и замиксовал его на оригинальное видео, удивился снова, но с противоположным эффектом. Погрешность составила 900 мсек. (фильм 2ч. 13 мин) !

Может и скорее всего, конечно, руки кривые:

PAL=25.000
FILM=23.975

v = BlankClip(length=200550,width=320,height=240,fps=25.000,color=$204020)
a = WAVSource("C:\!AD\liyttle.wav").TimeStretch(tempo=(PAL/FILM)*100)
v=AudioDub(v,a)

return v


23.975 - это точное значение, при котором в Sound Forge или CoolEdit можно получить одинаковый по длине трек, проверено. Плюс если открыть оригинал видео в VDM, то видно что длина видео 2ч. 13 мин с копейками, а длина аудио 2ч.17 мин с копейками. Т.е. поставив Frame Rate в VDM на 23.975, видео становится 2ч.17мин ... Таким образом находим желаемую цифру. Короче, я об этом выше писал...

200550 - это длина в кадрах оригинала видео

При значении Film = 23.975 погрешность составляет 900 мсек (изображение в конце убегает почти на секунду вперед), что неприемлемо, но самое интересное, что длина (время) трека такая как и должна быть, с точностью до мсек!

И еще интересней тот факт, что если поставить 23.976, т.е. всего на тысячную долю кадра (что при такой длительности видео дает погрешность примерно в 300 мсек), то погрешность уже будет не 900 мсек, а -900 мсек (минус) :) т.е. уже видео отстает к концу почти на секунду.

Т.е. за 1 тыс. кадра погрешность составляет 1800 мсек!

Пробовал и 23.9755 и 23.9752 и 23.9758 - безуспешно. Время WAV'а - меняется как надо, а погрешность округляется до 900 или минус 900.

Что не так?
0

#8 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 09 Май 2007 - 19:29

Просмотр сообщенияrplgj (9.5.2007, 14:57) писал:

Что не так?

Хороший вопрос... Прежде всего, нужны кое-какие уточнения:
1. этот квантовый скачок в 1.8сек, как я понял, для ужатых треков? если "да", вопрос переходит чуть в другую плоскость - кодеки и как с ними воевать... Итак, чем сжималось: прямо в VDM, АCM-ами? какими? cbr/vbr mp3? acm vorbis? танцы с бубном вокруг кодеков (fraunhofer vs lame vs vorbis, etc.) и их параметров (vbr vs cbr), вокруг частоты звука, битрейта и тд. не помогают? если сделать demux, ужать внешним енкодером и микшировать обратно - разница есть?
2. треки микшировались в ави или в матрешку (там несколько иная система синхронизации, по таймкодам)?

PS Вспомнил... Kажется, я уже видел подобные "черную магию и ее разоблачение" на форуме VDuba. Сейчас поищу, может это как раз о том...

[EDIT] Вот здесь phaeron (Avery Lee) часом не об этих проблемах пишет?

PPS. Вечером попробую поиграться сам... Сжимать 10часовой звук и сравнивать его с оригиналом не обещаю, но 1 час - без проблем...
0

#9 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 09 Май 2007 - 20:00

НуПогоди

Если я правильно понял 1 пункт, то я пока пробовал только на WAV PCM. Изначально, да, дорожка была в mp3 CBR, но я ее предварительно перегнал в WAV. По 2-му пункту - в AVI.

phaeron (Avery Lee) часом не об этих проблемах пишет?

насколько я понимаю англ., он говорит о погрешностях при сжатии тем или иным кодеком при смене частоты дискретизации. Если так, то про это-то я знаю, не раз сталкивался. Мне кажется , здесь другой случай.
0

#10 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 09 Май 2007 - 20:17

Просмотр сообщенияrplgj (9.5.2007, 17:00) писал:

Если я правильно понял 1 пункт, то я пока пробовал только на WAV PCM. Изначально, да, дорожка была в mp3 CBR, но я ее предварительно перегнал в WAV. По 2-му пункту - в AVI.

Не важно какой она была "до" (AviSynth так или иначе скармливает несжатое аудио), важно что с ней произошло в VDM, на стадии wav -> что-то в контейнере avi... Еще раз: после того, как дорога была загружена в VDM из AviSynth-а aудиодорожка чем-то сжималась? чем? каким кодеком? и далее по пункту 1...
по пункту 2: что будет в матрешке? зачем это надо: причина может быть не только в кодеке, а и в системе синхронизации контейнера...

Всё... убегаю домой... до завтра
0

#11 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 09 Май 2007 - 20:30

нет, дорожка после не сжималась, загружался AVS-файл в VDM, далее Stream List > Save WAV
0

#12 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 10 Май 2007 - 11:39

Просмотр сообщенияrplgj (9.5.2007, 17:30) писал:

нет, дорожка после не сжималась, загружался AVS-файл в VDM, далее Stream List > Save WAV

Тогда почему здесь "сжатый"?

Просмотр сообщенияrplgj (9.5.2007, 14:57) писал:

Но когда сохранил сжатый WAV и замиксовал его на оригинальное видео, удивился снова, но с противоположным эффектом.

Хотя, ладно... Я вчера поигрался немного и именно с SaveWAV. Что сказать? У меня всё работает как часы, с точностью до последнего знака. Я и прежде никогда не замечал, чтобы после SaveWAV возникали какие-то расхождения. Привожу картинку со стримами
Стрим №1: то, что импортировано непосредственно из AviSynth после сжатия 01:00:00.000 с коэффициентом сжатия 25/23.976 (точное совпадение со значением из калькулятора)
Стрим №2 был получен из первого аудиопотока функцией SaveWAV (разница = 0).
Последующие стримы - после ужатия этого WAVa внешними энкодерами, соответственно
Стрим №3 - OGG Vorbis: энкодером oggdropXPd (quality=4.00)
Стрим №4 & 5 - MP3: экодерами go-go-no-coda и Lame
Стрим №6 - АС3: энкодером на основе libavcodec, встроенным в QuEnc
Различия между длительностями есть, но в районе сотых секунды, для mp3 ошибка (вполне прогнозируемо) больше... Картинку я привёл исключительно из соображений удобства сравнения: т.е. после всех процедур (SaveWAV и сжатий разными кодеками), я снова открыл скрипт VDMом и добавил те стримы, которые были получены из исходного скрипта...

Вывод: "неладно что-то в Датском королевстве", т.е. в настройках твоего VDM...
Методы проверки: аттачу маленькую консольную утилитку avs2wav.exe, которая делает ту же самую операцию - выдирает звук из AVS-скрипта в WAV. Попробуй её и проверь длительность... для сравнения: в моём случае из того же самого AVS-скрипта (25/23.976) она выдрала звук, длительностью 00:57:32.560, т.е. на всего 0.016сек больше, чем это сделал VDM... Если получится похожий результат, будем рыть в поисках того, чего же именно не хватает в твоём VDM. А если не получится, придётся думать дальше. Ой, не хотелось бы ;)

Прикрепленные файлы

  • Прикрепленный файл  Streams.png (35,02К)
    Количество загрузок:: 10
  • Прикрепленный файл  avs2wav.zip (4,76К)
    Количество загрузок:: 11

0

#13 Пользователь офлайн   rplgj Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 9
  • Регистрация: 05 Апрель 07
  • Страна:

Отправлено 10 Май 2007 - 16:49

НуПогоди

Тогда почему здесь "сжатый"?

В том контексте под "сжатый" подразумевалось "сжатый по времени", а не закодированный

Различия между длительностями есть, но в районе сотых секунды, для mp3 ошибка (вполне прогнозируемо) больше... Картинку я привёл исключительно из соображений удобства сравнения: т.е. после всех процедур (SaveWAV и сжатий разными кодеками), я снова открыл скрипт VDMом и добавил те стримы, которые были получены из исходного скрипта...

Прекрасно, а сам-то звук проверил, синхронизацию губ персонажей со звуком? У меня-то цифры тоже получаются верные, о чем я писал выше...

Вывод: "неладно что-то в Датском королевстве", т.е. в настройках твоего VDM...

Сомневаюсь, а с треком - да, попробую поиграться с другим фильмом

аттачу маленькую консольную утилитку avs2wav.exe

спасибо, попробую, отпишусь.
0

#14 Пользователь офлайн   НуПогоди Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Избранные
  • Сообщений: 832
  • Регистрация: 31 Июль 06
  • Страна:
  • Прислал(a) субтитров: 46
  • Своих переводов: 19

Отправлено 10 Май 2007 - 18:51

Просмотр сообщенияrplgj (10.5.2007, 13:49) писал:

Прекрасно, а сам-то звук проверил, синхронизацию губ персонажей со звуком? У меня-то цифры тоже получаются верные, о чем я писал выше...
Проверил... Если есть интерес, приведу даже некие визуальные доказательства... Кратко, что делалось? Был взят произвольный фильм (в данном случае 1941.avi, 23.976fps), из него я вымесил звук в SoundAsIs.mp3 (24KHz, stereo) и написал два скрипта:
№1
v = AviSource("1941.avi",audio=FALSE).ConvertToRGB
a = DirectShowSource("SoundAsIs.mp3",fps=23.976).TimeStretch(tempo=100.*25./23.976).TimeStretch(tempo=100.*23.976/25.)
return AudioDub(v,a).AudioGraph(10)

Кратко, видео берётся из avi, аудио из mp3... потом аудио дважды преобразуется с коэффициентом 25/23.976 и 23.976/25. Т.е. двойное преобразование должно оставлять звук на том же месте, что и при полном отсутствии команды TimeStretch, согласен? А если преобразование врёт, то вероятность, что это враньё, повторённое дважды, компенсирует друг друга - практически 0. В-общем, второй скрипт отличался от первого отсутствием двойного преобразования звука.
№2
v = AviSource("1941.avi",audio=FALSE).ConvertToRGB
a = DirectShowSource("SoundAsIs.mp3",fps=23.976) 
return AudioDub(v,a).AudioGraph(10)

Теперь, что такое AudioGraph? Это фильтр для AviSyntha, который визуализирует интенсивность звука (ради него собственно и пришлось конвертировать видеов RGB). Его единственный параметр - сколько фреймов "до" и сколько "после" визуализировать. Из описания
The current frame's audio is displayed in the centre of the video frame in [b]bright green[/b], while audio for preceding and following frames is displayed in darker green.

Т.е. светлозелёный отрезок в центре каждого из снапшотов = 1 фрейм, т.е. ~42ms. Что дальше? Потыкался по фильму, где-то поближе к концу и нашёл место (фрейм под номером 180210, во времени это 02:05:16.259), которое можно легко опознать визуально. После чего загрузил по очереди два скрипта и сделал снапшоты... Их-то я и привожу... Сравнив несложно заметить, что расхождение между началом шума порядка длины светлозелёного отрезка т.е. 42ms. И это на 2х часах... никаких 0.9сек, хоть застрели, я не вижу...

[EDIT]Сейчас подумал и, дабы не оставлять сомнений насчет взаимной компенсации ошибок от двух последовательных преобразований (точнее отсутствия оной), сделал в скрипте одно преобразование TimeStretch(tempo=25/23.976), пересчитал на калькуляторе на какой фрейм должен прийтись этот звуковой скачок ( 180210/25*23.976 = 172828.5984 ) и сделал снапшот там... Естественно, картинка под звукой линией уже другая, но звук всё тот же... Добавляю и её...

Прикрепленные файлы


0

#15 Пользователь офлайн   Nataliya Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 65
  • Регистрация: 17 Январь 10
  • Пол:Женщина
  • Страна:

Отправлено 24 Февраль 2013 - 20:24

а где для субтитры описать как и где настроить чтобы соответствующие со временем??? а бывает то отстает и вперед субтитры! а там наверху уж больно описание для звука! а мне нужно для субтитры!
0

#16 Пользователь офлайн   Drunkenmunky Иконка

  • Иконка
  • Отправить ЛС
  • Группа: Members
  • Сообщений: 141
  • Регистрация: 24 Май 11
  • Пол:Мужчина
  • Город:Николаев
  • Страна:

Отправлено 24 Февраль 2013 - 20:53

Цитата

а где для субтитры описать как и где настроить чтобы соответствующие со временем?


Это читали?


0

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему