主に RaspberryPi3 で動く Raspbian か、NanoPi NEO2 で動く Armbian で試している。
macOS版はこちら -> https://qiita.com/miminashi/items/e10e5ce2032184ee6070
フォーマット一覧を表示する
$ ffmpeg -formats
エンコーダ一覧を表示する
ffmpeg -encoders
ピクセルフォーマットの一覧を表示する
ffmpeg -pix_fmts
RTMPで使えるオプション
h264_omx で使えるオプション
$ ffmpeg --help encoder=h264_omx
ffmpeg version N-85599-g0b8c159 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Raspbian 4.9.2-10)
configuration: --enable-gpl --enable-nonfree --enable-mmal --enable-omx-rpi --enable-omx --extra-cflags=-I/home/pi/ffmpeg/include --extra-ldflags=-L/home/pi/ffmpeg/lib --extra-libs=-ldl
libavutil 55. 61.100 / 55. 61.100
libavcodec 57. 93.100 / 57. 93.100
libavformat 57. 72.101 / 57. 72.101
libavdevice 57. 7.100 / 57. 7.100
libavfilter 6. 85.100 / 6. 85.100
libswscale 4. 7.101 / 4. 7.101
libswresample 2. 8.100 / 2. 8.100
libpostproc 54. 6.100 / 54. 6.100
Encoder h264_omx [OpenMAX IL H.264 video encoder]:
General capabilities: delay
Threading capabilities: none
Supported pixel formats: yuv420p
h264_omx AVOptions:
-omx_libname <string> ED.V.... OpenMAX library name
-omx_libprefix <string> ED.V.... OpenMAX library prefix
-zerocopy <int> E..V.... Try to avoid copying input frames if possible (from 0 to 1) (default 0)
-profile <int> E..V.... Set the encoding profile (from -99 to 100) (default -99)
baseline E..V....
main E..V....
high E..V....
MJPEG on RTP で配信する
ファイルの情報を見る
$ ffprobe ファイル名
接続されているカメラで利用できるフォーマット一覧を表示する
ffmpeg -f video4linux2 -list_formats all -i /dev/video0
テストソース
ffmpeg \
-re \
-f lavfi \
-i 'testsrc=duration=600:size=1280x720:rate=30' \
-vcodec libx264 \
-profile:v baseline \
-preset ultrafast \
-tune zerolatency \
-pix_fmt yuv420p \
-s 1280x720 \
-f flv \
-an \
${URL}
-re
オプションをつけたら遅延が大きくなったときは
-analyzeduration
を指定する。
このオプションは解析時間の上限を指定する。
12fpsの場合は-analyzeduration 100
でokだった。
rtmpdump -m 1 -vr "rtmp://0.0.0.0:1935/live1/live" |
ffmpeg \
-re \
-analyzeduration 100 \
-f live_flv \
-i pipe:0 \
-c:v libx264 \
-profile:v baseline \
-preset ultrafast \
-tune zerolatency \
-an \
-f rtp \
rtp://0.0.0.0:8021
https://stackoverflow.com/questions/50871057/ffmpeg-with-high-delay-in-first-input-stream
http://fftest33.blog.fc2.com/blog-entry-109.html
動画をgifアニメに変換する
ffmpeg -i sample.mov -s 1680x1050 -pix_fmt rgb24 -r 8 -f gif sample.gif
Webカメラの映像を毎フレーム同じファイルに記録し続ける
要するに最新の静止画がほしい。
ffmpeg -y -f video4linux2 -video_size 1920x1080 -framerate 5 -i /dev/video2 -f image2 -threads 3 -update 1 0.jpg
好きなタイミングで0.jpg
を読んでもファイル壊れたりしてなかった。
別のファイルに書き出してからmvするような実装になってるんだろうか。(要確認)
v4l2loopbackで仮想カメラをつくる
$ sudo apt-get -y install linux-image-4.19.0-6-amd64-unsigned linux-headers-4.19.0-6-amd64 v4l2loopback-dkms
$ sudo modprobe v4l2loopback devices=8
$ ls -1 /dev/video*
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/video7
4.19.0-5
の状態だとmodprobe: ERROR: could not insert 'v4l2loopback': Exec format error
といわれてしまってmodprobeできなかった。
参考: https://www.virtualbox.org/ticket/18904
作成した仮想カメラに映像を流し込む
$ ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=10 -pix_fmt yuv420p -f v4l2 /dev/video0
仮想カメラから映像を読み込む
$ ffmpeg -loglevel error -f v4l2 -i /dev/video0 -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -f flv -an "rtmp://192.0.2.0:3001/live/live1"