Help us understand the problem. What is going on with this article?

ffmpeg チートシート(Linux版)

主に 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 で配信する

ffmpeg で 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カメラの映像を毎フレーム同じファイルに記録し続ける

要するに最新の静止画がほしい。

Linux
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"
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした