2008-09-15 18 views
7

私のウェブサイトには、このようなFLVファイルのウェブカメラの録画に参加してもらいたいのですが。これは、ユーザー入力なしでLinux上で行う必要があります。これはどうすればいいですか?簡単にするために、私は両方の入力として同じflvを使用して、同じことを2回連続して行うflvを得ることを望んでいます。ウェブカメラに参加するにはFLV

それは十分簡単でしょうか? ffmpeg FAQに完全なコード例があります。

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

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 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のをデコードし、するための方法があります:問題はMEncoderでは、FLVのに参加していないようですか?

だから私はFLVのに参加するために、これまでに見つけた唯一の方法は、エイビスに参加するFLVやAVIファイル、および使用mencoderの間を行き来するためにffmpegのを使用することです:

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)ありこれを達成するにはより良い方法でなければなりません...どちらが1つですか?

e)しかし、フレームレートの問題のために、一定のフレームレートを持つflvs(私がfacebookを通して記録したようなもの)だけが正しくavisに変換されますが、これはFLVにとってはうまくいかないでしょう録音(this oneまたはthis oneなど)。これらのFLVにもこれを行う方法はありますか?

ご協力いただければ幸いです。

+0

は、mencoderのゼロで割ったものですか? – rogerdpack

答えて

4

私はそれをRubyで書き直すのは素晴らしい学習練習になると思いました。

でした。

6ヵ月後に3つの宝石、here's the released product

私はまだそれに少しでも取り組んでいますが、それは動作します。

0

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

+0

"連結"の代わりに "結合"を使用するようにテキストを編集しました。 –

-2

が、これは実際に動作するかどうか知っているが、このコマンドを使用してみてくださいいけない:

cat yourVideos/*.flv >> big.flv 

これはおそらくにそのコマンドの使用「flvtool」(あなたはグーグルでそれを見つけることができますRubyスクリプト)を実行した後ので、メタ情報を損傷します修理する。

+0

Dark Shikariが指摘しているように、これは機能しません。メタデータ情報はリセットされる可能性がありますが、結果のファイルが破損する余分なヘッダーが存在します。余分なヘッダーをスキップしても、オーディオブロックとビデオブロックにはタイムスタンプがオフセットされる必要があります。 –

0

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

私はできるだけ早くリリースします。その間に興味のある人は私に連絡することができます。

+2

40行を質問に追加して閉じてください。 – bzlm

+0

また、<お気に入りのオープンソースリポジトリをここに挿入>するプロジェクトを開始してください。 – Jacob

+0

私は自分の答えで「答えを受け入れる」ことができないので、どうすればこの質問を閉じることができるのか分かりません... –

関連する問題