FFMPEG Shell Bash Script to Create DASH & HLS Live Video Streaming Files & Playlists in Terminal


Alpine Dash HLS Logo

Docker Image CI   |   | Github Repo Stars

Alpine Dash HLS

A ready-prepared video transcoding pipeline to create DASH/ HLS compatible video files & playlists.

Recommended usage via Docker Docker Desktop & Docker Hub.

Simplified usage (run in shell/ terminal/ cmd)

Prerequisite: Docker needs to be installed and running.

Please just replace in the command above the absolute path to your video file folder and the full file name of your video file to be converted. You can also use tags like majamee/alpine-dash-hls:edge (e.g. uses alpine‘s edge version as base).

There is also a parameter --transcode-only which you can append to the docker run command, in order to skip the html and image file output. Example:

Examplary toolchain usage

(Based on work of squidpickles)

Just use Kitematic to open the shared folder, place your video file in there, replace "input.mkv" in the commands below by your input video file (without "") and execute the shell commands subsequent into the Docker container.

I am glad to receive any improvement ideas about this “any video to DASH/ HLS” pipeline. Especially if someone has any input on integrating better Apple’s support of fragemented mp4 (fmp4) files in this pipeline.

Suggestions welcome. 🙂

General hints for hosting the files (to test streaming)

  • Video and playlist files should be hosted best via HTTPS
  • DASH requires the .mpd playlist to be set as Content-Type: application/dash+xml
  • No specific streaming server is required, but your hosting should have progressive downloading enabled
  • If using a different domain name for the video files compared to the page where the player is hosted CORS headers need to be set

Tools to test the generated files for streaming


  • Supported devices: iOS (Chrome/ Firefox/ Safari), Android (Chrome/ Firefox), Mac (Chrome/ Firefox/ Safari), Windows (Chrome/ Firefox/ EDGE)
  • Creates DASH (VOD) compatible files (including Safari on Mac)
  • Creates HLS files for compatibility with Safari on iOS
  • Optimizes video files for web playback (moov atom)
  • Compresses videos using H.264@CRF22 (for best compatibility)
  • Compresses audio using AAC@128k (for DASH as separate track to save data)
  • Creates automatically 3 quality levels (Full HD/ HD/ DVD quality)
  • Fragments video files in 2 second windows to allow dynamic quality switching based on available bandwidth
  • Creates master MPD-Playlist which connects everything (MPEG-DASH)
  • Creates master M3U8-Playlist for HLS
  • Creates all output files neatly stored in a sub-folder matching the video file name in the folder output next to the transcoded video file
  • Adds also HTML and .htaccess file including code ready for inclusion into the own website for playback next to all other created files
  • Generates and sets Poster image (from second 3 of the input video file)
  • Generates and includes video preview thumbnails (currently only natively supported by Fluid Player via WebVTT)
  • Video preview support thumbnail support added for Video.js via videojs-vtt-thumbnails
  • Included fallback player (fluid-player.html) is based on the great work of the devs at Fluid Player
  • Included second fallback player (plyr.html) is based on the great work of the devs at Plyr
  • Included third fallback player (videogular.html) is based on the great work of the devs at Videogular
  • Included player (index.html) is based on the great work of the guys at Video.js


For creating DASH/ HLS compatible files for multiple videos in a single run, please have a look at:






Leave a Reply