使用 ffmpeg 将 h264 视频编码到 .mp4 容器中以便与 media9 一起使用时遇到问题

使用 ffmpeg 将 h264 视频编码到 .mp4 容器中以便与 media9 一起使用时遇到问题

我无法将ffmpeg编码的 libx264 视频放入 .mp4 容器中,以便与 media9 和 beamer 配合使用。pdf 是使用 pdfLaTeX 创建的。这似乎是某种 ffmpeg 问题,因为以下工作正常:

  • media9 包中的 random.mp4 可以工作
  • .flv 默认也是这样,ffmpeg虽然视频质量自然不是很好

    ffmpeg -i Test.mp4  -sameq Test.flv 
    

我使用 ffmpeg 编码的任何视频

ffmpeg -i EB_%03d.png -c:v libx264 -x264opts keyint=30 -r 30 -b:v 1000k -s 640x512 Test.mp4

在 VLC 等平台上播放无瑕疵(虽然我在 pdf 中看到了时长条,但没有看到视频)。ffmpeg -i Test.mp4视频流的收益

Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 640x512, 1021 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc

稍有不同ffmpeg -i random.mp4

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 170 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc

输出自ffmpeg

ffmpeg version 2.0.2 Copyright (c) 2000-2013 the FFmpeg developers
built on Oct 19 2013 08:34:03 with gcc 4.7 (SUSE Linux)
configuration: --shlibdir=/usr/lib --prefix=/usr --mandir=/usr/share/man 
--libdir=/usr/lib --enable-shared --disable-static --enable-debug --disable-stripping 
--extra-cflags='-fomit-frame-pointer -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 
-fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64 -I/usr/include/gsm' --enable-gpl --enable-x11grab --enable-version3 
--enable-pthreads --enable-avfilter --enable-libpulse --enable-libvpx --enable-libopus 
--enable-libass --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex 
--enable-libxvid --enable-libx264 --enable-libschroedinger --enable-libgsm --enable-libopencore-amrnb 
--enable-libopencore-amrwb --enable-postproc --enable-libdc1394 --enable-librtmp --enable-libfreetype 
--enable-avresample --enable-libtwolame --enable-libvo-aacenc
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libavresample   1.  1.  0 /  1.  1.  0
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100

media9 的代码片段

\begin{frame}
\frametitle{Here should be a .mp4 video}
\framesubtitle{Apparently, something is wrong with my x264 codec}

\includemedia[
width=3.5in,height=2.8in,
activate=pageopen,
addresource=Figures/Test.mp4,
transparent,
flashvars={
source=Figures/Test.mp4&
autoPlay=true&
loop=true&
scaleMode=letterbox
}
]{\includegraphics{Figures/EB_001}}{VPlayer.swf}
\end{frame}  

有人有想法吗?

答案1

更新

libx264使用ffmpeg/选择正确的选项avconv有点棘手。

以下ffmpeg命令行应该生成可用的视频文件(根据需要调整帧-r ...和关键帧速率):-g ...

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

<input>被要转码的视频文件替换,或者带有通配符的 PNG/JPEG/... 文件序列,例如frame-%d.png编号文件等frame-0.pngframe-1.png

如果安装了后者,则替换ffmpeg为。两者共享相同的选项。avconv

相关内容