Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

воскресенье, 16 ноября 2014 г.

Как сделать слайдкаст

Есть аудиозапись доклада в mp3 и есть слайды в формате ppt. Из ppt можно проэкспортить слайды в png/jpeg и дальше с ними мы будем работать. Итого у нас есть папка с файлами доклад.mp3 и Slide1.jpg - Slide20.jpg. Как из них сделать слайдкаст? Слайдкаст - это видеозапись выступления, где слышно докладчика, но видно только его слайды. Slideshare имеет такую фичу в платной версии, но мы жеж умнички? - сами все сделаем (а чуть позже доберутся руки и фичу-намучу). 

Итак. Раньше мы уже проходили avisynth и я надеюсь без особого труда будет его установить на комп и создать в той же папке файлик с расширением 1.avs и содержимым
Внимание! Существует более удобная версия скрипта. Смотрим тут

# грузим в переменную a аудиофайл
a = DirectShowSource("доклад.mp3")

# загрузим первый слайд в переменную i сделав из него видеоряд с частотой 23.976 и длинной 2080 кадров
i = ImageSource("Slide1.jpg", fps=23.976, end=2080)

# так же для второго слайда и так далее
i = i + ImageSource("Slide2.jpg", fps=23.976, end=888)
i = i + ImageSource("Slide3.jpg", fps=23.976, end=1614)
i = i + ImageSource("Slide4.jpg", fps=23.976, end=1733)
i = i + ImageSource("Slide5.jpg", fps=23.976, end=2533)
i = i + ImageSource("Slide6.jpg", fps=23.976, end=1126)
i = i + ImageSource("Slide7.jpg", fps=23.976, end=3953)
i = i + ImageSource("Slide8.jpg", fps=23.976, end=1566)
i = i + ImageSource("Slide9.jpg", fps=23.976, end=2442+1770)
i = i + ImageSource("Slide10.jpg", fps=23.976, end=2000)
i = i + ImageSource("Slide11.jpg", fps=23.976, end=1800)
i = i + ImageSource("Slide12.jpg", fps=23.976, end=1800)
i = i + ImageSource("Slide13.jpg", fps=23.976, end=2240+172)
i = i + ImageSource("Slide14.jpg", fps=23.976, end=29779-27730)
i = i + ImageSource("Slide15.jpg", fps=23.976, end=31942-29779)
i = i + ImageSource("Slide16.jpg", fps=23.976, end=36023-31942)
i = i + ImageSource("Slide17.jpg", fps=23.976, end=39666-36023)
i = i + ImageSource("Slide18.jpg", fps=23.976, end=42056-39666)
i = i + ImageSource("Slide19.jpg", fps=23.976, end=44356-42056)
i = i + ImageSource("Slide20.jpg", fps=23.976, end=49302-44356)
i = i + ImageSource("Slide21.jpg", fps=23.976, end=52906-49302)

# ресайзим слайды
i = i.LanczosResize(764, 480)

# чтобы секономить время слушателя, включаем скорость 150%
a = a.TimeStretch(tempo=150.0)

# и в конце концов смерджим два потока
AudioDub(a, i)

А потом откроем в VirtualDub или любом другом редакторе, чтобы перекодировать в какой-то экономный формат. На выходе (из за того, что видеоряд меняется редко) мы будем иметь небольшой файл. Я рекомендую сжимать в контейнер mp4 каким-то популярным кодеком - чтобы потом можно было воспроизвести в блоге. Ну или можно делегировть это ютьюбу, залив туда сырец в большом разрешении - все остальное он сделает сам.

Что может смутить в скрипте, так это magic numbers указанные в аргументе параметра end функции ImageSource. Подбирается он вручную (пока) с помощью VirtualDub прослушивая доклад с целью поиска места, где слайд надо переключить. На будущее я хочу сделать либо кликер с возможностью трекать милисекунды когда был переключен слайд, либо сделать такую же фичу, как в SlideShare, где все на драгэндропе.


Пользоваться сторонними сервисами, типа SlideShare программистам я не рекомендую и вот почему. Когда-то я воспользовался этой фичей у SlideShare и даже очень обрадовался что есть такая фича. Запостил в блоге embed и радовался каждому 1000-му просмотру. Но потом slideshare захотел денег и просто изъял видяшку из эфира оставив только ppt. Всю работу похерили - обидно. С тех пор я решил, что весь контент буду хранить у себя на блоге+дропбокс. С ним тоже были проблемы, но после проплаты готового аккаунта все наладилось :) Отвлекся я. Что хотел сказать - если ты программист, то будет любопытно написать свой аналог, который потом сможешь кастомизировать как хочешь. А если выбрал использовать чужой сервис - будь готов к будущим неожиданностям.

Как-то так


Комментариев нет:

Отправить комментарий