«SA SYNC»

Stas Fomin

SA: продвинутая синхронизация

Задание «SA INIT» уже выполнено? Если нетSA INIT


Берем

  • запись с двух камер
  • скринкаст

Синхронизируем

  • по звуку
  • событию (на глаз) + по звуку

Делаем «Матрешку»

Исходники

Создаем тестовый проект

sa-test4sync-cam.avi
cam1
sa-test4sync-keyboard.avi
cam2
sa-test4sync-screencast.avi
screen1

Потоки

Потоки в SA. Синхронизация по звуку.svg
SA синхронизация по звуку.png
Потоки в SA. Синхронизация по звуку.svg

start_time.py

REFERENCE_STREAM={}
 
#Uncomment this (and modify appropriately) if you want to time linking to other stream
#execfile(ut.get_script_dir() + '/../cam1/start_time.py', globals(), REFERENCE_STREAM)
 
diff_ms = 0
if 'START' in REFERENCE_STREAM:
   diff_ms = REFERENCE_STREAM['START']   
 
# Linking by some visible event
their_time_ms = ut.time2ms('1:23')         # Time of the event on reference stream
my_time_ms = ut.time2ms('53:45')            # Time of the event on visible stream
 
diff_ms += int(my_time_ms - their_time_ms)
diff_ms += 1234
 
START = diff_ms
AVS = "global TRIM_START_MS  = %(diff_ms)s " % vars()

cam2/…

cam2/audio.avs

#Audio AVS-script, for opening with WAVSource function.
#Time-adjusted according to start-time.py
 
import("common.avs")
audio  = AVISource("source.py.avs").KillVideo()
 
#Uncomment following lines, if you want to use external audio file.
import("start_time.py.avs")
#audio  = WavSource("source.avs.wav")
audio  = audio.TrimAudioMS(TRIM_START_MS)
 
audio

screen1/audio.avs

#Audio AVS-script, for opening with WAVSource function.
#Time-adjusted according to timediff.py
 
import("common.avs")
import("start_time.py.avs")
 
#[Un]comment following lines, if you want/not want to use internal audio channel.
audio  = AVISource("source.py.avs").KillVideo()
 
#[Un]comment following lines, if you want/not want to use external audio file.
#audio  = WavSource("audio.wav")
 
#[Un]comment following lines, if you want/not want to use screen2log datas
#import("screen2log_audio.avs")
#audio  = screen2log_audio()
 
 
audio  = audio.TrimAudioMS(TRIM_START_MS)
audio

Попробуйте синхронизовать!

Правильные ответы (мои, смотреть файлы start_time.py.avs):

cam1
0
cam2
19680
screen1
12456

Синхронизация:

  • камера/screencast: ±секунда — ОК
  • жесты/речь: ±800мс — ОК.
  • губы/речь: ±150мс — ОК (лучше ±50мс).
  • сложение двух звуковых потоков — ±25мс

Задания

Бонус задание
синхронизируйте
  • относительно сam2
  • относительно screen1
  • Проверьте синхронизацию с разной глубиной --start
  • Соберите матрешку

Должно получится …

Устройства ввода, эмоции, направление взгляда

SeminarAssembler для UX sessions.png
SeminarAssembler для UX sessions-2.png
SeminarAssembler для UX sessions-3.png

ВСЕ!

Этого достаточно:

  • Монтировать 95% внутрикомпанейских видео.
    • Не приходя в сознание!
  • MKV-публикуется на файл-сервере.
  • Ссылки на отрывки с вики-системы.