Как лучше всего конвертировать Flash файлы mp4 с FFMPEG?
Я пытаюсь преобразовать разные файлы во флэш-совместимый файл .mp4
с ffmpeg, но я не могу заставить его работать. Конечно, целью является получение максимального качества с наименьшим размером файла.
Пока у меня есть это, что работает, но по какой-то причине оно не играет в флеш-плеер. Результат не настолько велик, как я могу улучшить это преобразование?
Это команда, которую я использую:
ffmpeg -i input.file -f mp4 -vcodec mpeg4 -r 25 -b 560000 -s 610x340 -acodec aac -ac 2 -ab 64 -ar 44100 output.file
Ответы
Ответ 1
Чтобы создать метаданные перемежения (которые позволят возобновить средний поток и перематывать /fforwards ), используйте утилиты gpac (например, включенные в medibuntu) для повторного чередования файла. Преобразуйте в mp4 следующим образом: FFmpeg версии 0.5 или лучше:
ffmpeg -f mp4 -i video.mov -b 400k video.mp4
затем
/usr/bin/MP4Box -inter 500 video.mp4
Тада! Готово! Это будет правильно воспроизводиться в JW Flv или других флэш-плеерах.
Ответ 2
FLV и MP4 представляют собой контейнеры для носителей.
MPEG-4 часть 2 и H.264 являются видеокодеками. (и H.264 дает гораздо лучшее качество)
libx264 является кодером для кодека H.264.
mpeg4 является кодером для кодека MPEG-4 часть 2.
Flash может воспроизводить только видеокодек H.264 в контейнере FLV.
Итак, параметры должны быть такими:
-f flv -vcodec libx264
Ответ 3
В моей коллекции фрагментов у меня есть следующее для этой задачи.
ffmpeg первый проход:
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 второй проход:
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
Настройка качества: 2000k = битрейт видео, 128k = аудио bitrat и 300 = GOP. Не спрашивайте меня, каковы другие параметры.:)
Чередование с MP4Box:
MP4Box -inter 500 output.mp4
Создайте изображение миниатюры/плаката (поиграйте с 5 для получения желаемого изображения)
ffmpeg -itsoffset -5 -i output.mp4 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1280x720 thumbnail.jpg
Надеюсь, что это поможет.
Ответ 4
Я использую последовательность команд для этого, начиная с mencoder. (см. ниже script). Фокус в том, что вывод файла mp4 файла ffmpeg (и mencoder's) обычно не совместим с флэш-памятью из-за того, как он чередуется, и они не обеспечивают хороший контроль над этим поведением. Итак, я создаю AVI файл, а затем использую mp4box для того, чтобы сделать его так, как я хочу. Здесь мой полный script, который ожидает, что ему будет предоставлен .avi файл, и создаст flash-playable.mp4 файл.
#!/bin/bash
#
ORIGDIR=`pwd`
[email protected]
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
Ответ 5
Если вы используете ffmpeg для создания .mp4s, загляните в каталог ffpresets/и используйте -vpre. Параметры по умолчанию (для всех кодеков, но особенно libx264) очень плохие, и практически все они должны быть настроены на что-то обычное. -vpre позаботится о большей части для x264.
Ответ 6
На самом деле вы не должны использовать maxrate, особенно не максимальный 10000k, если у вас установлен битрейт, равный 200k. На самом деле, глядя на это еще ближе, я действительно не думаю, что вы понимаете, для чего больше всего подходит:)
Для начала вы вызываете входной файл output.mp4, а выходной файл (который должен быть /dev/null для pass 1) называется yourinfile.avi, и вы на самом деле не задали формат контейнера, поэтому вы в конечном итоге получите файл avi, закодированный h264.
Попробуйте это для высококачественных 1080p HD-совместимых h264-кодированных видео MPEG-4, сначала создайте файл со следующим содержимым в том же каталоге, что и кодируемое видео, и назовите его как-то вроде 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
затем из командной строки:
ffmpeg -y -i sourcefile.avi -fpre ./flash-mp4.ffpreset -f mp4 outputfile.f4v
Это должно отлично сочетаться со вспышкой 10 +
Ответ 7
Просто некоторые идеи, почему это может случиться
- mp4 поддерживается только в flash 9.0.115.0 или выше, какую версию вы используете?
- У веб-сервера, на котором размещен файл, установлена настройка типа mp4 mp4?
воспроизводится ли он при преобразовании в FLV и является ли это вариантом? Затем вы использовали бы что-то вроде следующих параметров
ffmpeg -i input.file -f flv -r 25 -b 560000 -s 610x340 -acodec mp3 -ac 2 -ab 64 -ar 44100 output.file
Ответ 8
Я нашел это (очень многословное, я не уверен, что половина его даже делает) фрагмент где-то в Интернете. Он сделал для выполнения двух проходов, поэтому на первом проходе он не выводит никакого видео, вам нужно будет установить его -pass 2 для запуска второго прохода и вывода фактического видео.
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
Чтобы получить прогрессивное воспроизведение во время загрузки, вам также нужно будет переместить метаданные в начало файла. ffmpeg ставит это в конец, и флэш нуждается в этом, прежде чем он начнет играть. Полезным инструментом для этого является QTIndexSwapper