8

私の Web サイトを FLV ファイル (このようなもの) の Web カメラの記録に参加させたいと考えています。これは、ユーザー入力なしで Linux で実行する必要があります。どうすればいいですか?簡単にするために、同じものを 2 回続けて再生する flv を取得できるように、両方の入力として同じ flv を使用します。

それは簡単なはずですよね?ffmpeg FAQには完全なコード例もあります。

さて、パイプが問題を引き起こしているようです (Leopard を実行している Mac と Ubuntu 8.04 の両方で) ので、単純にして通常のファイルを使用しましょう。また、レートを 15 fps に指定しないと、ビジュアル部分の再生が非常に高速になります。したがって、スクリプト例は次のようになります。

ffmpeg -i input.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 \
  - > temp.a < /dev/null
ffmpeg -i input.flv -an -f yuv4mpegpipe - > temp.v < /dev/null
cat temp.v temp.v > all.v
cat temp.a temp.a > all.a
ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
  -f yuv4mpegpipe -i all.v -sameq -y output.flv

ええと、これを使用するとオーディオには機能しますが、最初はビデオしか取得できません。これは、red5 に付属する映画のティーザーを含め、input.flv としてスローするすべての flv に当てはまるようです。

a) サンプル スクリプトが宣伝どおりに機能しないのはなぜですか。特に、期待するすべてのビデオが得られないのはなぜですか?

b) Wimpy プレイヤーが適切な速度で flv を再生できるのに、フレームレートを指定する必要があるのはなぜですか?

2 つの flv に参加する唯一の方法は、mencoder を使用することでした。問題は、mencoder が flv に参加していないように見えることです。

mencoder input.flv input.flv -o output.flv -of lavf -oac copy \
-ovc lavc -lavcopts vcodec=flv

浮動小数点例外が発生します...

MEncoder 1.0rc2-4.0.1 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Xeon(R) CPU 5150 @ 2.66GHz (Family: 6, Model: 15, Stepping: 6)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 SSE SSE2

success: format: 0 data: 0x0 - 0x45b2f
libavformat file format detected.
[flv @ 0x697160]Unsupported audio codec (6)
[flv @ 0x697160]Could not find codec parameters (Audio: 0x0006, 22050 Hz, mono)
[lavf] Video stream found, -vid 0
[lavf] Audio stream found, -aid 1
VIDEO: [FLV1] 240x180 0bpp 1000.000 fps 0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:44 fourcc:0x31564C46 size:240x180 fps:1000.00 ftime:=0.0010
** MUXER_LAVF *****************************************************************
REMEMBER: MEncoder's libavformat muxing is presently broken and can generate
INCORRECT files in the presence of B frames. Moreover, due to bugs MPlayer
will play these INCORRECT files as if nothing were wrong!
*******************************************************************************
OK, exit
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffflv] vfm: ffmpeg (FFmpeg Flash video)
==========================================================================
audiocodec: framecopy (format=6 chans=1 rate=22050 bits=16 B/s=0 sample-0)
VDec: vo config request - 240 x 180 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
videocodec: libavcodec (240x180 fourcc=31564c46 [FLV1])
VIDEO CODEC ID: 22
AUDIO CODEC ID: 10007, TAG: 0
Writing header...
[NULL @ 0x67d110]codec not compatible with flv
Floating point exception

c) mencoder が flv を正しくデコードおよびエンコードする方法はありますか?

したがって、これまでに見つけた flv に参加する唯一の方法は、ffmpeg を使用して flv と avi の間を行き来し、mencoder を使用して avis に参加することです。

ffmpeg -i input.flv -vcodec rawvideo -acodec pcm_s16le -r 15 file.avi
mencoder -o output.avi -oac copy -ovc copy -noskip file.avi file.avi
ffmpeg -i output.avi output.flv

d) これを達成するためのより良い方法があるはずです...どれですか?

e) ただし、フレームレートの問題により、フレームレートが一定の flv ( facebookで記録したものなど) のみが avis に正しく変換されますが、記録しているように見える flv (このようなもの) では機能しません。1つまたはこれ)。これらの flv に対してもこれを行う方法はありますか?

どんな助けでも大歓迎です。

4

4 に答える 4

4

それを Ruby で書き直すのは、いい勉強になると思いました。

そうだった。

半年後、3つの逸品を経て、リリースされた製品がこちらです

私はまだそれに少し取り組んでいますが、うまくいきます。

于 2009-04-22T22:23:52.107 に答える
0

ほとんどのビデオおよびオーディオ形式 (特に通常のコンテナー) は「グローバル ヘッダー」を使用するため、ここで非常に微妙な問題が発生します。つまり、ファイルの先頭に、圧縮情報 (幅、高さなど) を指定する単一のヘッダーがあります。 ) ファイル全体。2 つのストリームを連結すると、明らかに失敗します。ヘッダーが 1 つではなく 2 つになり、マルチプレクサがこれを好まない可能性があるからです。mencoder には AVI を連結するコードがあるため、AVI に変換すると問題が解決する可能性があります。そのコードはヘッダーの問題を適切に処理します。

于 2008-09-16T10:21:09.093 に答える
0

mencoder のメーリング リストに質問を投稿し、他のことを試した後、独自のツールを作成することにしました。flvtoolコードを掘り下げて約40行のコードを書き始めたところから始めて、品質を損なうことなく動作します(トランスコーディングがないため)。

できるだけ早くリリースしますので、興味のある方はご連絡ください。

于 2008-09-27T04:45:37.867 に答える
-2

これが実際に機能するかどうかはわかりませんが、次のコマンドを使用してみてください。

cat yourVideos/*.flv >> big.flv

これはおそらくメタ情報を損傷するため、そのコマンドを実行した後、「flvtool」(Googleで見つけることができるrubyスクリプト)を使用して修正してください。

于 2008-09-20T07:32:13.200 に答える