Подтвердить что ты не робот

Преобразование сжатого swf в mp4

Я ищу пакетный пакет script для преобразования swf в mp4 без потерь. Я пытался использовать как ffmpeg, так и ручной тормоз, но, видимо, swf сжат, и я не могу их преобразовать.

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

HandBrakeCLI -i source -o destination

Я знаю, что я использую такой инструмент, как xilisoft, но у меня более 3000 видеороликов, и вам нужно будет запускать это автоматически. Есть ли алгоритм script/, который может помочь мне автоматизировать этот процесс?

4b9b3361

Ответ 1

Получить gnash:

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

Вам понадобится куча зависимостей, прежде чем вы сможете ее построить (должен быть способен apt-получить их все):

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/[email protected] \
                   -A /tmp/out.wav \                      
                   -P "FlashVars=myURL=http://example.com/blah&online=true" \
                   http://example.com/blah/some.swf \

Это выведет /tmp/out.raw (это bgra aka rgb32 video) со скоростью 30 кадров в секунду (бит @30) и /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 должно знать размеры colourspace (rga32) и входные fps. Мы говорим, что он объединяет аудио (160 кбит/с mp3), выводит видео на 30 кадров в секунду

Для получения без потерь mp4 вам понадобятся дополнительные флаги.

Ответ 2

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

Ответ 3

Вы можете использовать этот script:

#!/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

Работает для меня!

Ответ 4

Я просто хотел бы сказать, что нет надежного способа конвертировать SWF в MP4. Потому что SWF файл это вообще программа. В простейшем случае SWF файл содержит только видео (и аудио тоже). Решения, предоставленные jaygooby, Альфредом и Алексеем Концевичем, отлично работают в таких случаях.

Но многие SWF файлы содержат собственные кнопки Play/Pause, регулятор громкости и т.д. Когда вы открываете такой файл в Gnash (или любом другом плеере), который вам нужен чтобы выполнить дополнительное действие (например, нажмите на встроенную кнопку Play), чтобы действительно начать играть. Да, это можно каким-то образом автоматизировать (например, Xvfb, xdotool и т.д.). В то же время есть много предостережений (особенно аудиопоток). Я даже написал статью о таком подходе (что по-русски).


PS1 Пожалуйста, не рассматривайте этот ответ и последнюю ссылку как рекламу моего сайта.

PS2 Этот материал должен идти как комментарий. Но он опубликован как ответ из-за текстового формата.