home-assistant.io/source/_components/binary_sensor.ffmpeg.markdown
Fabian Affolter 0c0b2c9d18
Minor updates
2016-08-31 11:41:56 +02:00

4.2 KiB

layout, title, description, date, sidebar, comments, sharing, footer, logo, ha_category, ha_release, ha_iot_class
layout title description date sidebar comments sharing footer logo ha_category ha_release ha_iot_class
page FFmpeg Binary Sensor Instructions how to integrate a varius ffmpeg based binary sensor 2016-08-25 08:00 true false true true ffmpeg.png Binary Sensor 0.27 Local Polling

The ffmpeg platform allows you to use every video or audio feed with FFmpeg for various sensors in Home Assistant. Available are: noise, motion. If the ffmpeg process is brocken, the sensor going to unavailable. It exists a service to restart a instance with binary_sensor.ffmpeg_restart.

You need a `ffmpeg` binary in your system path. On Debain 8 you can install it from backports. If you want Hardware support on a Raspberry Pi you need to build it from sourceby ourself. Windows binary are avilable on [FFmpeg](http://www.ffmpeg.org/) homepage.

{% linkable_title Noise %}

To enable your FFmpeg with noise detection in your installation, add the following to your configuration.yaml file:

# Example configuration.yaml entry
camera:
  - platform: ffmpeg
    tool: noise
    input: FFMPEG_SUPPORTED_INPUT
    name: FFmpeg Noise
    ffmpeg_bin: /usr/bin/ffmpeg
    peak: -30
    duration: 1
    reset: 20

Configuration variables:

  • input (Required): A ffmpeg compatible input file, stream or feed.
  • tool (Required): Is fix set to noise.
  • name (Optional): This parameter allows you to override the name of your camera.
  • ffmpeg_bin (Optional): Default ffmpeg.
  • peak (Optional): Default -30. A peak of dB to detect it as noise. 0 is very loud and -100 is low.
  • duration (Optional): Default 1 seconds. How long need the noise over the peak to trigger the state.
  • reset (Optional): Defaults to 20 seconds. The time to reset the state after none new noise is over the peak.
  • extra_arguments (Optional): Extra option they will pass to ffmpeg, like audio frequence filtering.
  • output (Optional): Allow you to send the audio output of this sensor to a icecast server or other ffmpeg supported output, eg. to stream with sonos after state is trigger.

For playing with values:

$ ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null -

{% linkable_title Motion %}

FFmpeg don't have a motion detection filter so it use a scene filter to detect a new scene/motion. In fact you can set how big a object or size of image they need change to detect a motion. The option 'changes' is the percent value of change between frames. You can add a denoise filter to video if you want a realy small value for 'changes'.

To enable your FFmpeg with motion detection in your installation, add the following to your configuration.yaml file:

# Example configuration.yaml entry
camera:
  - platform: ffmpeg
    tool: motion
    input: FFMPEG_SUPPORTED_INPUT
    name: FFmpeg Motion
    ffmpeg_bin: /usr/bin/ffmpeg
    changes: 10
    reset: 20
    # group feature / default not in use
    repeat: 0
    repeat_time: 0
    

Configuration variables:

  • input (Required): A ffmpeg compatible input file, stream or feed.
  • tool (Required): Is fix set to motion.
  • name (Optional): This parameter allows you to override the name of your camera.
  • ffmpeg_bin (Optional): Default ffmpeg.
  • changes (Optional): Default 10 percent. A lower value is more sensitive. I use 4 / 3.5 on my cameras. It describe how much of two frames need to change to detect it as motion. See on descripton.
  • reset (Optional): Default 20 seconds. The time to reset the state after none new motion is detect.
  • repeat (Optional): Default 0 repeats (deactivate). How many motion need to detect in repeat_time to trigger a motion.
  • repeat_time (Optional): Default 0 seconds (deactivate). The time to repeats before it trigger a motion.
  • extra_arguments (Optional): Extra option they will pass to ffmpeg. i.e. video denoise filtering.

For playing with values (changes/100 is the scene value on ffmpeg):

$ ffmpeg -i YOUR_INPUT -an -filter:v select=gt(scene\,0.1) -f framemd5 -

If you are running into trouble with this sensor, please refer to this Troubleshooting section.