答案1
首先,我将提到一些您不应该采取的路径以及为什么现在(只要您运行的是现代发行版):
Swivel 可以将 swf 转换为图像/视频,但它依赖于 Adobe AIR,而 Adobe AIR 在 Linux 上不可用。
Gnash 有一个 dump-gnash 命令,该命令可能有效,您可以尝试使用它导出原始 rgb32 30fps 视频,但它在我的系统上不起作用。无论如何,我会给你命令:
dump-gnash -1 -D ./out.raw@30
根据这个:https://stackoverflow.com/questions/20194270/convert-compressed-swf-to-mp4如果你使用 Gnash 也可能会成功。
但 Gnash 是一个未完成的、废弃的项目,这就是为什么我将向您展示如何处理名为 Ruffle 的维护项目。
如果您要获取最新版本的软件,则还必须获取最新版本的 Rust 及其组件。要安装它(在撰写本文时),命令是:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
当我尝试从包管理器安装时,我遇到了麻烦,上面的命令获取了最新的稳定的 Rust 发行版。
您可能还需要安装 Java(openJDK 对我有用)。
现在 git clone ruffle master 分支使用git clone
cd 进入褶边文件夹:
git clone https://github.com/ruffle-rs/ruffle
cd ruffle/
警告:您显然需要一个 GPU,因此它无法在无头服务器上工作:/
然后运行以下命令:
cargo run --release --package=exporter -- path/to/file.swf
这将安装所需的依赖项,启动导出器,然后以高质量导出幻灯片(就 Flash 当年实现的质量而言......如果您不满意,您也可以使用命令行参数) 。
是的,它基本上需要编译项目的主要组件,但至少最终结果会是好的。
如果该过程不起作用,您将需要解压缩所使用的 SWF:
wget http://www.swftools.org/swftools-0.9.2.tar.gz
tar xvf swftools-0.9.2.tar.gz
cd swftools-0.9.2.tar.gz/
./configure
make
现在cd
进入 src 目录,您将在其中找到转换所需的 swfcombine 二进制文件:
swfcombine -d slide1.swf -o slide1dec.swf
rfxswf error: sprite doesn't end(1)
rfxswf error: sprite doesn't end(2)
是的,它会打印出错误,但它似乎有效。
您需要对每张幻灯片执行此操作,您可以使用find
或xargs
类似的方法来自动化它(或者如果支持的话,可以使用通配符)。
然后你可以将它放入 Ruffle 中,如上所示。
根据您的输入(PNG 或原始视频),您可能需要执行以下操作来将音频与视频结合起来:
ffmpeg -i /tmp/out.wav \
-f rawvideo \
-pix_fmt rgb32 \
-s:v 800x550 \
-r 30 \
-i /tmp/out.raw \
-c:v libx264 \
-r 30 \
-b 160k \
/tmp/out.mp4
让我知道这是否适合您的用例。
PS如果你想一次性合并mp3:https://superuser.com/questions/202809/join-multiple-mp3-files-lossless
编辑1:
请尝试以下方法将音频添加到图像中:
ffmpeg -loop 1 -i img.png -i slide1.mp3 -shortest slide1withaudio.mp4