From 8a127d27bd47e2e5bd5cdc6b1665f28b0e9b0bb6 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 13 Aug 2016 18:10:05 +0200 Subject: [PATCH] add ffmpeg support (#753) * add ffmpeg support * add image quality options --- source/_components/camera.ffmpeg.markdown | 42 ++++++++++++++++++++++ source/images/supported_brands/ffmpeg.png | Bin 0 -> 17973 bytes 2 files changed, 42 insertions(+) create mode 100644 source/_components/camera.ffmpeg.markdown create mode 100644 source/images/supported_brands/ffmpeg.png diff --git a/source/_components/camera.ffmpeg.markdown b/source/_components/camera.ffmpeg.markdown new file mode 100644 index 00000000000..593ba03c62c --- /dev/null +++ b/source/_components/camera.ffmpeg.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "FFmpeg Camera" +description: "Instructions how to integrate a Video feet with FFmpeg as cameras within Home Assistant." +date: 2015-09-17 08:01 +sidebar: true +comments: false +sharing: true +footer: true +logo: ffmpeg.png +ha_category: Camera +--- + + +The `ffmpeg` platform allows you to use every video feet with [FFmpeg](http://www.ffmpeg.org/) as camera in Home Assistant. + +

+You need a ffmpeg binary in your system path. On debain 8 you can install it from backports. If you want HW support on raspberry you need self build from source. Windows binary are avilable on ffmpeg homepage. +

+ +To enable your Foscam IP camera in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + platform: ffmpeg + input: FFMPEG_SUPPORTED_INPUT + name: FFmpeg + ffmpeg_bin: /usr/bin/ffmpeg + extra_arguments: -q:v 2 +``` + +Configuration variables: + +- **input** (*Required*): A ffmpeg compatible input file, stream or feet. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. +- **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. image quality or video filter options. + +Image quality: + +You can controll the image quality with [extra_arguments](https://www.ffmpeg.org/ffmpeg-codecs.html#jpeg2000) *-q:v 2-32* or with lossless option *-pred 1*. diff --git a/source/images/supported_brands/ffmpeg.png b/source/images/supported_brands/ffmpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f78f5b51754d876b2760283d54e0ec35c328cd GIT binary patch literal 17973 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 mh71`pWXO;qLxv1a@c#i3AVEpi^~%@)0000