How to Enable DASH Segment Timeline in FFmpeg
This article provides a straightforward guide on how to enable
segment timeline generation in a DASH (Dynamic Adaptive Streaming over
HTTP) manifest using FFmpeg. You will learn the specific command-line
flags required to output a Media Presentation Description
(.mpd) file containing the
<SegmentTimeline> element, which ensures precise
playback synchronization and better handling of variable frame rates or
non-uniform segment durations.
To enable the segment timeline in your DASH manifest, you must use
the -use_timeline option set to 1 (true) in
your FFmpeg command. This tells the FFmpeg DASH muxer to generate a
<SegmentTimeline> tag inside the
<SegmentTemplate> of the output .mpd
file.
Example FFmpeg Command
Here is a standard command to transcode an input video and package it into a DASH stream with a segment timeline enabled:
ffmpeg -i input.mp4 \
-c:v libx264 -b:v 2000k -g 60 -keyint_min 60 -sc_threshold 0 \
-c:a aac -b:a 128k \
-f dash \
-seg_duration 4 \
-use_template 1 \
-use_timeline 1 \
output.mpdParameter Breakdown
-f dash: Specifies that the output format should be the DASH muxer.-seg_duration 4: Sets the target segment duration to 4 seconds.-use_template 1: Enables the use of<SegmentTemplate>instead of listing every segment individually. This keeps the manifest file size small.-use_timeline 1: This is the key parameter. It forces FFmpeg to generate a<SegmentTimeline>entry, which explicitly defines the exact start time and duration of each segment.
Why Use Segment Timelines?
By default, FFmpeg may generate a template-based manifest that assumes every segment is of identical duration. However, in real-world encoding, keyframe placement can vary slightly, causing drift between the audio and video streams.
Enabling -use_timeline 1 solves this by: 1.
Preventing AV Sync Drift: It provides the player with
the exact duration of each segment, allowing for seamless
synchronization. 2. Supporting Variable Frame Rates: It
handles source files with irregular frame rates where segment boundaries
cannot be perfectly uniform. 3. Improving Player
Compatibility: Many modern HTML5 players (like Shaka Player and
dash.js) perform better and experience fewer buffering issues when a
segment timeline is present.