17

ffmpegを使用して別のファイルをフラッシュ互換.mp4ファイルに変換しようとしていますが、うまく動作しないようです。もちろん、目的は最小のファイル サイズで最高の品質を得ることです。

これまでのところ、これは動作しますが、何らかの理由でフラッシュ プレーヤーで再生されません。結果はそれほど良くありません。どうすればこの変換を改善できますか?

これは私が使用しているコマンドです:

ffmpeg -i input.file -f mp4 -vcodec mpeg4 -r 25 -b 560000 -s 610x340 -acodec aac -ac 2 -ab 64 -ar 44100 output.file
4

8 に答える 8

4

FLV と MP4 はメディア コンテナです。

MPEG-4 part 2 と H.264 はビデオ コーデックです。(そして H.264 の方がはるかに優れた品質を提供します)

libx264 は、H.264 コーデック用のエンコーダーです。

mpeg4 は、MPEG-4 パート 2 コーデックのエンコーダーです。

Flash は、FLV コンテナでビデオ コーデック H.264 のみを再生できます。

したがって、パラメータは次のようになります。

-f flv -vcodec libx264
于 2009-03-06T10:19:05.257 に答える
4

私のスニペット コレクションには、このタスク用に次のものがあります。

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 2 番目のパス:

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

お役に立てれば。

于 2010-05-18T11:44:08.163 に答える
3

私はこれを行うために、mencoderから始めて一連のコマンドを使用します。(以下のスクリプトを参照してください)。秘訣は、ffmpeg(およびmencoder)の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
于 2009-03-06T23:03:47.213 に答える
2

ffmpeg を使用して .mp4s を作成している場合は、ffpresets/ ディレクトリを調べて -vpre を使用します。デフォルトのオプション (すべてのコーデック、特に libx264 の場合) は非常に悪く、実質的にすべてのオプションをカスタムに設定する必要があります。-vpre は、x264 のほとんどを処理します。

于 2009-04-28T00:43:31.797 に答える
1

実際には、最大レートを使用しないでください。特に、ビットレートを明示的に 200k に設定している場合は、最大レートを 10000k にしないでください。実際、これをさらに詳しく見てみると、そのほとんどが何のためにあるのかを理解していないと思います:)

まず、入力ファイル output.mp4 を呼び出し、出力ファイル (パス 1 では実際には /dev/null である必要があります) は yourinfile.avi と呼ばれ、実際にはコンテナー形式を設定していないため、何を終了するかh264でエンコードされたaviファイルです。

高品質の 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+で完全に再生されるはずです

于 2011-09-16T04:32:10.373 に答える
0

なぜこれが起こるのかについてのいくつかのアイデア

  • mp4はフラッシュ9.0.115.0以降でのみサポートされていますが、どのバージョンを使用していますか?
  • ファイルをホストしているウェブサーバーにはmp4mimeタイプが設定されていますか?

FLVに変換するときに再生されますか?それはオプションですか?次に、次のオプションのようなものを使用します

ffmpeg -i input.file -f flv -r 25 -b 560000 -s 610x340 -acodec mp3 -ac 2 -ab 64 -ar 44100 output.file
于 2009-01-17T17:39:38.193 に答える
0

私はこれを見つけました(非常に冗長で、その半分が何をしているのかさえわかりません)ウェブ上のどこかでスニペットを見つけました。これは 2 つのパスを実行するために作成されているため、最初のパスではビデオを出力しません。2番目のパスを実行して実際のビデオを出力するには、 do -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 です

于 2009-01-17T19:47:11.477 に答える