我正在寻找一种批处理脚本,将SWF转换为无损的MP4格式。我尝试过使用FFmpeg和Handbrake,但显然SWF是压缩的,我不能以这种方式进行转换。
ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv
HandBrakeCLI -i source -o destination
我知道我可以使用像 Xilisoft 这样的工具,但是我有超过 3000 个视频需要自动处理。是否有脚本/算法可以帮助我自动化这个过程?
我正在寻找一种批处理脚本,将SWF转换为无损的MP4格式。我尝试过使用FFmpeg和Handbrake,但显然SWF是压缩的,我不能以这种方式进行转换。
ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv
HandBrakeCLI -i source -o destination
我知道我可以使用像 Xilisoft 这样的工具,但是我有超过 3000 个视频需要自动处理。是否有脚本/算法可以帮助我自动化这个过程?
获取Gnash:
git clone git://git.sv.gnu.org/gnash.git
在构建之前,您需要许多依赖项(应该都可以使用apt-get获取):
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.raw(即bgra或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)的尺寸和输入帧速率。我们告诉它将音频(160kbps mp3)合并,以30fps再次渲染视频。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
sudo apt-get install libav-tools
可以正常工作,而不是上面显示的方式。 - nightcod3r#!/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
开关。 - Aleksey Kontsevich