2008-09-15 5 views
7

Я хочу, чтобы мой сайт присоединился к некоторым записям веб-камеры в 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 тоже?

Любая помощь будет очень признательна.

+0

является то, что деление на ноль в mencoder? – rogerdpack 2015-03-18 15:34:42

ответ

4

Я думал, что это будет хорошее учебное упражнение, чтобы переписать его в Ruby.

Это было.

Шесть месяцев спустя и три драгоценных камня позже, here's the released product.

Я все еще немного работаю над этим, но он работает.

0

Здесь вы столкнулись с очень тонкой проблемой, поскольку большинство видео и аудиоформатов (особенно в обычных контейнерах) используют «глобальные заголовки», что означает, что в начале файла у них есть один заголовок, который определяет информацию сжатия (например, ширину , высота и т. д.) для всего файла. Совпадение двух потоков будет явно терпеть неудачу, так как теперь у него будет два заголовка вместо одного, и мультиплеер может не понравиться. Преобразование в AVI, вероятно, разрешает проблему в вашем случае, потому что mencoder имеет код для concat AVI - этот код правильно обрабатывает проблему заголовка.

+0

Я редактировал свой текст, чтобы использовать «join» вместо «concatenate». – 2008-09-16 22:17:47

-2

не знаю, будет ли это на самом деле работает, но попробуйте использовать следующую команду:

cat yourVideos/*.flv >> big.flv 

это, вероятно, повредить метаинформацию поэтому после выполнения этого использовать команду «flvtool» (рубиновый скрипт, который вы можете найти его с помощью Google) в почини это.

+0

Как отметил Dark Shikari, это не сработает. Информация метаданных может быть сброшена, но будут дополнительные заголовки, которые повредят результирующий файл. Даже если мы пропустим дополнительные заголовки, у аудио- и видеоблоков есть временные метки, которые необходимо смещать. – 2008-09-27 04:48:15

0

После размещения моего вопроса о рассылке mencoder, пробовав другие вещи, я прибегал к написанию собственного инструмента! Я начал с flvtool и после некоторого копания в коде и написания около 40 строк кода, он работает без потери качества (так как нет перекодирования).

Я выпущу его как можно скорее, тем временем любой заинтересованный может связаться со мной.

+2

Пожалуйста, добавьте эти 40 строк на ваш вопрос и закройте его. – bzlm 2008-10-01 13:06:58