我正在尝试找出如何将 flv 视频嵌入使用纯 TeX 和 pdfTeX 创建的 pdf 文件中。我成功地手动(通过 Adobe Acrobat 的菜单:工具->多媒体->视频工具)将 flv 视频剪辑嵌入现有 pdf 中。然后在文本编辑器 (vim) 中检查 pdf 文件,看看是否能找出嵌入视频所需添加的代码。虽然我能够识别与嵌入相关的一些行,但我不知道如何使用纯 TeX 和 pdfTeX 实现嵌入。如果能提供任何指点,我将不胜感激。
谢谢。
附言:@AlexG 的回复确实给了我我想要的东西。但是,我有一个后续问题。我试图将后续问题写成评论,但无法正确格式化后续问题。所以这里是:
在代码的末尾,为什么需要“\setbox0=...”和“\hbox to ...”行?注释这两行似乎不会影响解决方案:
top
%\setbox0=\hbox{ }\immediate\pdfxform 0%
\vbox to 25.6mm{%
\pdfannot width \videowidth depth \videoheight height 0pt {
/Subtype/RichMedia
/BS <</W 0/S/S>>
/Contents (embedded video file:\videofile)
/NM (rma:\videofile)
/AP <</N \the\pdflastxform\space 0 R>>
/RichMediaSettings \the\pdflastobj\space 0 R
/RichMediaContent \rmcontent\space 0 R
}}%
%\hbox to \videowidth {\vbox to \videoheight {}\hss}%
bottom
上述结局导致视频垂直显示在单词顶部和底部之间。
答案1
以下示例定义了\embedvideo
。它使用与 LaTeX 包相同的媒体嵌入方法media9
。MP4/H264和音频视频格式在视频播放器组件中播放VPlayer.swf运送media9
。
查看media9 手册关于如何VPlayer
通过 FlashVars 进行配置,它们作为的第 3 个参数传递\embedvideo
。
可以通过按下鼠标左键(暂停)和释放(播放/恢复)、通过右键单击访问的上下文菜单以及通过键盘(请参阅上下文菜单了解按键)来控制视频播放器。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \embedvideo{<width>}{<height>}{<flashvars>}{<video file (MP4+H264 or FLV)>}
% flashvars documented in `texdoc media9`, page 19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\embedvideo#1#2#3#4{%
\ifdefined\vplayer\else%
\immediate\pdfobj stream file {VPlayer.swf}%
\immediate\pdfobj{<<
/Type/Filespec/F (VPlayer.swf)/UF (VPlayer.swf)
/EF <</F \the\pdflastobj\space 0 R>>
>>}%
\edef\vplayer{\the\pdflastobj}%
\fi%
%
\immediate\pdfobj stream file {#4}%
\immediate\pdfobj{<<
/Type/Filespec/F (#4)/UF (#4)
/EF <</F \the\pdflastobj\space 0 R>>
>>}%
\edef\video{\the\pdflastobj}%
%
\immediate\pdfobj{<<
/Type/RichMediaInstance/Subtype/Video
/Asset \vplayer\space 0 R
/Params <</Binding/Foreground/FlashVars (source=#4)>>
>>}%
%
\immediate\pdfobj{<<
/Type/RichMediaConfiguration/Subtype/Video
/Instances [\the\pdflastobj\space 0 R]
>>}%
%
\immediate\pdfobj{<<
/Type/RichMediaContent
/Assets <<
/Names [(VPlayer.swf) \vplayer\space 0 R (#4) \video\space 0 R]
>>
/Configurations [\the\pdflastobj\space 0 R]
>>}%
\edef\rmcontent{\the\pdflastobj}%
%
\pdfobj{<<
/Activation <<
/Condition/PO
/Presentation <<
/Transparent true
/Style/Embedded
/PassContextClick true
>>
>>
/Deactivation <</Condition/PC>>
>>}%
%
\setbox0=\vbox to #2 {\vss\hbox to #1{\tt #4\hss}\vss}%
\immediate\pdfxform 0%
%
\pdfannot width #1 height #2 depth 0pt {
/Subtype/RichMedia
/BS <</W 0/S/S>>
/Contents (embedded video file:#4)
/NM (rma:#4)
/AP <</N \the\pdflastxform\space 0 R>>
/RichMediaSettings \the\pdflastobj\space 0 R
/RichMediaContent \rmcontent\space 0 R
}%
\hbox to #1 {\vbox to #2 {}\hss}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Plain\TeX{} video example:
top
left\embedvideo{4cm}{3cm}{autoPlay=true&loop=true}{random.mp4}right
bottom
\bye
回答后续问题:
这些行\setbox0=...
会\immediate\pdfxform 0%
为非活动视频生成海报文本。文本(视频文件名)被放入一个框中,然后提炼成所谓的 Form-XObject。后者使用条目绑定到 RichMedia 注释/AP
。如果没有海报文本,如果视频处于非活动状态,AR 会显示一个丑陋的框,里面有一个“?”。
答案2
文档和源代码media9
Alexander Grahn 撰写的《技术参考》可能是个不错的入门指南。文档末尾还包含了一份技术参考列表,您可能也想阅读一下。