Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gitfu/manifesto
Manifesto is an HLS tool for creating multiple variants, a master.m3u8 file, and converting 608 captions to segmented webvtt subtitles via ffmpeg.
https://github.com/gitfu/manifesto
ffmpeg hls m3u multiple-variants segmented-webvtt-subtitles variants video webvtt
Last synced: 3 months ago
JSON representation
Manifesto is an HLS tool for creating multiple variants, a master.m3u8 file, and converting 608 captions to segmented webvtt subtitles via ffmpeg.
- Host: GitHub
- URL: https://github.com/gitfu/manifesto
- Owner: gitfu
- License: bsd-2-clause
- Created: 2017-10-17T22:58:54.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-01-01T18:15:09.000Z (about 7 years ago)
- Last Synced: 2024-08-01T19:55:19.690Z (6 months ago)
- Topics: ffmpeg, hls, m3u, multiple-variants, segmented-webvtt-subtitles, variants, video, webvtt
- Language: Go
- Homepage:
- Size: 73.2 KB
- Stars: 18
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Go Report Card](https://goreportcard.com/badge/github.com/gitfu/manifesto)](https://goreportcard.com/report/github.com/gitfu/manifesto)
# Manifesto
Manifesto is an HLS tool for creating multiple variants, a master.m3u8 file, and converting 608 captions to segmented webvtt subtitles via ffmpeg.## ``` Setup ```
#### ```Required```
* Go
* Ffmpeg#### ```Install go```
https://golang.org/doc/install#### ```Set your Environment```
```
mkdir ~/go
export GOPATH=~/go
```
#### ``` Add one library ```
```
go get -u github.com/logrusorgru/aurora
```#### ```Install ffmpeg with libx264 support```
#### ```Git clone the repo ```
```
git clone https://github.com/gitfu/manifesto
cd manifesto
go build manifesto.go
```## ``` How It Works ```
Manifesto transcodes and segments video into multiple variants and creates the master.m3u8 file.
608 Closed captions are extracted and converted to webvtt segment files.## ``` Quick Start```
* ``` cd ~/manifesto ```
* ``` ./manifesto -i vid.ts ```This will create the following directory structure and files
```
vid:
hd720 low640 master.m3u8 med960 subsvid/med960:
index0.ts index1.ts index2.ts index3.ts index4.ts index.m3u8vid/hd720:
index0.ts index1.ts index2.ts index3.ts index4.ts index.m3u8vid/low640:
index0.ts index1.ts index2.ts index3.ts index4.ts index.m3u8vid/subs:
index0.vtt index1.vtt index2.vtt index3.vtt index4.vtt index_vtt.m3u8
```* The default toplevel directory name is the video file name without the file extention.
* The variants are read from the hls.json file, variants can be added or removed as needed.
* The command used to traanscode is specified in the cmd.template file, it can be modified.### ```Command line switches```
```-d string
override top level directory for hls files (optional)
-i string
Video file to segment (either -i or -b is required)
-j string
JSON file of variants (optional) (default "./hls.json")
-s string
subtitle file to segment (optional)
-t string
command template file (optional) (default "./cmd.template")
-u string
url prefix to add to index.m3u8 path in master.m3u8 (optional)```
## ``` Usage ```
```
./manifesto -i vid.mp4
```* This is single mode a master.m3u8 and variants will be created in a new directory named vid. It will also attempt to extract 608 captions and convert them to segmented webvtt subtitles.
###
```
./manifesto -i vid.mp4 -s sub.srt
```
* As above but instead of extracting 608 captions, sub.srt will be converted to a webvtt file and then segmented.###
```
./manifesto -i vid.mp4 -s sub.srt -u http://example.com
```
* As above and also adds the url prefix to each variant listed in the m3u8 file.# How to Modify
* manifesto works right of the box.I wanted it to be easy to use with minimal configuation needed.
If you do feel the need to tune it a bit.## ```Variants```
* Variant data is stored in the hls.json file.
* Add or edit or remove as desired.```
[
{"name": "med960", "aspect": "960x540", "framerate":"29.97","vbitrate": "2000","bufsize":"4000","abitrate": "96k"}
,{"name": "low640", "aspect": "640x360", "framerate":"29.97","vbitrate": "730","bufsize":"1460","abitrate": "64k"}
,{"name":"hd720","aspect": "1280x720", "framerate" :"29.97","vbitrate": "4500","bufsize":"9000","abitrate": "128k"}
]
```## ```Modifying The Ffmpeg Command```
* cmd.template is the default ffmeg command template
* NAME,ASPECT,FRAMERATE,VBITRATE,BUFSIZE,ABITRATE will be replaced with variant's values from hls.json.
* Newlines are stripped.
## ```Values in the master.m3u8 file```
The values used in the master.m3u8 file are read an /or calculated for each variant
as follows.* Bandwidth ( bit_rate is parsed the mpegts container )
* Resolution ( width and height for the video resolution are parsed from the video stream)
* Level ( video level is parsed from the video stream )
* Profile (video profile is parsed from the video stream, audio profile from the audio stream)
* Codecs (Calculated as described here https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html )
```
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=%v,RESOLUTION=%s,CODECS=\"avc1.%v00%x%v\""
```