45

Some time ago I asked this question How to include a movie in a PDF? Step by step instructions. (I tried everything documented there, and links therein. I can't find the combination of tools to be able to playback embedded movies in a PDF viewer in Linux.)

This time I am going to be more direct: Was anyone, with a certain combination of tools and viewer, able to create a PDF from TeX with an embedded movie and play it back in a Linux viewer (for example some version of Acrobat)?

If, so what package, tex version, acrobat version was used?


EDIT 2014

Thanks to @AlexG, great advances have been made regarding the inclusion of movies and in particular the playback in Linux. It is just a pity that Acrobat for Linux is at its end of life (not so much for Adobe but because nobody is picking up the torch for embedded media).

This edit simply summarizes a working solution that is illustrated by defining a command \includemove[dimensions]{moviewithoutextension}, that produces movies that can be played back in Acrobat 9.4.1 (Linux), Acrobat for Windows and Mac and that fallbacks to external players (and a still picture) in other PDF viewers.

Assumptions:

  1. You have a copy of jw-player 5.10 (not 5.9 or 6.x) in your local directory and it is named player.swf. (from here http://developer.longtailvideo.com/trac/browser/tags/mediaplayer-5.10, documentation here: http://www.longtailvideo.com/support/jw5/31138/configuration-options)
  2. You have ffmpeg version 2.1.4.
  3. You have a copy of your movie in the mp4 format. Any movie can be converted in this way

    ffmpeg -i $MYMOVIE.vid -vf scale="trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -profile:v high -pix_fmt yuv420p -g 25 -r 25 $MYMOVIE.mp4

    ffmpeg -i $MYMOVIE.vid -qscale 0 -vcodec libx264 -x264opts keyint=25 $MYMOVE.mp4

  4. A preview image with the same name but extension png. This can be achieved by converting your movie in this way and taking an snapshot:

    ffmpeg -i $MYMOVIE.mp4 -ss 00:00:2.1 -f image2 -vframes 1 $MYMOVIE.png

  5. [optional] A PDF image with the same name but pdf extension to replace the PNG preview in case Flash content is not active.

  6. You are OK using the packages hyperref (and media9 of course).

  7. [for playback] You have Acrobat 9.4.1 (for playback in Linux) or more modern versions in other systems.

  8. [for playback] For other PDF viewers: the extension mp4 is associated with some application and the movie is distributed with the PDF.

Limitations (of my poor implementation, not of media9)

  1. Only width and/or height can be specified as options.
  2. No other player than jw-player can be used (options are hardcoded in the command definition).
  3. It assumes a lot of defaults regarding the behavior of the embedded player.
  4. [For fallback] The definition tries it best to have a nice fallback mode for other viewers, and you have to choose (see the code) between embedding the movie or having an external file.
  5. [For playback] I don't know if it works in all viewers, it works at least in Acrobat 9.4.1 (Linux) and Evince 3.10.3 (Linux). I saw it work in Acrobat X in Windows and Mac after a "security message" confirmation.

Given this conditions, the following document that includes the definition of \includemovie and summarizes a working solution.

\documentclass{article}
\usepackage[noplaybutton]{media9}
\usepackage[colorlinks]{hyperref}
\usepackage{attachfile2}

\newcommand{\includemovie}[2][]{
    \includemedia[
        #1,
        activate=pageopen,transparent,
        addresource=#2.mp4,addresource=#2.png,
        flashvars={
            file=#2.mp4&image=#2.png&
            stretching=uniform&start=0&
            screencolor=white& %improves render in light backgrounds
            controlbar.position=over&controlbar.idlehide=true&
            autostart=true&repeat=always&smoothing=true
            %&bufferlength=10 % may improve repetition of short videos
        }
    ]{ % for disabled content (in most cases this is fallback)
        \begin{tabular}{ll}
            \mbox{
            %   \href{run:#2.mp4} % for not embedded fallback
                \textattachfile[color={0 0 0}]{#2.mp4} % for embedded fallback
                {\texttt{|\kern-.23em>}} % poor play button
            } & \raisebox{-\height}{\includegraphics[#1]{#2}}
        \end{tabular}
    }{player.swf}
}

\begin{document}

\includemovie[width=5cm]{MYMOVIE} %no extension!

\end{document}

(note: you may benefit by producing JPEG snapshots, PNG are usually very big, sometimes as big as the whole movie)

4
  • The ffmpeg command line to produce a usable video file, item (3), may need to be adjusted. See tex.stackexchange.com/a/141765.
    – AlexG
    Apr 15, 2015 at 11:09
  • At least -profile:v high -pix_fmt yuv420p should be added to the ffmpeg command line to get a usable MP4 video file (item 3 of your list).
    – AlexG
    May 20, 2015 at 7:58
  • Thanks, my ffmpeg is complaining that qscale is ambiguous. Do you have a complete line to suggest? (feel free to edit). BTW, I never had problems using this command line (in spite of not understanding some of the options).
    – alfC
    May 20, 2015 at 8:01
  • See the link in my first comment. It also adds an option to ensure even pixel numbers in both video dimensions. Recent libx264versions seem to use a different profile/pix format which is not compatible with Flash Player.
    – AlexG
    May 20, 2015 at 8:05

4 Answers 4

15

Update

As of 2013/11/04, package media9 contains media player Flash components VPlayer9.swf and APlayer9.swf. They are compatible with the (somewhat outdated) Flash Player 9 plugin that is bundled with Adobe Reader for Linux 9.4.1 and can be used for producing PDF documents with embedded video (MP4/H.264) and audio (MP3) which target this particular Linux version of Adobe Reader.

Alternatively, any Flash-based media player found on the Web which is Flash-9 compatible and which can be configured via FlashVars could be used. (Though the number of such players should be decreasing with the advent of newer Flash versions.)

NB: Flash and media playback was dropped in more recent Readers. AR-9.4.1 is the last version on Linux which supports Flash.

Adobe Reader 9.4.1 for Linux can be downloaded from ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.4.1/.

Example code using cube.mp4 and VPlayer9.swf from the media9 package:

\documentclass{article}
\usepackage{media9}[2013/11/04]

\begin{document}

\includemedia[
  width=0.6\linewidth,height=0.6\linewidth,
  activate=pageopen,
  transparent,
  addresource=cube.mp4,
  flashvars={
    source=cube.mp4     % same path as in addresource!
   &loop=true           % loop video
   &scaleMode=letterbox % preserve aspect ratio
  }
]{}{VPlayer9.swf}

\end{document}
32
  • Do you know how to make includemedia to use the jw-player engine? I understand that media9 is supposed to replace flashmovie, however if I use VPlayer9.swf the video plays with a lot of flicker and autoloop doesn't work well. If use flashmovie with jw-player I don't have this problem.
    – alfC
    Feb 18, 2014 at 16:26
  • 1
    @alfC: Replace VPlayer9.swf with player_flv_maxi.swf. The Flasvars option should read flashvars={flv=cube.mp4&autoplay=1&loop=1&showplayer=autohide}, with cube.mp4 replaced by the video file of yours, as set by the addresource option.
    – AlexG
    Feb 19, 2014 at 7:23
  • 1
    @alfC: The feature you are looking for was implemented in the movie15 package, were a file attachment annotation was placed behind the Screen annotation and which was accessible in PDF viewers that did not support the Screen annot. There is, however, a problem with the RichMedia annotation (used by media9): In the non-activated state, AR always renders it behind any other annotation of different type (Link, FileAttachment, ...), even if it is inserted a-posteriori by LaTeX.
    – AlexG
    Apr 8, 2014 at 9:27
  • 1
    @alfC: (Cont'd) Therefore, you cannot activate a RichMedia by click in AR if there is another annotation at the same place on the page. Thus, only the file attachments pane in the Reader GUI is usable for opening the media file or downloading it from the PDF.
    – AlexG
    Apr 8, 2014 at 9:27
  • 1
    @alfC Just uploaded a new version (0.44) to CTAN. It provides package and command option attachfiles. Media and player files can be opened or downloaded from the PDF via the File Attachments Pane of AR.
    – AlexG
    Jun 4, 2014 at 7:36
20

Update Thanks to @percusse for pointing out in his comment that the original answer was not the one the OP was asking for.

So I did a little searching and found this link. Basically, the workaround is,

  1. Install Adobe Reader 9.4.1.
  2. Install flashmovie or copy it to your source folder (especially the player_flv_maxi.swf)
  3. Write \includepackage{hyperref} and \includepackage{flashmovie} in your preamble. A minimal working environment would be:

    \documentclass{article}
    
    \includepackage{hyperref}
    \incldepackage{flashmovie}
    
    \begin{document}
    
    \flashmovie[width=12cm,height=8cm,engine=flv-player,auto=1]{movie.flv}
    
    \end{document}
    

It seems that, in Linux, you can only get embedded videos in Acrobat with Acrobat version 9.4.1. (Why this is, I don't know yet.) You will also need to install ffmpeg to convert your videos to flv

I downloaded the sample text-flv.tex file from the link. How flashmovie works is summarized in this file.

I can verify the claim of that the movie cannot play on the output pdf on my Adobe Reader with version 9.4.7. Opening the pdf gives a message A 3d data parsing error has ocurred. I can also verify that it works like a charm in Adobe Reader 9.4.1.

BTW, I have TeX version 3.1415926-2.4-1.40.13.

Update: If you are not after embeding First, make sure that you have installed all required packages to run your movie format. You will need to load the package movie15, which comes with TeXLive 2012. The manual says that this package is already obsolete and that you should consider using movie9 instead, which is in ctan but not in TeXLive2012. I used movie15 in this answer.

Try the following MWE:

\documentclass{article}

\usepackage{hyperref}
\usepackage{movie15}

\begin{document}

    \begin{figure}[ht]
    \includemovie[poster,text={\small(Loading Video...)}]{3cm}{2cm}{movie.mp4}
    \end{figure}

\end{document}

The poster option inserts the first frame of the movie. The text option appears before the movie is loaded into your pdf viewer. 3cm and 2cm are the width and height of the frame and movie.mp4 is the name of your movie.

Run pdflatex movie.tex where movie.tex is your tex file. I am using Ubuntu 12.04 and I use evince 3.4 to view the pdf. Just type evince movie.pdf in your terminal. Click on the frame to play the movie. The movie will open with your default movie viewer.

I haven't tried movie9 though.

Update This is in response to User 17791. My previous comment to his answer was deleted when the question was edited by moderator. Here it is, @User17791:

pdfTeX 3.1415926-2.4-1.40.13 (TeX Live 2012)
kpathsea version 6.1.0
Copyright 2012 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
There is NO warranty.  Redistribution of this software is
covered by the terms of both the pdfTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the pdfTeX source.
Primary author of pdfTeX: Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
Compiled with libpng 1.5.10; using libpng 1.5.10
Compiled with zlib 1.2.7; using zlib 1.2.7
Compiled with xpdf version 3.03

Below are two snapshots of my desktop with a movie being played in Acrobat 9.4.1. (It's a video of a ritual dance here in Baguio City.)

enter image description here

enter image description here

11
  • 2
    This is nice but OP specifically asks for embedded playback.
    – percusse
    Aug 18, 2012 at 7:26
  • 1
    Thanks hpesoj626 for your detailed answers. I have succeeded in getting a beamer+flashmovie+AR 9.4.1 to work, creating an avi movie from jpg images using mencoder, and converting the avi movie to mp4 with ffmpeg. My distro was Fedora 16 When I say to work, I mean I was able to put AR in presentation mode, and clicking on the image, the movie played. I was able to pause the movie also. BUT: Unfortunately, I have some days ago upgraded to Fedora 17. Repeating all the steps, I am able to see the movie in presentation mode, but when I want to change to the next slide, AR crashes. So, now I am comp
    – user17778
    Aug 19, 2012 at 17:48
  • 1
    hpesoj626, could you please post the output of pdflatex -v ? So I can compare the libraries it is compiled against, and I am able to figure out why AR crashes,even following all your steps. Thanks in advance!
    – user17791
    Aug 20, 2012 at 2:38
  • @Fiz65, I am sorry but I have never even tried using Fedora. Did you still have the same settings for AR and your TeX though?
    – hpesoj626
    Aug 23, 2012 at 3:53
  • Thanks, I think you hit the nail on the head: Acrobat Reader 9.4.1 and flashmovie is the only combination in which I was successful in embedding (displaying) movies in PDF, and only with the default players (not the fancy ones). I did not succeed using movie15 or media9 yet. Also I can confirm some crashes when changing pages that Fiz65 reported.
    – alfC
    Sep 9, 2012 at 9:26
8

I was trying to do same as you and this worked to me

\documentclass[unknownkeysallowed]{beamer}
\mode<presentation>
\usepackage{beamerthemesplit}
\usepackage{multimedia}

\begin{document} 

\begin{frame}[allowframbreaks]

\centering

\movie[height = 6cm,width = 6cm,showcontrols] {}{QuantumHallEffectExp.mp4}
\end{frame} 

\end{document} 

And in order to see what was embedded it is necessary to use Okular in presentation mode.

enter image description here

1
  • Hi, I tried reading playing an embedded video in Okular, but it doesn't work. Did you do anything in particular? What version of okular are you using?
    – Tropilio
    Jun 19, 2019 at 12:15
2

I'm using Linux, and this works for me:

First I have to download movie15_dvipdfmx.sty and rename it to movie15.sty, and put it in the same directory as my .tex file.

Then:

\usepackage[dvipdfmx]{movie15}
[....]

\begin{figure}[ht]
\centering
\includemovie[inline=false,text={\includegraphics[scale=0.25]{play-movie.png}}]{}{}{movie.mp4}
\end{figure}

In Linux, I can open the PDF with the viewer evince, and the image can be clicked and the movie will play in a separate window.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .