Go to file
2019-11-01 13:07:05 +01:00
.gitignore ignore tests folder 2019-06-06 18:13:23 +02:00
ffplayout.conf remove copy mode, #29 2019-09-08 21:24:02 +02:00
ffplayout.py fix wrong time calculation when script start short before playlist ends 2019-11-01 13:07:05 +01:00
ffplayout.service create project 2018-01-07 13:58:45 +01:00
gen_playlist_from_subfolders.sh random sort 2019-08-19 20:27:20 +02:00
LICENSE Update LICENSE 2018-03-06 17:07:43 +01:00
live.txt tweak drawtext 2019-06-09 21:04:33 +02:00
logo.png add logo for testing 2019-03-12 21:08:35 +01:00
README.md change Features and Requirements, spelling 2019-09-09 20:27:36 +02:00
requirements.txt add folder watch 2019-06-06 18:16:33 +02:00

ffplayout-engine

made-with-python License: GPL v3

The purpose with ffplayout is to provide a 24/7 broadcasting solution that plays a json playlist for every day, while keeping the current playlist editable.

Check ffplayout-gui: web-based GUI for ffplayout.

Features

  • have all values in a separate config file
  • dynamic playlist
  • replace missing playlist or clip with a dummy clip
  • playing clips from watched folder
  • send emails with error message
  • overlay a logo
  • overlay scrolling text
  • trim and fade the last clip, to get full 24 hours
  • when playlist is not 24 hours long, loop filler clip until time is full
  • set custom day start, so you can have playlist for example: from 6am to 6am, instate of 0am to 12pm
  • normal system requirements and no special tools
  • no GPU power is needed
  • stream to server or play on desktop
  • add filters to input, if is necessary to match output stream:
    • yadif (deinterlacing)
    • pad (letterbox or pillarbox to fit aspect)
    • framerate (change fps)
    • scale (fit target resolution)
    • aevalsrc (if video have no audio)
    • apad (add silence if audio duration is to short)
    • tpad (add black frames if video duration is to short)

Requirements

  • python version 3.6+
  • python module watchdog (only when playlist_mode = False)
  • ffmpeg v4.2+ and ffprobe (ffplay if you want to play on desktop)
  • RAM and CPU depends on video resolution, minimum 4 threads and 3GB RAM for 720p are recommend

JSON Playlist Example

{
    "channel": "Test 1",
    "date": "2019-03-05",
    "length": "24:00:00.000",
    "program": [{
            "in": 0,
            "out": 647.68,
            "duration": 647.68,
            "source": "/Media/clip1.mp4"
        }, {
            "in": 0,
            "out": 149,
            "duration": 149,
            "source": "/Media/clip2.mp4"
        }, {
            "in": 0,
            "out": 114.72,
            "duration": 114.72,
            "source": "/Media/clip3.mp4",
            "category": "advertisement"
        }, {
            "in": 0,
            "out": 2531.36,
            "duration": 2531.36,
            "source": "/Media/clip4.mp4",
            "category": ""
        }
    ]
}

"length" are optional, when you leave it blank, there will be no check if real playlist length is correct.

Warning:

(Endless) streaming over multiple days will only work when config have day_start value and the length value of the playlist is 24 hours. If you need only some hours for every day, use a cron job, or something similar.

Source from URL / Live Stream

You can use sources from url or live stream in that way:

...
        {
            "in": 0,
            "out": 149,
            "duration": 149,
            "source": "https://example.org/big_buck_bunny.webm"
        },
...
        {
            "in": 0,
            "out": 2531.36,
            "duration": 0,
            "source": "rtmp://example.org/live/stream"
        }
...

But be careful with it, better test it multiple times!

More informations in Wiki

Installation

  • install ffmpeg, ffprobe (and ffplay if you need the preview mode)
  • copy ffplayout.py to /usr/local/bin/
  • copy ffplayout.conf to /etc/ffplayout/
  • create folder with correct permissions for logging (check config)
  • copy ffplayout.service to /etc/systemd/system/
  • change user in /etc/systemd/system/ffplayout.service
  • create playlists folder, in that format: /playlists/year/month
  • set variables in config file to your needs
  • use gen_playlist_from_subfolders.sh /path/to/mp4s/ as a starting point for your playlists (path in script needs to change)
  • activate service and start it: sudo systemctl enable ffplayout && sudo systemctl start ffplayout

Start with Arguments

ffplayout also allows the passing of parameters:

  • -c, --config use given config file
  • -f, --folder use folder for playing
  • -l, --log for user-defined log file
  • -p, --playlist for playlist file

You can run the command like:

python3 ffplayout.py -l ~/ffplayout.log -p ~/playlist.json

Preview Mode on Desktop

For playing on desktop set preview = True in config under [OUT].