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

Как лучше всего конвертировать 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
4b9b3361

Ответ 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