FFMPEG: Настройка и запуск ffmpeg & ffserver

Что такое ffmpeg?

FFmpeg — это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. Он включает libavcodec, библиотеку кодирования и декодирования аудио и видео и libavformat, библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и «FF», означающего «fast forward».

Сборка и установка
на примере Raspberry
Оригинал: hannes.enjoys.it/blog/2016/03/ffmpeg-on-raspbian-raspberry-pi/

# build and install x264
git clone --depth 1 git://git.videolan.org/x264
cd x264
./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl
make -j 4
sudo make install
# build and make ffmpeg
git clone --depth=1 git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
make -j4
sudo make install

Потоковое видео средствами ffserver & ffmpeg
Оригинал: habr.com/post/78677/

Сначала настроим ffserver, чей конфиг лежит в /etc/ffserver.conf:
Port 8090
BindAddress 0.0.0.0
MaxClients 100
MaxBandwidth 20000
NoDaemon
# Фид, надо запомнить feed.ffm, он нам потребуется при запуске ffmpeg
<Feed feed.ffm>
File /tmp/feed.ffm
FileMaxSize 3M
</Feed>
<Stream test.flv>
# Ранее объявленный фид
Feed feed.ffm
Format flv
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 80000
VideoBitRate 200
# Качество видео от 1 до 31, 1 == отлично 31 == фи!
VideoQMin 1
VideoQMax 5
# Разрешение, везде должно быть одинаково!
VideoSize 352x288
PreRoll 1
# Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
Noaudio
</Stream>
# Флешка test.swf для просмотра трансляции
<Stream test.swf>
Feed feed.ffm
# Будет запускаться в Adobe Flash Player
Format swf
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 50000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
# Разрешение, везде должно быть одинаково!
VideoSize 352x288
PreRoll 0
# Если у вас есть микрофон, или вы транслируете видео со звуком, закомментируйте эту строчку
Noaudio
</Stream>

Пускаем ffserver:
$ ffserver

Пускаем ffmpeg:
$ ffmpeg -s 352x288 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm
-s разрешение, указанное в конфиге ffserver, -r количество кадров/секунду, -f формат, -i путь к камере (или к видео-файлу), localhost:PORT/FEED это адрес, где ffserver будет ждать наш поток.
Если выдаст ошибку, то можно попробовать формат v4l (-f video4linux).

Открываем в браузере localhost:8090/test.swf и широко улыбаемся:)

Для отправки видео поменяем параметр -i на путь к файлу, уберём -f (ffmpeg сам определит формат файла):
$ ffmpeg -s 352x288 -r 30 -i ~/big_buck_bunny.ogg http://localhost:8090/feed.ffm

Ну а что бы вставить нашу флешку в html-страницу используем следующий код:
<embed src="http://localhost:8090/test.swf" width="550" height="400"></embed></embed>

FFmpeg на плате Odroid
Настройка и тесты, добиваемся минимальной задержки:
github.com/GT-Robotics/odroid_vlink/issues/2

Команды:

Пакет для управления камерой:
apt-get install v4l-utils

Настройки и отключение автофокуса:
v4l2-ctl -d /dev/video0 -L    
v4l2-ctl --verbose --set-ctrl=focus_auto=0

Запуск сервера и стрима:
ffserver & ffmpeg -s 1280x720 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm

Сохранить снимок с камеры:
ffmpeg -f video4linux2  -i /dev/video0 -f image2 -vframes 1 -y /home/dietpi/camera/camera.jpg

Пример для Windows:
ffmpeg -f dshow  -i video="HD 720P Webcam" -f image2 -vframes 1 -y C:\camera.jpg

Записать GIF с высоким качеством:
ffmpeg -f video4linux2 -t 10 -i /dev/video0 -vf scale=350:-1:flags=lanczos,palettegen -y /home/dietpi/camera/palette.png
ffmpeg -f video4linux2 -t 5 -i /dev/video0 -i /home/dietpi/camera/palette.png -lavfi "fps=15,scale=350:-1:flags=lanczos [x]; [x][1:v] paletteuse" -y /home/dietpi/camera/camera.gif
Поделиться:

2 комментария

itsjustwork
Ммм… Оказалось все проще чем я думал.
SlavaMakarov
На самом деле система очень тонкая и навороченная, не всё там просто)