MEncoder | ffmpeg для кодирования raw потока в mp42+x264 (Поможите примером)

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Аватара пользователя
Spider
Сообщения: 72

MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение Spider »

Всем привет!

Поможет кто подскажет стартовым примером для кодирования видео потока в mp42 + x264?
Изначально поток NTSC 720x480 Ч/Б. Может как-то сразу можно это учесть и делать деинтерлейз и жать только в серых тонах?

Заранее огромное спасибо!

ЗЫ. OS Ubuntu Server без Xов
ЗЫЫ. Собрал ffmpeg с поддержкой libx264 и смог упаковать msmpeg4 avi в mp41 x264, но блин это из файла, а как "на лету!" из STDIN?
Спасибо сказали:
Аватара пользователя
BSDevil
Сообщения: 112
ОС: MAC OS X

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение BSDevil »

Завалялось вот 2 скрипта. Может поможет...

Код: Выделить всё

#!/bin/bash

if [[ "$2" == "" ]]; then
        echo "Usage: $0 <inputfile> <outputname>"
        echo "(<outputname> does not need an extension!)"
        exit 1
fi

mencoder $1 -sws 9 -of lavf -lavfopts format=mp4 \
-vf scale=-2:320,dsize=576:320:0,harddup \
-ovc x264 \
-x264encopts bitrate=1381:vbv_maxrate=1500:vbv_bufsize=2000:nocabac:me=umh:trellis=1:level_idc=30:global_header:threads=2:pass=1:turbo \
-oac faac \
-alang en \
-faacopts mpeg=4:object=2:br=160:raw -channels 2 -srate 48000 -o $2.tmp.mp4

EXIT_CODE="$?"
if [[ "$?" != "0" ]]; then exit "$EXIT_CODE"; fi

mencoder $1 -sws 9 -of lavf -lavfopts format=mp4 \
-vf scale=-2:320,dsize=576:320:0,harddup \
-ovc x264 \
-x264encopts bitrate=1381:vbv_maxrate=1500:vbv_bufsize=2000:nocabac:me=umh:subq=6:frameref=6:trellis=1:level_idc=30:global_header:threads=2:pass=2 \
-oac faac \
-alang en \
-faacopts mpeg=4:object=2:br=160:raw -channels 2 -srate 48000 -o $2.tmp.mp4

EXIT_CODE="$?"
if [[ "$?" != "0" ]]; then exit "$EXIT_CODE"; fi

Код: Выделить всё

#!/bin/bash

[ -z $1 ] && echo "Usage $0 <input file> [output file]" && exit
if [ -z $2 ]; then
        extension=`echo file.name.flv|awk -F'.' '{print $NF}'`
        out="`echo $1|sed "s/\.$extension$//g"`.mp4"
fi

ffmpeg -i $1 -y -v 1 -map_chapters -1:-1 -threads 0 -f mp4 -vcodec libx264 -vpre medium -vpre baseline -g 60.0 -r 20.0 -vb 800000 -s 640x360 -aspect 1.778 -acodec libfaac -ab 74984 -ar 44100 -ac 2 $out
Изображение
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение sspphheerraa »

Вы бы хоть источник потока указали, а то так прям.... STDIN
Sspphheerraa
Спасибо сказали:
Аватара пользователя
Spider
Сообщения: 72

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение Spider »

прога motion. Написано что типа может использовать внешний (extpipe) паковщик вместо встроенного (встроенный умеет ограниченное число и комбинацию кодеков)
там написано что поток передаётся как rawstream из STDIN. Увы более там не описано ничего.
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение sspphheerraa »

Spider писал(а):
21.06.2011 22:28
прога motion. Написано что типа может использовать внешний (extpipe) паковщик вместо встроенного (встроенный умеет ограниченное число и комбинацию кодеков)
там написано что поток передаётся как rawstream из STDIN. Увы более там не описано ничего.

http://www.opennet.ru/base/sys/motion_videocam.txt.html
Sspphheerraa
Спасибо сказали:
Аватара пользователя
Spider
Сообщения: 72

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение Spider »

И как это связано с mp4?
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение sspphheerraa »

Spider писал(а):
24.06.2011 18:42
И как это связано с mp4?

Мдааа, не хочет человек думать, даже когда ему готовый мануал дают :sleep:

Вы motion настроили? "Live Webcam Server" параметр включили? при старте он пишет
"Started stream webcam server in port 8081" (*порт может быть другой)
Браузером изображение видите по адресу http://localhost:8081 ?

Если на все вышесказанное ответ "да", то запись должна без проблем работать
ffmpeg http://localhost:8081 -vcodec libx264 -vpre libx264-veryslow -crf 25 -r 25 -s 640x480 -an out.mp4

ps И вообще, если устройство, дающее вам поток (веб-камера?) не удаленное, а локальное, то можно обойтись без motion вообще. Запись
$ ffmpeg -i /dev/video0 -vcodec libx264 -vpre libx264-veryslow -crf 25 -r 25 -s 640x480 -an out.mp4
Sspphheerraa
Спасибо сказали:
Аватара пользователя
Spider
Сообщения: 72

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение Spider »

Выражусь вашим же языком - Мдааа.
Я просил не как работать с motion + ffmpeg, а как кодировать поток подсунутый с STDIN и в частоности кодировать в mp42.
motion у меня чтобы определять движение и писать "одновременно" с 4х камер подключенных одной bt878, ffmpeg и это умеет?
использовать htttp возможность motion чтбы кодировать от туда, как бы уже не укладывается в то что я хочу, да и зачем если motion умеет сам когда надо запускать кодер и отдавать ему поток, вот тока пока не понятно мне как, но я разбираюсь уже.

Ну в общем, хотелось как лучще, а получилось как всегда. В итоге ничего по тому что я спросил, но куча воды совсем про другое.
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение sspphheerraa »

Spider, камер может быть сколько угодно ;) и ffmpeg действительно умеет очень многое.
Если карта захвата одна (к примеру, /dev/video0), а камер несколько, то устанавливаете vloopback, он создает виртуальные видео устройства (/dev/video1, /dev/video2 и т.д.). В /etc/motion/motion.conf проверьте опцию

Код: Выделить всё

video_pipe '-'

После чего motion использует video0 и транслирует видео в video1
video2 легко цепляется ffmpeg'ом


Или у вас проблема запуска записи (когда есть движение)?
То тогда в /etc/motion/motion.conf все настраивается.

Код: Выделить всё

ffmpeg_video_codec libx264
ffmpeg_deinterlace off #как хотите, можно и включить
ffmpeg_variable_bitrate 0
ffmpeg_bps 400000
ffmpeg_cap_new on
ffmpeg_cap_motion on

# Конфиги на каждую камеру
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf
thread /etc/motion/thread3.conf
thread /etc/motion/thread4.conf


Пример конфига камеры

Код: Выделить всё

# /etc/motion/thread1.conf
#
# This config file was generated by motion 3.2.9
# Videodevice to be used for capturing  (default /dev/video0)
# for FreeBSD default is /dev/bktr0
videodevice /dev/video0

# The video input to be used (default: 8)
# Should normally be set to 1 for video/TV cards, and 8 for USB cameras
input 0

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /var/www/motion/camera1

text_left Camera 1

# The mini-http server listens to this port for requests (default: 0 = disabled)
webcam_port 8081

# Quality of the jpeg images produced (default: 50)
webcam_quality 50

# Maximum framerate for webcam streams (default: 1)
webcam_maxrate 25

# Restrict webcam connections to localhost only (default: on)
webcam_localhost off

# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual webcam rate by desired number of seconds
# Actual webcam rate is the smallest of the numbers framerate and webcam_maxrate
webcam_limit 0


target_dir для каждой камеры указываете, и все, имеете видео с движениями по каждой камере в соответствующей директории.


ps Если бы вы сразу написали, что камеры подключены не на прямую, а через карту захвата, и то, что вам надо писать только движения, то недоразумений не было бы. И обижаться не надо, вам пытаются помочь, а не унизить :drinks:
Sspphheerraa
Спасибо сказали:
Аватара пользователя
Spider
Сообщения: 72

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение Spider »

sspphheerraa писал(а):
26.06.2011 12:25
Или у вас проблема запуска записи (когда есть движение)?
То тогда в /etc/motion/motion.conf все настраивается.
[codeeg_vi]ffmpdeo_codec libx264
ffmpeg_deinterlace off #как хотите, можно и включить
ffmpeg_variable_bitrate 0
ffmpeg_bps 400000
ffmpeg_cap_new on
ffmpeg_cap_motion on
ffmpeg_video_codec Values: mpeg1 (ffmpeg-0.4.8 only), mpeg4, msmpeg4, swf, flv, ffv1, mov
Default: mpeg4

Что-то тут libx264 и не пахнет...
sspphheerraa писал(а):
26.06.2011 12:25
ps Если бы вы сразу написали, что камеры подключены не на прямую, а через карту захвата, и то, что вам надо писать только движения, то недоразумений не было бы. И обижаться не надо, вам пытаются помочь, а не унизить :drinks:

и всё отвлекаемся. Не хочу ничего знать про motion и всякие loopback девайсы. Хотел узнать как жать поток в mp42 из stdin. Зачем предлагать альтернативы? ЗАЧЕМ? Хочу то что хочу. Пока блин всё это вялилось, я по исходникам нашёл как хотябы из stdin брать. Но вот mp42 как буд-то не умеют. Тока mp41 получается.
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: MEncoder | ffmpeg для кодирования raw потока в mp42+x264

Сообщение sspphheerraa »

Spider писал(а):
26.06.2011 18:48
Что-то тут libx264 и не пахнет...

Spider писал(а):
26.06.2011 18:48
Но вот mp42 как буд-то не умеют.

Открыл в гугле mp42, первая ссылка выдала
mp42 codec's Home Page: http://www.microsoft.com/windows/windowsme...ecdownload.aspx

все, мне здесь больше советовать нечего. Удачи.
Sspphheerraa
Спасибо сказали: