LINUX.ORG.RU

ffmpeg запись с IP камеры


1

1

пишу таким способом

ffmpeg -t $DURATION -analyzeduration 0 -i rtsp://"$VIP"/live1.sdp -vcodec libxvid -b 2M -pix_fmt yuv420p -acodec copy -y $DIR/video_"$LABEL"_"$TIME".avi > /dev/null
все вроде бы нормально и по крайней мере 1 минуту файл получается «рабочим» если время записи уходит до 30 минут и больше, то при прекращении записи по времени или принудительно выходом - размер файла УДВАИВАЕТСЯ (т.е. тот размер что показывается во время кодирования) и получается «битый» индекс.
какие параметры следует посмотреть?

★★★

Кстати если вы пытаетесь таким способом сделатб систему видеонаблюдения советую обратить внимание на пакет motion.

disee ★★★
()
Ответ на: Да-да от UFO-man

да, есть. Если не ошибаюсь опции netcam. И там хорошая функция распознования движения. Я лично сделал что бы моушен снимал только во время движения. Мне кажется так намного рациональнее... Кстати если моушен правильно собран то он поддерживает и запись информации в базу даных (например в mysql)

disee ★★★
()
Ответ на: комментарий от disee

Ога, сам себе делаю. Осталось только замаскировать камеру и впаять ИК диод (ИК фильтр я из камеры выломал). Сейчас камера стоит внутри квартиры, за 2 дня набралось всего 300 МБ видео (2 кота и собака включают постоянно). У одного моего друга вынесли комп, на который писалось видеонаблюдение, так что я собираюсь вмуровать в стену флешку, на которую будет писаться видео :)

UFO-man
()
Ответ на: комментарий от UFO-man

Или есть другой вариант: архивировать данные и засылать по фтп куда нибудь далеко на временное хранение

disee ★★★
()
Ответ на: комментарий от disee

Я об этом думал, но злоумышленники могут рубануть свет и нет. И нужен надежный хостинг и нет, хотя способы по надёжности примерно равные.

UFO-man
()
Ответ на: комментарий от UFO-man

У меня для таких случаев стоит ИБП и подключен резервный 3g модем, который помимо информирования по sms еще служит резервным каналом данных

disee ★★★
()
Ответ на: комментарий от disee

Чёрт побери

Если всё это дома, а не на работе, то у тебя куда ламповее, чем у меня дома. Ну а что с меня взять? Кодер же.

UFO-man
()
Ответ на: комментарий от disee

если вы пытаетесь таким способом сделатб систему видеонаблюдения советую обратить внимание на пакет motion.

нет, мне нужна только запись с некоторых камер. камеру купил DCS-2103 которая может писать на флешку - это если кому нужно отдельную систему хранения.

wolverin ★★★
() автор топика
Ответ на: комментарий от disee

Я лично сделал что бы моушен снимал только во время движения.

может вы и правы, но для меня это не кретично + не все помещение к сожалению попадает в объектив, а звук тоже не маловажен.

wolverin ★★★
() автор топика
Ответ на: комментарий от testuser123

testuser123
Дело может быть в аудио поиграйся с -ar или -ab.

похоже дело действительно в аудио (кодек G726 с камеры идет), без звука видео нормальное получается часовое, а с ним косяк, причем задание ar 32r и ab 8000 не помогает ((

wolverin ★★★
() автор топика
Ответ на: комментарий от testuser123

testuser123
libfaac

$ ffmpeg -t 10 -analyzeduration 0 -i rtsp://video-sz/live1.sdp -vcodec libxvid -b 2M -pix_fmt yuv420p -qmax 10 -acodec libfaac -ab 32k -ar 8000 -y video.avi
ffmpeg version 0.7.13, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jun 13 2012 14:14:09 with gcc 4.4.5
  configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.123. 0 / 52.123. 0
  libavformat  52.111. 0 / 52.111. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
[g726 @ 0x16eefa0] Unsupported number of bits 0
[rtsp @ 0x16e6620] max_analyze_duration 0 reached at 0
[rtsp @ 0x16e6620] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 150.00 (150/1) -> 75.00 (150/2)
Input #0, rtsp, from 'rtsp://video-sz/live1.sdp':
  Metadata:
    title           : RTSP/RTP stream 1 from DCS-2103
    comment         : live1.sdp
  Duration: N/A, start: 0.022667, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuvj420p, 1024x768 [PAR 1:1 DAR 4:3], 75 tbr, 90k tbn, 150 tbc
    Stream #0.1: Audio: g726, 8000 Hz, 1 channels
Incompatible sample format '(null)' for codec 'libfaac', auto-selecting format 's16'
[buffer @ 0x16f4e20] w:1024 h:768 pixfmt:yuvj420p tb:1/1000000 sar:1/1 sws_param:
[buffersink @ 0x16e61c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x16df7a0] w:1024 h:768 fmt:yuvj420p -> w:1024 h:768 fmt:yuv420p flags:0x4
[g726 @ 0x16eefa0] Unsupported number of bits 0
Output #0, avi, to 'video.avi':
    Stream #0.0: Video: mpeg4, yuv420p, 1024x768 [PAR 1:1 DAR 4:3], q=2-10, 2000 kb/s, 90k tbn, 75 tbc
    Stream #0.1: Audio: libfaac, 8000 Hz, 1 channels, s16, 32 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Error while opening decoder for input stream #0.1

в принципе уже пробовал разные кодеки, не хочет ничем G726 перекодировать ((

wolverin ★★★
() автор топика
Ответ на: комментарий от testuser123

testuser123

про интерфейс поясните подробнее что нужно сделать?

(bit_rate+sample_rate/2)/sample_rate - 2

да это я читал, пробовал разные варианты ar и ab - ничего не меняется. что конкретно нужно задать - непонятно. сейчас сделал по 10 минут запись - нормально открывается, но это же не выход (

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

про интерфейс поясните подробнее что нужно сделать?

Я не внимательно посмотрел, все должно работать faac входит в libavcodec.

Ос случайно не убунта, в таком случае есть смысл поставить libavcodec-extra-53.

testuser123
()
Ответ на: комментарий от wolverin

И еще один момент, если перекодировать не поток а файл из g726 то ошибка остается?

testuser123
()
Ответ на: комментарий от testuser123

Ос случайно не убунта, в таком случае есть смысл поставить libavcodec-extra-53.

Debian 6.0.6

$ sudo aptitude show libavcodec52
Пакет: libavcodec52
Состояние: установлен
Автоматически установлен: да
Версия: 5:0.7.13-dmo2
Приоритет: необязательный
Раздел: libs
Сопровождающий: Christian Marillat <marillat@deb-multimedia.org>
Размер в распакованном виде: 7 029 k
Зависимости: libavutil50 (>= 5:0.7.13), libc6 (>= 2.3.2), libdirac-encoder0, libfaac0 (>= 1.28), libgsm1 (>= 1.0.13), libmp3lame0 (>= 3.98.2-0.5),
                        libopencore-amrnb0, libopencore-amrwb0, libopenjpeg2, libschroedinger-1.0-0 (>= 1.0.0), libspeex1 (>= 1.2~beta3-1), libtheora0 (>=
                        1.0), libva1, libvorbis0a (>= 1.1.2), libvorbisenc2 (>= 1.1.2), libvpx0 (>= 0.9.6), libx264-118 (>= 3:0.118.2085+git8a62835),
                        libxvidcore4 (>= 1:1.0.0-0.0), zlib1g (>= 1:1.1.4)
Конфликтуют: libavcodeccvs51
Заменяют: libavcodeccvs51
Описание: Library to encode decode multimedia streams - runtime files.
 ffmpeg is a hyper fast real time audio/video encoder, a streaming server and a generic audio and video file converter.

 It can grab from a standard Video4Linux video source and convert it into several file formats based on DCT/motion compensation encoding. Sound is compressed
 in MPEG audio layer 2 or using an AC3 compatible stream.
Сайт: http://ffmpeg.mplayerhq.hu/

если перекодировать не поток а файл из g726 то ошибка остается?

если прогнать через ffmpeg полученый файл, то индекс восстанавливается + файл еще на 10% увеличивается - если я все правильно помню. впрочем VLC под винду которым смотрю (другие плееры вообще не могут «слушать» G726) сам предлагает восстановить индекс. идеально было бы конечно вообще избавиться в конечном файле от G726.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

Попробуй поставить libavcodec-extra-53 вместо libavcodec52. Насчет индекса ожидаемо, так как analyzeduration. Конечный файл успешно перегоняется в aac?

testuser123
()

Можно мне тут немного примазаться? Есть у кого-нибудь рабочие примеры для ffmpeg по кодированию потока для архива камер видеонаблюдения? Пишем фрагментами 1 час, 800x600, хочется добиться оптимального размера при незапредельной нагрузке на проц.

Hokum_new
()
Ответ на: комментарий от testuser123

Попробуй поставить libavcodec-extra-53 вместо libavcodec52. Насчет индекса ожидаемо, так как analyzeduration. Конечный файл успешно перегоняется в aac?

---
такого кодека в репозетории нет
analyzeduration - не понял как он может влиять - стоял по дефолту 5 сек, поставил в 0 - разницы никакой
не пробовал конечный файл перегонять, но думаю будет тоже самое - невозможность декодировать входной поток.

хочется добиться оптимального размера при незапредельной нагрузке на проц.

не запредельная это сколько? 40-50% грузит ядро у меня. самый оптимальный размер получался при кодировании в h264, правда с ускоренным видео потоком почему то.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

не пробовал конечный файл перегонять, но думаю будет тоже самое - невозможность декодировать входной поток.

как и говорил

$ ffmpeg -i video_sz_1300.avi -vcodec libxvid -acodec libfaac -ab 32k -y video_sz_1300-new.avi
ffmpeg version 0.7.13, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jun 13 2012 14:14:09 with gcc 4.4.5
  configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.123. 0 / 52.123. 0
  libavformat  52.111. 0 / 52.111. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
[g726 @ 0x163b100] Unsupported number of bits 0
    Last message repeated 61 times
[avi @ 0x16362e0] max_analyze_duration 5000000 reached at 5000000
Input #0, avi, from 'video_sz_1300.avi':
  Metadata:
    comment         : live1.sdp
    title           : RTSP/RTP stream 1 from DCS-2103
    encoder         : Lavf52.111.0
  Duration: 01:00:00.00, start: 0.000000, bitrate: 2853 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 1024x768 [PAR 1:1 DAR 4:3], 75 fps, 75 tbr, 75 tbn, 75 tbc
    Stream #0.1: Audio: g726, 8000 Hz, 1 channels
Incompatible sample format '(null)' for codec 'libfaac', auto-selecting format 's16'
[buffer @ 0x1638ca0] w:1024 h:768 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[g726 @ 0x163b100] Unsupported number of bits 0
Output #0, avi, to 'video_sz_1300-new.avi':
    Stream #0.0: Video: mpeg4, yuv420p, 1024x768 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 75 tbc
    Stream #0.1: Audio: libfaac, 8000 Hz, 1 channels, s16, 32 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Error while opening decoder for input stream #0.1

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

http://packages.debian.org/sid/libavcodec-extra-53

analyzeduration - должен стоять правильный, равный длительности записи, иначе индекс будет битый.

Не мог ты выложить мне для примера файлик с g726 я бы сам его покрутил, толку было бы больше.

testuser123
()
Ответ на: комментарий от wolverin

должен стоять правильный, равный длительности записи, иначе индекс будет битый

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

wolverin ★★★
() автор топика
Ответ на: комментарий от testuser123

testuser123

вот так сделал минутный ролик для примера

$ ffmpeg -t 60 -analyzeduration 10000000 -i rtsp://video-sz/live1.sdp -vcodec libxvid -b 200k -pix_fmt yuv420p -s qvga -qmax 5 -acodec copy -ab 32k -ar 8000 -y video.avi
ffmpeg version 0.7.13, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jun 13 2012 14:14:09 with gcc 4.4.5
  configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.123. 0 / 52.123. 0
  libavformat  52.111. 0 / 52.111. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
[g726 @ 0x14e6fa0] Unsupported number of bits 0
    Last message repeated 80 times
[rtsp @ 0x14de620] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 150.00 (150/1) -> 75.00 (150/2)
Input #0, rtsp, from 'rtsp://video-sz/live1.sdp':
  Metadata:
    title           : RTSP/RTP stream 1 from DCS-2103
    comment         : live1.sdp
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuvj420p, 1024x768 [PAR 1:1 DAR 4:3], 75 fps, 75 tbr, 90k tbn, 150 tbc
    Stream #0.1: Audio: g726, 8000 Hz, 1 channels
[buffer @ 0x14ee1c0] w:1024 h:768 pixfmt:yuvj420p tb:1/1000000 sar:1/1 sws_param:
[scale @ 0x14d74e0] w:1024 h:768 fmt:yuvj420p -> w:320 h:240 fmt:yuv420p flags:0x4
Output #0, avi, to 'video.avi':
  Metadata:
    INAM            : RTSP/RTP stream 1 from DCS-2103
    ICMT            : live1.sdp
    ISFT            : Lavf52.111.0
    Stream #0.0: Video: mpeg4, yuv420p, 320x240 [PAR 1:1 DAR 4:3], q=2-5, 200 kb/s, 75 tbn, 75 tbc
    Stream #0.1: Audio: g726, 8000 Hz, 1 channels
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop, [?] for help
[h264 @ 0x14e4980] error while decoding MB 16 39, bytestream (-8)e= 845.5kbits/s
[h264 @ 0x14e4980] concealing 609 DC, 609 AC, 609 MV errors
frame= 1395 fps= 34 q=5.0 Lsize=   13587kB time=00:00:59.98 bitrate=1855.4kbits/s
video:1987kB audio:235kB global headers:0kB muxing overhead 511.223623%
analyzeduration - увеличение ничего не дает, указал 30 минут ролик не записался почему то, указал 3 минуты и на 30 минутном ролике опять битый индекс, хотя ошибки уже и нету про длительность анализа.


http://zalil.ru/33886202

wolverin ★★★
() автор топика
13 марта 2013 г.
Ответ на: комментарий от Gunjubas

Gunjubas

ffmpeg пишу, звук через copy, продолжительностью по 10 минут файлы по 100 мб, прослушиваю через VLC

wolverin ★★★
() автор топика
17 июня 2013 г.
Ответ на: комментарий от Gunjubas

Как решил проблему?

проблема решилась сама собой обновившсь с Debian 6.х на 7.х, -acodec libfaac теперь работает и индекс получается не битый ) + размер файла стал почти в 2 раза меньше.

wolverin ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.