Quiero que mi sitio web se una a algunas grabaciones de cámara web en archivos FLV (como esta). Esto debe hacerse en Linux sin la intervención del usuario. ¿Cómo hago esto? En aras de la simplicidad, usaré la misma flv como ambas entradas con la esperanza de obtener una flv que reproduzca lo mismo dos veces seguidas.Cómo unir cámara web FLV
Eso debería ser lo suficientemente fácil, ¿no? Incluso hay un ejemplo de código completo en el ffmpeg FAQ.
Bueno, las pipas parecen darme problemas (tanto en mi Mac con Leopard como en Ubuntu 8.04) así que vamos a mantenerlo simple y usar archivos normales. Además, si no especifico una velocidad de 15 fps, la parte visual juega extremely fast. por lo tanto se convierte en el script de ejemplo:
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
Bueno, usando esto funcionará para el audio, pero sólo conseguir el vídeo de la primera vez. Este parece ser el caso para cualquier flv arrojo como input.flv, incluidos los avances de película que vienen con red5.
a) ¿Por qué el script de ejemplo no funciona como se anuncia, en particular por qué no obtengo todo el video que estoy esperando?
b) ¿Por qué tengo que especificar una velocidad de cuadros mientras que el jugador Wimpy puede jugar la flv a la velocidad correcta?
La única forma en que encontré para unir dos flvs fue utilizar el mencoder. El problema es que, mencoder no parece unirse a flvs:
mencoder input.flv input.flv -o output.flv -of lavf -oac copy \
-ovc lavc -lavcopts vcodec=flv
recibo una excepción de coma flotante ...
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) ¿Hay una manera de mencoder para decodificar y codificar correctamente flvs?
Así que la única manera que he encontrado hasta el momento para unirse a FLV, es el uso de FFmpeg para ir y venir entre FLV y AVI, y usar mencoder para unirse al 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) No debe ser una mejor manera de lograr esto ... ¿Cuál?
e) Debido al problema de la velocidad de fotogramas, sin embargo, solo flvs con velocidad de fotogramas constante (como la que grabé a través de facebook) se convertirán correctamente a avis, pero esto no funcionará para las flvs que parezco grabación (como this one o this one). ¿Hay alguna manera de hacer esto para estos flvs también?
Cualquier ayuda sería muy apreciada.
es que una división por cero en el mencoder? – rogerdpack