Я хочу, чтобы мой сайт присоединился к некоторым записям веб-камеры в FLV-файлах (например, этот). Это необходимо сделать в Linux без ввода пользователем. Как мне это сделать? Для простоты я буду использовать тот же самый flv, что и оба входа, в надежде получить flv, который играет одну и ту же вещь дважды подряд.Как присоединиться к веб-камере FLVs
Это должно быть достаточно простым, не так ли? В коде ffmpeg FAQ есть даже полный код.
Ну, трубы, похоже, приносят мне проблемы (как на моем Mac, работающем на Leopard, так и на Ubuntu 8.04), поэтому давайте будем держать его простым и использовать обычные файлы. Кроме того, если я не укажу скорость 15 кадров в секунду, визуальная часть играет 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
Ну, используя это будет работать для аудио, но я только получить видео в первый раз. Кажется, это относится к любому flv, который я бросаю как input.flv, включая кинематографисты, которые поставляются с red5.
a) Почему сценарий примера не работает так, как рекламируется, в частности, почему я не получаю все видео, которое я ожидаю?
b) Почему мне нужно указать частоту кадров, в то время как проигрыватель Wimpy может воспроизводить FLV с правильной скоростью?
Единственный способ, которым я нашел присоединиться к двум flvs, - использовать 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
с) Есть ли способ для 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, но это не сработает для flvs. Кажется, (например, this one или this one). Есть ли способ сделать это для этих flvs тоже?
Любая помощь будет очень признательна.
является то, что деление на ноль в mencoder? – rogerdpack 2015-03-18 15:34:42