我可能在这里重复了老生常谈;但我希望大家能原谅我,因为我至少有一个 Latex MWE,还有一些关于软件包的笔记:)
。事情是这样的:很长一段时间以来,我一直在寻找某种平台,在那里我可以编写文本脚本,最终将其变成视频编辑(Linux 中的命令行视频编辑(剪切、连接和预览) - 超级用户);我认为 Latex/PDF 很有潜力。
与使用animate
[关闭]但是,我并不打算使用 Adobe Reader 作为查看器/播放器。相反,我感兴趣的是,基本上,将 Latex 或 PDF 格式视为定时演示的“容器”,其中包括视频 - 我需要的是一个脚本或程序,它可以“解析”容器,并最终以预定的每秒帧速率生成图像序列。也许最好通过一个例子来讨论这一点;因此,使用下面的 MWE - 它使用beamer
、animate
和media9
- 并截取 Adobe Reader 全屏性能的屏幕,我获得了这个动画 .gif (带有注释的较长的 MWE 位于https://gist.github.com/anonymous/e6b7051cf270594d2b38以及关于https://vid.me/QZrL(您也可以从此处下载 .mp4 版本,需要 JavaScript)):
我认为很明显,Adobe Reader 不能保持视频的帧速率(特别是因为例如{animation}
在 PDF 中使用 JavaScript 计时器进行动画处理;尤其是在较旧的 Linux 中,例如 Ubuntu 11.04,我在其中进行了屏幕截图)。这就是为什么我希望有一个工具可以保留上述视频的这些属性:
- 幻灯片(帧)时长
- 过渡效果和持续时间
- 动画
- 嵌入视频的帧精确显示。
有了它,我可以导出一个“基本视频”,然后将其加载到视频编辑器中;然后可能在编辑器中将原始嵌入视频覆盖在其上,然后导出“最终视频”。首先,我会想象一个可以解析 PDF 并导出图像序列的工具,如以下 shell 伪代码所示:
mockPdfRender --framerate 24 --in test.pdf --out imgseq/%05d.png
但是,该工具需要“知道”例如,这个 5 页 PDF 应该渲染成 1.5+1.5+2.5+5.5+1.5 = 12.5 秒;@ 24 fps = 300 幅图像;而且由于这些工具中的许多都依赖于嵌入式 JavaScript,因此我认为这会很难。另一方面,如果在 和 中实施更改,这样我就可以在我的 Latex 文件中编写指令,那么可能就更有{beamer}
可能{animate}
了{media9}
:
\documentclass{beamer}
\mockPfdRender[framerate=24]{} % the directive
\usepackage{media9}
\usepackage{animate}
...
... 遇到此命令时,它将指示 Latex 导出 PDF,不是 5 页,而是 300 页,每页包含动画的一帧。在这样的 PDF 上,我可以简单地使用 ImageMagick 的convert
:
convert -density 100 test.pdf test-%05d.png
... 从该 PDF 的每一页生成一个.png
图像;给我一个精确到帧的图像序列,然后我可以将其导入到视频编辑器(或ffmpeg
)中,并从中生成视频。
因此,正式来说,我的问题是:Latex 软件包中是否有允许此类操作的工具?如果没有,是否有可能实现 - 以便它在 MWE 上工作(即,跨越和beamer
)?此外,还有一些子问题:animate
media9
- 如何了解
{beamer}
幻灯片上动画和媒体的定位? - 在 中
{media9}
,有没有办法在给定时间开始播放视频,并在稍后打开带有视频的幻灯片(页面)时自动停止它? - 在使用 pdflatex 等注入 JavaScript 以实现页面级事件,
\pdfpageattr{/AA << /O << /S/JavaScript ...
用于在打开 PDF 的所有/任何页面时设置 JS 监听器;有没有办法将其限制到单个页面(除了编写 JSif(..){..}
子句) - 有什么方法可以
{media9}
与annotRM.callAs()
JS 命令配合使用(见下文)?
除此之外,这里有一些关于我的平台上的 MWE 的说明:
- 按照有人在 Linux 中成功播放 Acrobat 中嵌入的电影吗?,我不得不使用 Adobe Reader 9.4.1 来播放 PDF 格式的视频;显然该版本包含一个嵌入式 Flash Player 9,后来被删除了(后来
acroread
显然需要在系统上安装一个独立的 Flash Player) \movie
from 包{multimedia}
根本不起作用;必须使用\includemedia
from{media9}
- 使用
\includemedia
根本VPlayer.swf
不起作用;必须使用VPlayer9.swf
(显然是因为嵌入了 Flash Player 9) \includemedia
有声电影导致9.4.1在退出幻灯片时acroread
冻结(等待),除非我在 ALSA 中指定了我的默认卡:pthread_join()
~/.asoundrc
pcm.!default { type hw #must have type card 0 #must have, else "card is not defined" }
使用此规范,
acroread
在播放视频的幻灯片中一次进入和退出后仍可继续,但在第二次返回幻灯片并播放视频时将冻结。冻结后,acroread
无法正常关闭,killall -9 acroread
需要- 只有
{beamer}
可以在9.4.1\transdissolve
中充当过渡;其他的喜欢或不喜欢acroread
\transsplitverticalout
\transwipe
callAS
处理视频的 JS 命令{media9}
(如annotRM['myvideo'].callAS('play')
)在acroread
9.4.1 中会默默失败 - 并破坏该处理程序中的所有后续 JS 命令;因此,{hyperref}
不能\PushButton
用于定位视频- 唯一可以定位
{media9}
视频的\includemedia
是{media9}
带有\mediabutton
参数[mediacommand=myvideo:seek [(32.1)],]
的 - 这不仅包括 JavaScript,还包括实际的 PDF 文字,例如/CMD << /C (seek) /A [(32.1)] >> /S /RichMediaExecute
- 但是,在全屏模式下
\mediabutton
无法在 9.4.1 中渲染(请参阅上面的屏幕截图,我单击了“测试”按钮旁边的空白处以在视频中搜索)acroread
其他参考:
好吧,就是这样 - 这是 MWE:
\documentclass{beamer}
% \usepackage{multimedia} % \movie
\usepackage{media9}[2013/11/04] % ‘media9’ package replaces the now obsolete ‘movie15’ package.
\usepackage{tikz}
\usepackage{animate}
% make as "plain Latex" style/theme for Beamer as possible
\usetheme{default} % empty
\usefonttheme{serif} % computer modern font
\setbeamercolor{structure}{fg=black} % reset colors
\setbeamertemplate{navigation symbols}{}%remove navigation symbols
% centered frame title
\setbeamerfont{frametitle}{size=\large,series=\bfseries}
\setbeamertemplate{frametitle}{ % changes all \frametitle
\begin{centering}
\insertframetitle
\par
\end{centering}
}
\def\choicetransition{\transdissolve[duration=0.5]}
\begin{document}
\title{Testing a timed presentation, with animation and video}
\author{My Author}
\date{2015}
% slide 01
\frame{ \choicetransition \transduration{1.5} %
\titlepage %
}
% this executes on opening all subsequent pages; but...
\pdfpageattr\expandafter{\the\pdfpageattr /AA <<
/O << /S/JavaScript /JS (
if (this.pageNum==3) {
ret = annotRM['myvideo'].callAS('play'); % ... does not work
}
) >>
>>}
% slide 02
\begin{frame}[plain] \choicetransition \transduration{1.5} %
\begin{center}%
\Large
Hello there\\[1em]
Just trying a plain old frame out
\end{center}%
\end{frame}
% slide 03: animation
\begin{frame} \choicetransition \transduration{2.5} %
\frametitle{Testing an animation}
% last argument of animateinline is frame rate
\begin{animateinline}[controls=false,autoplay,loop=false]{4}
\multiframe{8}{n=-0.4+0.1}{
\begin{tikzpicture}[scale=10,rotate=90]
\draw[blue,opacity=0.5] (-.1,-.2) rectangle (.4,0.2);
\draw[red] (-.1,-.2) -- (-.3,\n);
\end{tikzpicture}
}
\end{animateinline}
\end{frame}
% slide 04: video
% wget http://archive.org/download/Elephants_Dream_teaser_2/elephantsdream_teaser.ogv
% ffmpeg -i elephantsdream_teaser.ogv -acodec pcm_s16le -r 24 -g 24 elephantsdream_teaser.flv % Format: Flash Video, Video: Sorenson Spark, Audio: PCM
\begin{frame} \choicetransition \transduration{5.5} %
\frametitle{Testing a video}
%\movie[width=3cm,height=2cm,poster,autostart,start=5s,duration=2s,once]{}{elephantsdream_teaser.flv} % nowork, even w/ acroread 9.4.1 {multimedia}
\includemedia[ % {media9}
label=myvideo, % defines JavaScript object annotRM['myvideo']
width=0.6\linewidth,height=0.6\linewidth,
activate=pagevisible,
deactivate=pageinvisible,
transparent,
addresource=elephantsdream_teaser.flv,
flashvars={
source=elephantsdream_teaser.flv % same path as in addresource!
&autoPlay=true %
&loop=false % loop video
&scaleMode=letterbox % preserve aspect ratio
}
]{}{VPlayer9.swf} %VPlayer.swf doesn't show video at all! Not even a frame - just white background!
\PushButton[ %requires package ‘hyperref’
name=thibut,
onclick={
console.show();
console.println('-------------');
console.println(annotRM.myvideo);
console.println(annotRM['myvideo']); % object AnnotRichMedia
},
format={ % thought it runs at start, but it doesn't
console.show();
console.println('-------------');
},
]{\fbox{Test}}
\mediabutton[%
mediacommand=myvideo:seek [(32.1)],% ok
%jsaction=myvideo:{app.alert("Test " + typeof(annotRM['myvideo']));} % works, prints 'object'
]{\color{blue}\fbox{SEEK}} % works, but is invisible in acroread 9.4.1 (and visible in evince?)?
\end{frame}
% slide 05: end
\begin{frame}[plain] \choicetransition \transduration{1.5} %
\begin{center}%
\LARGE
Fin
\end{center}%
\end{frame}
\end{document}