pdf到png再到mp4短视频:不需要工具,2个指令1键搞定

2020-06-04 10:50:34 浏览数 (1)

引言

说一个不太常用的需求,就是你有没有想过,把电脑上珍藏多年的PDF电子书,转换成视频文件,让大家学习。

为什么要视频,电子书不香吗?不香!因为这是短视频最好的时代,你不做成短视频,没有人愿意冷静而枯燥地阅读

今天分享的知识,就是如何快速地从pdf文档,制作为mp4短视频。搬好小板凳,准备开讲了哈!

学习时间

有一种快速方便的方法可以将PDF转换为一个或多个图像。命令行工具ImageMagick可以做到这一点。

你可以将整个PDF文档转换为单个图像,或者也可以选择将页面输出为一系列枚举图像文件

使用的时候,墙裂建议指定密度 -density 、抗锯齿 -antialias 和质量 -quality 选项,提高目标文件的转换质量

在下面的示例中,我们使用 -density 150、-quality 100和 -antialias 选项。ImageMagick 非常智能,它会根据输出文件扩展名自动匹配输出格式。

1 - 转换整个 PDF 文件为单张 PNG 图片

代码语言:javascript复制
convert -density 150 -antialias "input_file_name.pdf" -append -resize 1024x -quality 100 "output_file_name.png"

这里的关键参数是 -append,PDF转换为单个图像或一系列图像时,效果会有所不同。

2 - 转换整个 PDF 文件为一系列图片

代码语言:javascript复制
convert -density 150 -antialias "input_file_name.pdf" -resize 1024x -quality 100 "output_file_name.png"

此命令的结果是名为 out_file_name-0.png、out_file_name-1.png、out_file_name-0.png-2.png……一系列图像文件。

如果页数较多,那么使用多个数字的枚举文件名会很方便,这样便于排序。

你也可以用格式化的数字命名输出文件,如使用 d,得到的图片文件名数字部分都会是3位,不足的前置补零。

代码语言:javascript复制
convert -density 150 -antialias "input_file_name.pdf" -resize 1024x -quality 100 "output_file_name-d.png"

3 - 仅转换指定页面

如果只是需要将某页转换输出为图片,这样写:

代码语言:javascript复制
convert "input_file_name.pdf[1]" "output_file_name.png"

举一反三,如果是一些页码范围,就这么些:

代码语言:javascript复制
convert "input_file_name.pdf[i-j]" "output_file_name.png"

这些选项很人性化,有没有?

图片到视频

有了图片,组装成视频就不是问题了。我们之前推出过一系列的文章,介绍了音视频处理领域的不二之选——ffmpeg。

单张图片生成一段视频,也是可以的,只是没有什么动效,体验很不好。我们加入生成的是多张序列化图片,比如上一节中所说的 output_file_name-=.png 那一系列图片,将其按照顺序合并入短视频,执行下面这行指令:

代码语言:javascript复制
ffmpeg -r 1/5 -i output_file_name-d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

说一说参数的含义:

  • -r 1/5 表明对每张图片展示5秒钟;
  • -i output_file_name-d.png 指定一系列用作输入的图片;
  • -c:v libx264 表明输出视频使用 h264 编码格式;
  • -r 30 表明输出视频帧率 30 fps;
  • -pix_fmt yuv420p 使用 YUV pexel 格式;

是不是每一项的设置都那么有理有据?:-)

写在最后

对于特殊的要求,我们将需求拆解为细分的小步骤。通过每个小步骤的处理,将整个流程串联起来就完成了整个工作,这就是软件开发的流程。

实现的方式有很多。但是能够在特定的场合选中选择恰当的工具,这很重要。也对我们如何高效的工作提出了更高的要求。

0 人点赞