我希望我的网站加入FLV文件中的一些网络摄像头录像(就像这个).这需要在没有用户输入的情况下在Linux上完成.我该怎么做呢?为了简单起见,我将使用相同的flv作为两个输入,希望获得连续两次播放相同内容的flv.
这应该很容易,对吧?ffmpeg FAQ中甚至还有一个完整的代码示例.
好吧,管道似乎给我带来了问题(在我的运行Leopard和Ubuntu 8.04的mac上)所以让我们保持简单并使用普通文件.此外,如果我没有指定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
好吧,使用它可以用于音频,但我只是第一次看到视频.这似乎是我输入的任何flv作为input.flv,包括red5附带的电影剧本.
a)为什么示例脚本不像宣传的那样工作,特别是为什么我没有得到我期待的所有视频?
b)为什么我必须指定帧率,而Wimpy播放器可以以正确的速度播放flv?
我发现加入两个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有没有办法正确解码和编码flvs?
所以我到目前为止找到加入flvs的唯一方法是使用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不起作用(像这样一个或这个).有没有办法为这些flv做这个?
任何帮助将非常感激.