4

次の (mencoder) コマンドを使用して、mp4 または 3gp ビデオ ファイルを Flash (flv) 形式 (Perl スクリプトを使用) に変換しようとしています。

mencoder test.mp4 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1000:mbd=2 -fps 20.80 -ofps 20.80 -oac mp3lame -lameopts abr:br=32 -srate 22050 -o test.flv

正常に動作しますが、携帯電話から添付された一部のファイルには問題があり、変換された FLV ファイルには音声しかありません。

また、次のように ffmpeg コマンドを使用しました。

ffmpeg -i test.mp4 -ar 22050 -acodec libmp3lame -ab 32K -r 25 -vcodec flv test.flv

この ffmpeg コマンドは、によって失敗する flv への変換に役立ちますmencoder

変換されたflvにオーディオとビデオがあるかどうかを確認する必要があるなど、いくつかの解決策を考えています。それに応じてアクションが実行されます。この問題を解決するのを手伝ってもらえますか?

ここにいくつかの詳細情報があります(ログ):

[mov,mp4,m4a,3gp,3g2,mj2 @ 0xb6b9a3a0]複数の編集リスト エントリ、a/v desync が発生する可能性あり、パッチ歓迎 ** MUXER_LAVF * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * *** 覚えておいてください: MEncoder の libavformat 多重化は現在壊れており、B フレームがあると正しくないファイルを生成する可能性があります。さらに、バグにより、MPlayer はこれらの不適切なファイルを何も問題がなかったかのように再生します。


サポートされていない PixelFormat 61 サポートされていない PixelFormat 53 サポートされていない PixelFormat 81 [flv @ 0xb6b9a3a0] ストリーム 0 のコーデックはグローバル ヘッダーを使用しませんが、コンテナー フォーマットにはグローバル ヘッダーが必要です [flv @ 0xb6b9a3a0] ストリーム 1 のコーデックはグローバル ヘッダーを使用しませんが、コンテナー フォーマットにはグローバル ヘッダーが必要です [ flv @ 0xb6b9a3a0]pts < ストリーム 0 の dts フレームの書き込み中にエラーが発生しました。

[flv @ 0xb6b9a3a0]pts < ストリーム 0 の dts フレームの書き込み中にエラーが発生しました。

[flv @ 0xb6b9a3a0]pts < ストリーム 0 の dts フレームの書き込み中にエラーが発生しました。

[flv @ 0xb6b9a3a0]pts < ストリーム 0 の dts フレームの書き込み中にエラーが発生しました。

[flv @ 0xb6b9a3a0]pts < ストリーム 0 の dts フレームの書き込み中にエラーが発生しました。

コマ飛ばし!

...................................

4

2 に答える 2

6

考えられる解決策は次のとおりです。

  1. ffmpeg または ffprobe を使用して出力ファイルを分析し、

    ffmpeg -i test.flv

A/V ストリームを含むファイルのコマンド ライン出力は次のようになります。

ffmpeg -i test.flv
ffmpeg version N-53818-gfca435f Copyright (c) 2000-2013 the FFmpeg developers
built on Jun  4 2013 01:41:53 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-liray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enabibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enablevpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil      52. 34.100 / 52. 34.100
libavcodec     55. 15.100 / 55. 15.100
libavformat    55.  8.102 / 55.  8.102
libavdevice    55.  2.100 / 55.  2.100
libavfilter     3. 74.101 /  3. 74.101
libswscale      2.  3.100 /  2.  3.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  3.100 / 52.  3.100
Input #0, flv, from 'test.flv':
Metadata:
 starttime       : 0
 totalduration   : 5162
 totaldatarate   : 583
 bytelength      : 376445710
 canseekontime   : true
 sourcedata      : BD075FAE3HH1363450117735644
 purl            :
 pmsg            :
Duration: 01:26:01.70, start: 0.000000, bitrate: 533 kb/s
Stream #0:0: Video: h264 (Main), yuv420p, 640x356, 457 kb/s, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp, 131 kb/s
  1. 正規表現一致を使用して、ffmpeg 出力に「Stream #.....: Video」および「Stream #.....: Audio」のようなものが含まれているかどうかを検出します。すべての主要なシェルと言語で正規表現を実装して使用できます。

例:

  "^\s+Stream.+Video." and ^\s+Stream.+Audio.
于 2013-07-26T13:51:19.317 に答える
3

これで問題は解決するはずです。

ffmpeg -i test.avi 2>&1 | grep Audio | awk '{print $0}' | tr -d ,

ffmpeg -i test.avi 2>&1 | grep Video | awk '{print $0}' | tr -d ,
于 2016-07-28T11:05:44.873 に答える