flash - mejor - programa para convertir swf a mp4
¿Cómo mejor convertir archivos mp4 compatibles con Flash con FFMPEG? (8)
Estoy tratando de convertir diferentes archivos a un archivo .mp4
compatible con flash con ffmpeg, pero parece que no puedo hacer que funcione. Por supuesto, el objetivo es obtener la mejor calidad con el tamaño de archivo más pequeño.
Hasta ahora tengo esto, que funciona, pero no funciona en un reproductor flash por alguna razón. El resultado no es tan bueno, ¿cómo puedo mejorar esta conversión?
Este es el comando que estoy usando:
ffmpeg -i input.file -f mp4 -vcodec mpeg4 -r 25 -b 560000 -s 610x340 -acodec aac -ac 2 -ab 64 -ar 44100 output.file
Solo algunas ideas de por qué esto podría pasar
- mp4 solo es compatible con flash 9.0.115.0 o superior, ¿qué versión está usando?
- ¿el servidor web que aloja el archivo tiene la configuración del tipo mime mp4?
¿Juega cuando se convierte a FLV y es esa una opción? Luego usarías algo como las siguientes opciones
ffmpeg -i input.file -f flv -r 25 -b 560000 -s 610x340 -acodec mp3 -ac 2 -ab 64 -ar 44100 output.file
Encontré esto (muy detallado, no estoy seguro de qué parte de él incluso) fragmento en algún lugar de la web. Está hecho para hacer dos pasadas, por lo que no generará ningún video en la primera pasada, tendrás que configurarlo para hacer -pass 2 para ejecutar la segunda pasada y sacar el video real.
ffmpeg -y -i output.mp4 -vcodec libx264 -acodec libfaac -ab 12000 -ac 2 -b 200000 -threads 2 -flags +loop -cmp +chroma -partitions 0 -subq 1 -trellis 0 -refs 1 -coder 0 -me_range 16 -g 300 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -maxrate 10M -bufsize 10M -rc_eq /’blurCplx^(1-qComp)/’ -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -s 304x224 -pass 1 yourinfile.avi
Para obtener una reproducción progresiva durante la descarga, también deberá mover los metadatos al inicio del archivo. ffmpeg pone esto al final y flash necesita esto antes de que pueda comenzar a jugar. Una herramienta útil para esto es QTIndexSwapper
FLV y MP4 son contenedores de medios.
MPEG-4 parte 2 y H.264 son códecs de video. (y H.264 da mucha mejor calidad)
libx264 es un codificador para códec H.264.
mpeg4 es un codificador para MPEG-4 parte 2 codec.
Flash solo puede reproducir el códec de video H.264 en contenedor FLV.
Entonces los params deberían ser así:
-f flv -vcodec libx264
Utilizo una secuencia de comandos para hacer esto, comenzando con mencoder. (ver el script a continuación). El truco es que la salida del archivo mp4 de ffmpeg (y del mencoder) generalmente no es compatible con flash debido a la forma en que se intercala y no ofrecen un buen control sobre este comportamiento. Entonces, produzco un archivo AVI y luego uso mp4box para remezclarlo como quiero. Aquí está mi script completo, que espera recibir un archivo .avi y produce un archivo .mp4 que se puede reproducir con flash.
#!/bin/bash
#
ORIGDIR=`pwd`
FILE=$@
VID_OUTPUT=${FILE/.AVI/.tmp.avi}
FINAL_OUTPUT=${FILE/.AVI/.mp4}
MENCODER=~/src/mplayer/svn/mplayer/mencoder
BITRATE=500
RES=640:480
LOG=mencoder.$FILE.log
TEMPDIR=`mktemp -d /tmp/transcode.XXXXXXXX`
pushd $TEMPDIR
echo "Pass 1"
PARAMS=keyint=250:bframes=0:qp_min=10:qp_max=51:turbo=1:mixed_refs=0:frameref=1:deblock=0,0:qblur=0:vbv_bufsize=10000:vbv_maxrate=10000:keyint_min=25:me=hex:me_range=16:ip_factor=1.4:pb_factor=1.3:chroma_qp_offset=0:vbv_init=0.9:ratetol=1.0:cplx_blur=20:nocabac:noweight_b:nob_pyramid:partitions=p8x8,b8x8,i4x4:no8x8dct:nossim:deadzone_inter=21:deadzone_intra=11
EXTRA_PARAMS=subq=5:trellis=0:
$MENCODER $ORIGDIR/$FILE -o $VID_OUTPUT -oac faac -srate 44100 -ovc x264 -x264encopts bitrate=$BITRATE:$PARAMS:pass=1 -vf scale=$RES 2>&1 >> $LOG
echo "Pass 2"
$MENCODER $ORIGDIR/$FILE -o $VID_OUTPUT -oac faac -srate 44100 -ovc x264 -x264encopts bitrate=$BITRATE:$PARAMS:pass=2 -vf scale=$RES 2>&1 >> $LOG
MP4Box -aviraw video $VID_OUTPUT
MP4Box -aviraw audio $VID_OUTPUT
TEMP_AUDIO=${VID_OUTPUT/.avi/}_audio.raw
AAC_AUDIO=${TEMP_AUDIO/.raw/.aac}
H264_VIDEO=${VID_OUTPUT/.avi/}_video.h264
echo TEMP is $TEMP_AUDIO
echo AAC is $AAC_AUDIO
echo H264 is $H264_VIDEO
mv $TEMP_AUDIO $AAC_AUDIO
MP4Box -add $H264_VIDEO:fps=29.97 -add $AAC_AUDIO $FINAL_OUTPUT
mv $LOG $ORIGDIR
mv $FINAL_OUTPUT $ORIGDIR
popd
echo Files left in $TEMPDIR
# rm -fr $TEMPDIR
Si está utilizando ffmpeg para crear .mp4s, busque en el directorio ffpresets / y use -vpre. Las opciones predeterminadas (para todos los códecs, pero especialmente para libx264) son muy malas y prácticamente todas deberían configurarse como algo personalizado. -vpre se encarga de la mayor parte de x264.
En mi colección de fragmentos tengo lo siguiente para esta tarea.
ffmpeg primer pase:
ffmpeg -y -i input.mp4 -pass 1 -vcodec libx264 -b 2000k -g 300 -bf 3 -refs 6 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method umh -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 3 -flags2 +dct8x8+wpred+bpyramid+mixed_refs -trellis 1 -partitions +parti8x8+parti4x4+partp8x8+partp4x4+partb8x8 -acodec libfaac -ab 128k output.mp4
ffmpeg segundo pase:
ffmpeg -y -i input.mp4 -pass 2 -vcodec libx264 -b 2000k -g 300 -bf 3 -refs 6 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method umh -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 3 -flags2 +dct8x8+wpred+bpyramid+mixed_refs -trellis 1 -partitions +parti8x8+parti4x4+partp8x8+partp4x4+partb8x8 -acodec libfaac -ab 128k output.mp4
La configuración de calidad es 2000k = velocidad de bits de video, 128k = bitrate de audio y 300 = GOP. No me preguntes cuáles son los otros parámetros. :)
Intercalado con MP4Box:
MP4Box -inter 500 output.mp4
Cree una imagen en miniatura / póster (juegue con 5 para obtener su imagen deseada)
ffmpeg -itsoffset -5 -i output.mp4 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1280x720 thumbnail.jpg
Espero que esto ayude.
Para crear los metadatos de entrelazado (que permitirán reanudar a mitad de camino, y rebobinar / avanzar), use las utilidades gpac (incluidas en medibuntu, por ejemplo) para volver a intercalar el archivo. Convierta a mp4 de la siguiente manera, con la versión 0.5 de FFmpeg o superior:
ffmpeg -f mp4 -i video.mov -b 400k video.mp4
entonces
/usr/bin/MP4Box -inter 500 video.mp4
Tada! ¡Hecho! Esto se transmitirá correctamente en JW Flv u otros reproductores flash.
En realidad, no deberías estar utilizando maxrate, especialmente un maxrate de 10000k cuando tienes tu bitrate explícitamente establecido en 200k. De hecho, mirando esto aún más cerca, realmente no creo que entiendas para qué sirve la mayoría de esas cosas :)
Para empezar, está llamando al archivo de entrada output.mp4, más el archivo de salida (que en realidad debería ser / dev / null para el pase 1) se llama yourinfile.avi y no ha configurado realmente un formato de contenedor, por lo que lo que terminaría con es un archivo avi codificado h264.
Pruebe esto para obtener videos MPEG-4 con codificación H264 de alta calidad y 1080p HD flash, primero cree un archivo con los siguientes contenidos en el mismo directorio que el video que está codificando y nómbrelo como flash-mp4.ffpreset
vcodec=libx264
b=5000k
acodec=libfaac
ab=256k
ac=2
ar=44100
coder=1
flags=+loop+mv4
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=umh
subq=8
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=2
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=3
refs=4
directpred=3
trellis=1
flags2=+wpred+mixed_refs+dct8x8+fastpskip
wpredp=2
fflags=+rtphint
profile=1
luego desde la línea de comando:
ffmpeg -y -i sourcefile.avi -fpre ./flash-mp4.ffpreset -f mp4 outputfile.f4v
Eso debería jugar perfectamente con flash 10+