我怎样才能从投影仪中获得幻灯片并保持过渡效果?

我怎样才能从投影仪中获得幻灯片并保持过渡效果?

从@Thorsten 的回答开始 如何设置幻灯片之间的时间以使用 beamer 创建自动幻灯片放映?,我想知道是否有可能在我的 MWE 中获得幻灯片(.mp4.gif)保留所有的过渡效果:

\documentclass{beamer}
\begin{document}

\begin{frame}
\transwipe[duration=1]
\transduration{3}
This is my first frame
\end{frame}

\begin{frame}
\transwipe[duration=1]
\transduration{3}
This is my second frame
\end{frame}

\begin{frame}
\transwipe[duration=1]
\transduration{3}
This is my third frame
\end{frame}

\end{document}

PS:如果我使用 ImageMagick 将 pdf 转换为 jpg:

convert -density 300 file.pdf page_%04d.jpg

并使用 ffmpeg 获取视频:

ffmpeg -framerate 1/3 -pattern_type glob -i '*.jpg' -c:v libx264 -r 300 -pix_fmt yuv420p video.mp4

我无法维持与 \transwipe 相关的转换。

答案1

评论中的建议是正确的。制作一个投影仪演示文稿,然后获取屏幕拍摄应用程序来拍摄结果。

如果您想要一个纯粹的bash解决方案,您必须设计一个脚本,该脚本使用该watch函数运行一个每秒进行 10 次截屏的脚本,并以您希望使用的帧速率运行该脚本,除以 10。以下是此类脚本的一个示例:

#!/bin/bash
a=`cat ~/index`
if [ $1 -ne 0 ]
then
 echo $((a+$1)) > /users/morgan/x/index
fi
xwd -root | convert xwd:- ~/$((a+$2)).png
cat end

您遇到的一个问题是并行性:确保所有帧都同步。为此,我使用了一个名为的文件,index以便为脚本的所有副本提供一个中心参考。您遇到的另一个问题是在同一帧结束所有实例。为了解决这个问题,上面的脚本使用cat文件end,它告诉所有watch命令是否结束观看。

最后,这是我用来协调所有命令的脚本watch;它在文件名中调用上述脚本i.sh

#!/bin/bash
echo n > end   # don't end watching
echo 0 > index # start at frame 0
a=1            # which instance of `watch` we're starting
b=` bc -l <<< $(echo 1/$1 - .001) `#* amount of time between starting the `watch` instances
while [ $a -lt $1 ]
do
 ( watch -pgn .1 ./i.sh 0 $a ) &   # the -p tells `watch` to be more precise
 #date +%N                         # line which you use to calibrate timing on your PC
 a=$((a+1))
 sleep $b
done
 ( watch -pgn .1 ./i.sh $1 $a ) &  # last instance increments the `index` by $1
timeout $2 evince -s $3            # run presentation file $3 for $2 seconds
echo y > end                       # this should abort all `watch` instances

用法是:

./run.sh [fps / 10] [no. of seconds to film] [presentation PDF name] 
  • 注意:.001 是我的计算机上运行一次循环迭代所需的时间,以确保所有帧都同步。为了在您的计算机上计时,请取消注释 #date 行,然后脚本将显示脚本开始的纳秒数。然后,您可以上下调整 .001,以确保尽可能接近所需的间隙。

一个缺点是,这些watch命令不知道 PDF 查看器多久才能完成加载以及演示文稿何时开始。因此,您必须丢弃在 PDF 阅读器加载之前捕获的所有截屏,还要为演示文稿长度增加几秒钟,捕获完成后您可以丢弃这些截屏。

这是一个纯 bash 解决方案,但我建议使用更传统的方法,即使用第三方实用程序进行拍摄,除非有充分的理由不这样做(例如,您没有 root 访问权限;您的系统太旧,无法支持外部实用程序;您相信只使用开源软件;等等)。

当然,删除开头和结尾的文件后,您就可以使用ffmpeg上面写的方法制作电影文件了。不幸的是,似乎没有比实时更快的解决方案。

相关内容