使用 pdfTeX 嵌入 flv(或 mp4)视频(仅限纯 TeX)

使用 pdfTeX 嵌入 flv(或 mp4)视频(仅限纯 TeX)

我正在尝试找出如何将 flv 视频嵌入使用纯 TeX 和 pdfTeX 创建的 pdf 文件中。我成功地手动(通过 Adob​​e 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 包相同的媒体嵌入方法media9MP4/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&#3)>>                               
  >>}%                                                                                     
  %                                                                                        
  \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

文档和源代码media9Alexander Grahn 撰写的《技术参考》可能是个不错的入门指南。文档末尾还包含了一份技术参考列表,您可能也想阅读一下。

相关内容