質問

私の 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

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

a) サンプル スクリプトが宣伝どおりに動作しないのはなぜですか。特に、期待したすべてのビデオが取得できないのはなぜですか?

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

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

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 (私が録画したものなど) のみが使用可能です。 フェイスブック)は正しくavisに変換されますが、これは私が記録していると思われるFLV(たとえば、 これです または これです)。これらの FLV に対してもこれを行う方法はありますか?

助けていただければ幸いです。

役に立ちましたか?

解決

これを Ruby で書き直すのは良い勉強になるだろうと思いました。

そうだった。

6か月後、3つの宝石が経過した後、 発売された商品はこちら.

まだ少し作業中ですが、うまくいきます。

他のヒント

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

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

できるだけ早くリリースしますので、それまでの間、興味のある方は私に連絡してください。

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

cat yourVideos/*.flv >> big.flv

これはメタ情報を損傷する可能性があるため、コマンドを実行した後、「flvtool」(Google で見つけられる Ruby スクリプト)を使用して修正します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top