To create the interleaving metadata (which will allow for mid stream resumes, and rewinds/fforwards), use the gpac utilities (included in medibuntu for example) to re-interleave the file. Convert to mp4 as follows, with FFmpeg version 0.5 or better:
ffmpeg -f mp4 -i video.mov -b 400k video.mp4
then
/usr/bin/MP4Box -inter 500 video.mp4
Tada! Done! This will stream properly in JW Flv or other flash players.
FLV и MP4 являются контейнерами медиа.
часть 2 и H.264 MPEG-4 видеокодеки. (и H.264 дает намного лучшее качество)
, libx264 является кодером для кодека H.264.
mpeg4 является кодером для кодека MPEG-4 части 2.
Flash может только играть видеокодек H.264 в контейнере FLV.
, Таким образом, параметрические усилители должны быть похожими на это:
-f flv -vcodec libx264
Я использую последовательность команд, чтобы сделать это, начиная с mencoder. (см. сценарий ниже). Прием - то, что ffmpeg's (и mencoder's) mp4 вывод файла обычно не является флэш-памятью, совместимой из-за способа, которым это чередовано, и они не предлагают хорошее управление этим поведением. Так, я произвожу файл AVI и затем использую mp4box для перемультиплексирования его способ, которым я хочу. Вот мой полный сценарий, который ожидает быть данным .avi файл и производит играемый флэш-памятью .mp4 файл.
#!/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
Просто некоторые идеи того, почему это могло бы произойти
это играет при преобразовании в FLV, и это - опция? Вы тогда использовали бы что-то как следующие опции
ffmpeg -i input.file -f flv -r 25 -b 560000 -s 610x340 -acodec mp3 -ac 2 -ab 64 -ar 44100 output.file
Я нашел это (очень подробный, я не уверен, что половина из него даже делает), отрывок где-нибудь в сети. Это сделано для того, чтобы сделать две передачи, таким образом, это не произведет видео на первой передаче, необходимо будет установить его, чтобы сделать - передают 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
Если вы используете ffmpeg для создания .mp4s, посмотрите в каталог ffpresets / и используйте -vpre. Параметры по умолчанию (для всех кодеков, но особенно для libx264) очень плохие, и практически все они должны быть настроены на что-то особенное. -vpre заботится о большей части этого для x264.
В моей коллекции фрагментов у меня есть следующее для этой задачи.
Первый проход 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 = битрейт звука и 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
Надеюсь, это поможет.