我正在寻找一个批处理脚本来将swf转换为mp4,无损。我尝试使用ffmpeg和handbrake,但显然swf是压缩的,我无法通过这种方式转换它们。
ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv
HandBrakeCLI -i source -o destination
我知道我使用像xilisoft这样的工具,但我有超过3000个视频,需要自动运行。是否有可以帮助我自动完成此过程的脚本/算法?
答案 0 :(得分:20)
获取gnash:
git clone git://git.sv.gnu.org/gnash.git
在构建它之前你需要一堆依赖项(应该能够apt-get all):
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
然后你可以在swf上指向dump-gnash,它会渲染原始视频和音频
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(/tmp/out.raw
位)和@30
/tmp/out.wav
(也就是bgra又名rgb32视频)
这些需要重新组合到例如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需要知道colourspace(rga32)维度和输入fps。我们告诉它结合音频(160kbps mp3),以30fps的速度渲染视频
你需要额外的标志来获得无损mp4。
答案 1 :(得分:8)
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
答案 2 :(得分: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
适合我!
答案 3 :(得分:2)
我只想说没有可靠的方法将SWF转换为MP4。因为SWF文件一般是一个程序。在最简单的情况下,SWF文件仅包含视频(以及音频)。 jaygooby,Alfred和Aleksey Kontsevich提供的解决方案在这种情况下非常有效。
但是许多SWF文件包含他们自己的播放 / 暂停按钮,音量控件等。当您在 Gnash (或任何玩家)您需要执行其他操作(例如,点击嵌入式播放按钮)才能真正开始播放。是的,可以通过某种方式自动化这些内容(例如Xvfb
,xdotool
等)。与此同时,有很多警告(特别是音频流)。我甚至写了an article about such approach(对不起,那是俄文)。
PS1 请不要将此答案和后一个链接视为我网站的广告。
PS2 这个东西应该作为评论。但由于文本格式,它作为答案发布。