将压缩的 swf 转换为 mp4

Posted

技术标签:

【中文标题】将压缩的 swf 转换为 mp4【英文标题】:Convert compressed swf to mp4 【发布时间】:2013-12-10 05:59:45 【问题描述】:

我正在寻找一个将 swf 无损转换为 mp4 的批处理脚本。我尝试同时使用 ffmpeg 和 handbrake,但显然 swf 已被压缩,我无法以这种方式转换它们。

ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv

HandBrakeCLI -i source -o destination

我知道我使用像 xilisoft 这样的工具,但我有超过 3000 个视频,需要自动运行。是否有脚本/算法可以帮助我自动执行此过程?

【问题讨论】:

嗨 - 你有没有想过如何做到这一点?谢谢 Max- 还没有运气。现在我已经从供应商自己购买了另一个版本。 好的,谢谢! 填充> 我想可能有点晚了,但我想我发现了如何做到这一点。一会儿我会在下面给出答案。 【参考方案1】:

我只想说没有可靠的方法将 SWF 转换为 MP4。因为SWF-file一般是一个程序。在最简单的情况下,SWF 文件只包含视频(和音频)。 jaygooby、Alfred 和 Aleksey Kontsevich 提供的解决方案非常适合这种情况。

但许多 SWF 文件都包含自己的播放/暂停按钮、音量控件等。当您在 Gnash(或任何播放器)您需要执行其他操作(例如,单击嵌入式 播放 按钮)才能真正开始播放。是的,可以以某种方式自动化这些东西(例如Xvfbxdotool 等)。同时那里有很多警告(尤其是音频流)。我什至写了an article about such approach(那是俄语)。


PS1请不要将此答案和后一个链接视为我网站的广告。

PS2 这东西应该作为评论。但由于文本格式,它作为答案发布。

【讨论】:

我已更新 URL,使其指向实际页面而不是网络存档。【参考方案2】:

咬牙切齿:

git clone git://git.sv.gnu.org/gnash.git

在构建它之前你需要一堆依赖项(应该能够全部获取):

libsdl-dev
libboost-dev
libagg-dev

然后配置和构建 gnash 视频转储器:

cd gnash

./autogen.sh

./configure --enable-renderer=agg \
               --enable-gui=dump \
               --disable-menus \
               --enable-media=ffmpeg \
               --disable-jemalloc

make

然后你可以将 dump-gnash 指向一个 swf,它会渲染出原始视频和音频

dump-gnash -1 \
                   -D /tmp/out.raw@30 \
                   -A /tmp/out.wav \                      
                   -P "FlashVars=myURL=http://example.com/blah&online=true" \
                   http://example.com/blah/some.swf \

这将以 30fps(@30 位)和 /tmp/out.wav 写出 /tmp/out.raw(即 bgra aka rgb32 视频)和 /tmp/out.wav

这些需要重新组合成例如mp4 使用:

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

因为它的原始视频,ffmpeg 需要知道颜色空间 (rga32) 尺寸和输入 fps。我们告诉它合并音频(160kbps mp3),以 30fps 的速度渲染视频

您需要额外的标志来获得无损 mp4。

【讨论】:

嘿,Jay,这真的很有用!但是,当我这样做时,我发现没有显示背景和文本。知道为什么会这样吗? 可能有多种原因;你知道 swf 是用 AS2 还是 3 构建的?我遇到了一些背景没有渲染的问题,因为一个 swf 正在加载另一个,而电影是两者的组合,gnash 并不总是能正确处理这个问题。 Gnash 现在为 debian-types 添加了依赖项安装程序:deb-attempt-install-dependencies.sh 我无法让这个工具在 mac 上编译。我收到编译错误。 感谢 ***.com/users/102250/jan-larres 对丢失的 .raw 的建议编辑。我无法批准编辑,因为一些审稿人过于热心地拒绝了编辑【参考方案3】:

你可以使用这个脚本:

#!/bin/bash

SWFFILE=$1
MP4FILE=$SWFFILE%.*.mp4
TMPFILE=$(cat /dev/urandom | tr -dc 'a-zA-Z' | fold -w 32 | head -n 1).bin
TMPWAV=$(cat /dev/urandom | tr -dc 'a-zA-Z' | fold -w 32 | head -n 1).wav
TMPMP4=$(cat /dev/urandom | tr -dc 'a-zA-Z' | fold -w 32 | head -n 1).mp4

# create raw-dump
GNASHCMD="dump-gnash -1 -r 3 -v -D $TMPFILE -A $TMPWAV $SWFFILE"
OUTPUT="$(exec $GNASHCMD)"

# extract parameters
WIDTH="$(echo $OUTPUT | grep -o 'WIDTH=[^, ]*' | sed 's/^.*=//')"
HEIGHT="$(echo $OUTPUT | grep -o 'HEIGHT=[^, ]*' | sed 's/^.*=//')"
FPS="$(echo $OUTPUT | grep -o 'FPS_ACTUAL=[^, ]*' | sed 's/^.*=//')"

# create raw, uncompressed mp4 file
mplayer $TMPFILE -vo yuv4mpeg:file=$TMPMP4 -demuxer rawvideo -rawvideo fps=$FPS:w=$WIDTH:h=$HEIGHT:format=bgra

# create compressed mp4 with ffmpeg
ffmpeg -i $TMPMP4 -i $TMPWAV $MP4FILE

# clean up
rm -rf $TMPFILE
rm -rf $TMPMP4
rm -rf $TMPWAV

为我工作!

【讨论】:

我必须在 ffmpeg 的输出之前添加“-strict -2”。由于 swf 中的循环,我还必须为一堆文件手动设置 --max-advances。否则,效果很好。 感谢脚本。我试图转换一个 17mb 的 swf 文件,但它占用了大量的磁盘空间,因为 22gigs 已用完但尚未完成。有什么问题吗? @Bishnu 尝试使用 h264 或 265 编码器或其他方式即时压缩 mp4。好久没用这个脚本了,看看ffmpeg开关吧。 谢谢。我真的一无所知,我没有mplayer。我使用 slack 和最少的软件包,安装 xurlrunner 时我的空间已经耗尽。【参考方案4】:
OS: Ubuntu (Linux)

我不完全知道这是否无损,但至少我让转换部分正常工作(ffmpeg)。

依赖项

sudo apt-get install ffmpeg swftools

解压

首先我使用swfcombine解压:

swfcombine -d file.swf -o file_new.swf

转换

接下来我使用 ffmpeg 进行转换,这些参数可能不会无损

ffmpeg -i file.swf video.mp4

【讨论】:

这项工作但不会渲染/忽略​​通过 swfcombine 添加的新资源,如marc.info/?l=swftools-common&m=138732909815669&w=2 中所述 - 您知道如何确保新图像不会被遗漏吗? 视频对我来说都是乱码。 它对我有用sudo apt-get install libav-tools,而不是如上所示。

以上是关于将压缩的 swf 转换为 mp4的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何看swf文件

在 html5 视频标签中播放 .swf 文件

使用 AudioConverter 将 PCM 转换为 AAC 并使用 AVAssetWriter 写入 .mp4 文件时音频失真

格式工厂 v4.0.0 最新去广告绿色纯净版

FLV格式的视频怎么转换成MP4格式的

快速将MOV格式视频转换成MP4无损方法