Как вставить видео в презентацию Beamer

Если хочется сделать презентацию более эффектной, можно в презентацию вставить видео. Вставка видео в Powerpoint дело несложное, а если нужно это сделать в LaTeX и beamer? Нет проблем! Нас спасёт mencoder и пакет расширений movie15.


Создание видео из нескольких изображений
Первым делом, мне потребовалось создать видео. Дело в том, что в моём проекте многое происходит в движении, так что единственная возможность продемонстрировать это - вставить в презентацию видео. Но для начала его надо ещё создать.

Допустим, у нас есть много JPEG-файлов и мы хотим закатать это всё в один видеофайл. В этом нелёгком деле нам поможет mencoder, который должен быть в репозиториях любого уважающего себя дебианщика:

aptitude install mencoder
После этого копируем все JPEG-файлы в какой-нибудь каталог на всякий случай, переходим в этот каталог и даём команду в терминале:
mencoder "mf://*.jpg" -mf fps=10 -o test.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800
Всё это в одну строку. Как всегда, полезные параметры выделены цветом: запатентованным©, не имеющим аналогов в мире™ способом (лицензионные отчисления автору обязательны!).
  • "mf://*.jpg" означает, что в качестве исходников будут браться JPG-файлы. Их лучше занумеровать последовательно.
  • fps=10 видео будет с частотой 10 кадров в секунду.
  • -o test.avi имя видео файла будет .
  • vbitrate=800 битрейт, качество видео (800 разумный компромисс, на 400 артефакты сжатия уже заметены).
Здесь есть важный момент: имена JPG файлов должны идти последовательно, что в общем не очень тривиально делается в MATLAB. Грязный хак, который генерирует такие последовательные имена, предлагается для закидывания помидорами ниже:

function viz_pictures_for_moivemaker(figure_to_record);
c = clock; %% get time from system clocks to generate filenames.
kmvtimersecond = num2str(round(10*c(6)));

if (length(kmvtimersecond) < 3)
kmvtimersecond = strcat(kmvtimersecond,'0');
end

kmvtimer = strcat(num2str(c(3)),num2str(c(4)),num2str(c(5)),kmvtimersecond );

kmvPrintName = strcat('movie', kmvtimer, '.jpg'); %% getting additional name suffix. Multiplication by 10 is important, otherwise filenames will be of different length.

%%%%%% <------------ Printing the window

print(strcat('-f',num2str(figure_to_record)), '-djpeg', kmvPrintName); %% printing with EPS driver and 600DPI resolution
%%%%%% <------------ Printing the window

close(figure_to_record);
%% close the window been printed.

Это выдаёт записывает графики в JPEG с именами вида:

movie141632149.jpg
movie141632156.jpg
....
movie141632164.jpg

Не очень изящно, но работает. В общем, долго ли, коротко, но мы записали видео, а теперь хочется вставить это видео в презентацию Beamer.


Как вставить видео в презентацию Beamer?
Здесь нас выручает пакет расширений movie15.sty свежую версию которого забираем на CTAN: movie15.zip . Распаковываем его в каталог, где лежит наше видео и где будем ваять документ\презентацию с видеофайлом. Стилевой файл movie15.sty
латеховский документ present.tex, в которое будет вставлен ролик, и сам видеофайл test.avi должны быть в одном каталоге.

Далее используем рабочий пример [скачать здесь]:
\documentclass[12pt,landscape]{article}
\usepackage{geometry}
\geometry{verbose,letterpaper}
\usepackage{movie15}
\usepackage{hyperref}

\begin{document}
Here is the movie below.

\begin{figure}[ht]
\includemovie[
poster,
text={\small(Title for the video)}
]{0.5\linewidth}{0.5\linewidth}{test.avi}
\end{figure}
\end{document}
Главная команда здесь это, конечно же, \includemovie[ ]
Она вставит наш видеоролик как картинку, при щелчке на которой запускается проигрывание видео. Имя файла указывается вместе с расширением. В неактивном состоянии отображается только первый кадр.

Для того, чтобы сгенерировать PDF-файл, использовать желательно только PDFLATEX вот так:
pdflatex present.tex
В конце он нам должен сказать, что всё у него получилось и PDF скомпилирован. Всё, открываем файл энтерпрайзным Adobe Acrobat Reader версии не ниже 7.0 и наслаждаемся.
Теперь ложка дёгтя в этой бочке мёду. В этих ваших пионерских лялексах видео отображаться не будет и проигрываться тоже :-) Во всяком случае, ни Evince 2.22, ни kpdf 0.5.9 сие не работает. Нужен Ъ-ынтырпрайз Adobe Reader 7 и выше, работающий на серьёзном продакшне типа Windows и MacOS X. Говорят, что okular уже научили играть видео, но у кого ж он есть-то...
Важно то, что этот метод позволяет вставить видео в презентацию полностью, то есть прямо внутрь PDF-документа. На что название формата (Portable Document Format) как бы неиллюзорно намекает нам. Любопытный читатель может сам открыть PDF файл в любимом текстовом редакторе и узреть что-то типа:
%PDF-1.4
5 0 obj
<< /S /GoTo /D [6 0 R /Fit ] >>
endobj
18 0 obj << /Length 163 /Filter /FlateDecode >>
stream
тили тили трали вали
endstream
endobj
6 0 obj << /Type/EmbeddedFile/Subtype (video/avi) /Length 94394 /Filter /FlateDecode >>
stream
туттипапотоквстрашныхсимловах

/ID [ ] >>
startxref
109718
%%EOF
Так что теперь, в отличие от вордоводов, наше видео не отвалится и не будет битых ссылок на неиграющие ролики.

Ссылки в тему:
http://electron.mit.edu/~gsteele/ffmpeg/
http://darkwing.uoregon.edu/~noeckel/PDFmovie.html

22 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

Ух ты! Спасибо, очень интересно.

virens комментирует...

@Анонимный комментирует...
Ух ты! Спасибо
Пожалуйста. Мне тут предстоит семинар делать, и надобно было вставить красивое видео в beamer-презентацию. Собственно, по мотивам сего и пост.

Анонимный комментирует...

Насколько я помню, в матлабе была штатная функция для записи видео, и я даже ею пользовался.

Кроме того, советую прочитать help sprintf, чтобы больше так не мучаться с strcat.

>Говорят, что okular уже научили играть видео, но у кого ж он есть-то...

Внезапно, это просмотрщик кед по умолчанию в текущем стейбле :)

P.S. Когда же это чудо былокодинга под названием blogger научится понимать openid? Иногда кажется, что даже джумла была бы лучше...

ziodmitry комментирует...

Кстати, по поводу читалок pdf: недавно понадобилось заполнить формы в документе - okular и evince не справились. В поисках чего-то другого наткнулся на "ентерпрайз" Adobe Reader под линукс, в котором формы нормально заполнились. Его для просмотра видео в презентациях не пробовали?

virens комментирует...

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

Кроме того, советую прочитать help sprintf
О, спасибо! А то я по Си-шной привычке fprintf пользую.

Внезапно, это просмотрщик кед по умолчанию в текущем стейбле :)
Нету у меня кед. Босоногий я :-) Только IceWM.

Когда же это чудо былокодинга под названием blogger научится понимать openid?
Анонимус, ты не прав. Оно, во-первых, не быдлокодинг, а во-вторых, openID понимает и даже (после допиливания шаблона) может быть сервером opneID.

Иногда кажется, что даже джумла была бы лучше...
Надо с хостингом отдельно мучаться. А тут не надо. Ткнул и поехали :-) Ну и потом, вроде этот адрес уже примелькался, а я стал ленивым...


@ziodmitry комментирует...
Кстати, по поводу читалок pdf: недавно понадобилось заполнить формы в документе - okular и evince не справились.
Я ж говорю - пионерия красноглазая этот лялех :-)
На самом деле - неужели это так сложно реализовать в Okular!? Нет, чтобы в КДЕ4 заняться таки функционалом - так ведь нет, они пилят одни свистелки, блекджеки и бубенчики :-))

В поисках чего-то другого наткнулся на "ентерпрайз" Adobe Reader под линукс
Этот этерпрайз мне по какой-то причине в своё время сделал так, что kpdf потом открывал только пустые документы. Такой хоккей нам не нужен.

Его для просмотра видео в презентациях не пробовали?
Пробовал, конечно. Только под нормальной продакшн-виндой. Там всё играет и поёт. Не быть лялексам на десктопе, не быть! :-)

Анонимный комментирует...

>Оно, во-первых, не быдлокодинг, а во-вторых, openID понимает

Если бы оно понимало openid, я бы не был анонимусом.

openid у меня есть и работает (всякие тесты вроде http://www.wasab.dk/morten/2007/11/openid/ это подтверждают). Но blogger принимает только некоторые openid (похоже, под каждого популярного провайдера команда гуглоиндусов писала свои костыли, вместо того, чтобы просто нормально реализовать спецификацию протокола). Так что - быдлокод, тут все очевидно.

morikoff комментирует...

Очень интересный вариант. Надо использовать. Спасибо.

MORiKOFF комментирует...

однако я испытал
и оно работает это ваше openID :)
не ругайтесь

iv_vl комментирует...

Михаил, рад вам сообщить, что этот Beamer-пост намного позитивнее предыдущего! Linux-аналоги Adobe Reader удручают, при том, что анимацию в pdf можно делать давно. Например, в Asymptote. Вот что мешает сделать поддержку в том же okular, когда asy-графика давно в штатных средствах kile? Да и kile под 4й размер кед еще только бета. Вы бы выложили результаты своих трудов, чтобы проверить с okular. Может не так он и плох?

Minoru комментирует...

Ай virens, ай телепат… Мне как раз на следующий понедельник нужно сделать презентацию с видео, так что ты более чем вовремя :) Теперь-то уж я им всем докажу, что Beamer круче всех этих ихних павырпоинтаф и прочего. Спасибо!

P.S. И да — странно, но очепяток я не нашёл. То ли статья слишком увлекательная, то ли ты я старею…

Анонимный комментирует...

По моему опыту (пробовал все варианты по двум ссылкам, приведённым в конце поста) не следует рассчитывать что акробат (новейший или какой-то) вас спасёт на виндовозе, который обычно предлагается оргкомитетом. Наиболее надёжно делать отдельный растровый фильм и вызывать через гиперссылку внешний скрипт, который будет вызывать внешний плеер. Тогда на месте можно будет подправить команду для этого самого плеера, если машина чужая.

Кстати, у меня aptitude в lenny mencoder'а не видит, а только ffmpeg. Где он лежит у уважающих себя дебианщиков?

Paul Rufous комментирует...

debian-multimedia.org

virens комментирует...

@Анонимный комментирует...
Если бы оно понимало openid, я бы не был анонимусом.
Ну не знаю. У меня понимает. Блоггеровский опенИД у меня используется во многих сайтах, хоть битбакет что ли.


команда гуглоиндусов писала свои костыли
Там ещё и белые люди есть. Впрочем, я тут у одного рассового американского профессора в матлабовском коде нашёл вот что:

if (1==0) %% do test function

"Ох шит!" - сказал я, поперхнувшись кофе и подавившись ещё французской булкою. :-)

@MORiKOFF комментирует...
однако я испытал и оно работает это ваше openID не ругайтесь
Дык я ж говорил - в Гугле ещё остались истинные белые арийцы. :-)

@iv_vl комментирует...
Михаил, рад вам сообщить, что этот Beamer-пост намного позитивнее предыдущего!
На удивление, по movie15 документации больше, чем на весь beamerposter. Что радует.

Linux-аналоги Adobe Reader удручают
Мне вроде кедоводы говорили, что ихний Okular из последней pre-alpha-nightly-builds вроде как проигрывает видео. Но я слишком стар для таких развлечений, как конпеляние КДЕ.

Вы бы выложили результаты своих трудов
А всё ж в посте. Там ещё архив добавил, но пока без видео. Оно слишком большое, попробую найти меньше.


@Minoru комментирует...
Ай virens, ай телепат Мне как раз на следующий понедельник нужно сделать презентацию с видео, так что ты более чем вовремя :)
Вот видишь, как подфортило. А я думал, какой бы баян выкатить, чтоб не слишком бородатый :-)

Теперь-то уж я им всем докажу, что Beamer круче всех этих ихних павырпоинтаф
Он круче. Это факт.

И да — странно, но очепяток я не нашёл.
У меня спелчекера больше нету - на фирефокс английский перешёл. И энтерпрайз-подписка на ispell в Дебиане кончилась :-)

@Анонимный комментирует...
По моему опыту (пробовал все варианты по двум ссылкам, приведённым в конце поста) не следует рассчитывать что акробат (новейший или какой-то) вас спасёт на виндовозе
У нас работает. По крайней мере, дважды запускался.

Наиболее надёжно делать отдельный растровый фильм и вызывать через гиперссылку внешний скрипт
Эээ... не, не айс. Вот это-то и отваливается чаще всего. У нас кодеков не ставят в комплекте с виндой.

Кстати, у меня aptitude в lenny mencoder'а не видит, а только ffmpeg. Где он лежит у уважающих себя дебианщиков?
В репозиториях debian-multimedia вестимо. Копирасты не позволяют включать в состав.

Sergey Kishchenko комментирует...

Добавлю, что линуксоид, лишенный ненужных страхов, вполне может воспользоваться и Adobe Acrobat и под линухом. Я об этом писал полтора года назад.

cramur комментирует...

опечатка есть в названии функции, но автор вообще грешит путать буквы местами.

virens комментирует...

@Sergey Kishchenko комментирует...
Добавлю, что линуксоид, лишенный ненужных страхов, вполне может воспользоваться и Adobe Acrobat и под линухом.
Страхи есть, и вполне обоснованные. Мне девятый адобовский акробат под Дебианом сделал так, что ПДФ просматривает только он, а другие открывают "пустой" документ. Исправить это было непросто.


@cramur комментирует...
опечатка есть в названии функции
cramur, хорошим тоном считается намекнуть автору, в какой именно :-)

но автор вообще грешит путать буквы местами.
Но не ошибается только тот, кто ничего не делает. (C) В. И. Ленин, "Под Знаменем Марксизма" № 3, март 1922 г.

Rammlied комментирует...

А у каждой картинки может быть своя длительность показа?

Battle Coder комментирует...

> Кстати, по поводу читалок pdf: недавно понадобилось заполнить формы в документе - okular и evince не справились.
Очень странно.. буквально пару месяцев назад заполнял формы в pdf okular - он очень неплохо с этим спрааился. УМВР ЧЯДНТ?
> Всё, открываем файл энтерпрайзным Adobe Acrobat Reader версии не ниже 7.0 и наслаждаемся.
А как быть, если энтерпрайзного адобе нет? Есть, к примеру, вышеозвученный okular/evince - они откроют такую презентацию нормально? pdf ведь всё-таки portable...
А как foxit reader под той же вендой?

Да... и видеофайлы со звуком тоже будут работать? (при наличии колонок, разумеется).

iorik комментирует...

вот тут http://www.ctan.org/tex-archive/macros/latex/contrib/beamer/doc/beameruserguide.pdf очень подробный мануал по бимеру (на английском). По теме вставки видео читать со стр. 135 (описывается пэкэдж multimedia).

Анонимный комментирует...

Хотела бы дать совет для людей которые будут делать презенацию:появилась очень прикольная программа для Power Point презентаций.С ее помощью можна задавать вопросы публике и получать мгновенные ответы которые появятся на слайде через 1 минуту. И так вместо скучного монолога получается живой диалог. Кому интересно, www.shakespeak.com

Zoresvit комментирует...

Хотел сделать такую презентацию с видео на конференцию в университете для большей наглядности. Провозился часами и в итоге забросил эту идею. PDF создался отлично, без задоринки, все как описано в статье. А вот с просмотром проблемы так и не решились. Даже последняя версия Ънтерпрйзного Adobe Reader 10.1.1 под нативной виндой согласилась запустить только одно видео из двух и только после "Да, я, блин, доверяю этому PDF файлу".

Всей кухни со спецификацией pdf я не знаю, но то ли спецификация позорная, то ли программисты ленивые — вероятность успешно открыть презентацию со встроенным видео стремится к нулю. А ведь очень полезная возможность, порой.

Для себя решил, что лучше пока отдельно видео, отдельно презентацию, хоть и неудобно.

Анонимный комментирует...

Чтобы видео читалось везде очень ВАЖНО ПЕРЕКОДИРОВАТЬ AVI
mencoder -ovc lavc -oac lavc -ffourcc DX50 -o

После отчаянных часов поиска в ночь перед презентацией каким-то чудом нашел это но Gentoo wiki.

The -ffourcc DX50 option is included because although the video produced is an MPEG4, the default value is FMP4, which is not widely recognised. A header with DX50 claims that the video is DivX 5 (hence MPEG4) compatible and should therefore play on any media player that can play MPEG4 video. It may be worth it to adding this as a default in your mencoder config, particularly if you mostly encode this type of video.

Если, например, файл из ютуба, можно сразу

mencoder input.flv -ovc lavc -oac lavc -ffourcc DX50 -o output.avi

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

Подписаться на RSS-ленту комментариев к этому посту.