web-dev-qa-db-fra.com

Convertir swf compressé en mp4

Je cherche un script batch pour convertir swf en mp4, sans perte. J'ai essayé d'utiliser à la fois ffmpeg et handbrake, mais apparemment swf est compressé et je ne peux pas les convertir de cette façon.

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

HandBrakeCLI -i source -o destination

Je sais que j'utilise un outil comme xilisoft, mais j'ai plus de 3000 vidéos et je devrais l'exécuter automatiquement. Existe-t-il un script/algorithme qui peut m'aider à automatiser ce processus?

18
skmvasu

Obtenez grincement:

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

Vous aurez besoin d'un tas de dépendances avant de pouvoir le construire (devrait être capable de les obtenir toutes):

libsdl-dev
libboost-dev
libagg-dev

Ensuite, configurez et construisez le dumper vidéo gnash:

cd gnash

./autogen.sh

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

make

vous pouvez ensuite pointer dump-gnash sur un swf et il restituera la vidéo et l'audio brutes

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 \

Cela écrira /tmp/out.raw (qui est la vidéo bgra aka rgb32) à 30 ips (le @30 bit) et /tmp/out.wav

Ceux-ci doivent être combinés, par exemple, mp4 utilisant:

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

parce que sa vidéo brute, ffmpeg doit connaître les dimensions de l'espace chromatique (rga32) et les fps d'entrée. Nous lui disons de combiner l'audio (mp3 160kbps), de restituer la vidéo à 30fps

Vous aurez besoin de drapeaux supplémentaires pour obtenir le mp4 sans perte.

21
jaygooby
OS: Ubuntu (Linux)

Je ne sais pas exactement si c'est sans perte mais au moins j'ai réussi à faire fonctionner la partie convert (ffmpeg).

dépendances

Sudo apt-get install ffmpeg swftools

Décompresser

J'ai d'abord décompressé en utilisant swfcombine :

swfcombine -d file.swf -o file_new.swf

Convertir

Ensuite, j'ai converti en utilisant ffmpeg qui pourrait ne pas être sans perte avec ces paramètres

ffmpeg -i file.swf video.mp4
9
Alfred

Vous pouvez utiliser ce 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

Travaille pour moi!

3
Aleksey Kontsevich

Je voudrais juste dire qu'il n'y a pas de moyen fiable pour convertir SWF en MP4. Parce que le fichier SWF est un programme en général. Dans le cas le plus simple, le fichier SWF ne contient que de la vidéo (et de l'audio également). Les solutions fournies par jaygooby , Alfred et Aleksey Kontsevich fonctionnent parfaitement dans de tels cas.

Mais de nombreux fichiers SWF contiennent leurs propres boutons Lecture / Pause , contrôles de volume , etc. Lorsque vous ouvrez un tel fichier dans Gnash (ou n'importe quel lecteur), vous devez effectuer une action supplémentaire ( par exemple, cliquez sur un bouton de lecture intégré ) pour vraiment commencer à jouer. Oui, il est possible d'automatiser ce genre de choses d'une certaine manière (par exemple Xvfb, xdotool, etc.). En même temps, il y a beaucoup de mises en garde (en particulier le flux audio). J'ai même écrit n article sur une telle approche (c'est en russe).


PS1 Veuillez ne pas considérer cette réponse et ce dernier lien comme une publicité pour mon site.

PS2 Ce truc devrait aller comme commentaire. Mais il est publié comme réponse en raison du format texte.

2
flaz14