|
5 years ago | |
---|---|---|
examples | 5 years ago | |
.gitignore | 5 years ago | |
LICENSE | 5 years ago | |
README.md | 5 years ago | |
main.go | 5 years ago |
This tool let’s you encode a HLS m3u8 playlist into json. It support’s both master and playlist types. It could handle a URL and download the playlist or read from a file or standard input.
$ ./m3u82json -h
Usage of ./m3u82json:
-a make URI absolute
-b string
Base URL
-r Recursive download master and playlists
Example output:
$ ./m3u82json 'https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8'
{
"URL": "https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8",
"BaseUrl": "https://mnmedias.api.telequebec.tv/m3u8",
"Type": "master",
"Manifest": {
"Variants": [
{
"URI": "https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/yd/yLpoUEilVrxhhYSkpsyGMnn9t0N3AYxWmoMsM7Faw/francstireurs_entrevue_ep472_seq24.mpegts/playlist-de5cb50573ac3952cd031f64973a614828771406.m3u8",
"Chunklist": null,
"ProgramId": 1,
"Bandwidth": 794000,
"AverageBandwidth": 0,
"Codecs": "avc1.64001f,mp4a.40.2",
"Resolution": "640x360",
"Audio": "",
"Video": "",
"Subtitles": "",
"Captions": "",
"Name": "",
"Iframe": false,
"VideoRange": "",
"HDCPLevel": "",
"FrameRate": 0,
"Alternatives": null
},
{
"URI": "https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/pG/_eYmKLIBSVI6S27rSuF_ykGSlW0Qc8D1PALJty4Mk/francstireurs_entrevue_ep472_seq24.mpegts/playlist-3e7933be6a617888b736c1ebbb1f2a6bcda30afd.m3u8",
"Chunklist": null,
"ProgramId": 1,
"Bandwidth": 64000,
"AverageBandwidth": 0,
"Codecs": "",
"Resolution": "398x224",
"Audio": "",
...
Once you have a json, it is very easy to work with it, for example with jq:
Get the Resolution and bandwidth of each rendition:
$ ./m3u82json -r 'https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8' | jq '.Manifest | .Variants[] | {Resolution: .Resolution, BW: .Bandwidth}'
{
"Resolution": "640x360",
"BW": 794000
}
{
"Resolution": "398x224",
"BW": 64000
}
{
"Resolution": "416x234",
"BW": 209000
}
{
"Resolution": "480x270",
"BW": 429000
}
{
"Resolution": "768x432",
"BW": 1196000
}
{
"Resolution": "960x540",
"BW": 2096000
}
{
"Resolution": "1280x720",
"BW": 3096000
}
Get the URL of each rendition:
$ ./m3u82json -r 'https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8' | jq '.Manifest | .Variants[] | .URI'
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/yd/yLpoUEilVrxhhYSkpsyGMnn9t0N3AYxWmoMsM7Faw/francstireurs_entrevue_ep472_seq24.mpegts/playlist-de5cb50573ac3952cd031f64973a614828771406.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/pG/_eYmKLIBSVI6S27rSuF_ykGSlW0Qc8D1PALJty4Mk/francstireurs_entrevue_ep472_seq24.mpegts/playlist-3e7933be6a617888b736c1ebbb1f2a6bcda30afd.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/Sf/0Yz6m4a9H2LvdJs5cXZ2OkLVBsVETi3pQR4LF-Z3k/francstireurs_entrevue_ep472_seq24.mpegts/playlist-767499b7586bfe9b892916f8a24e71928f2e509f.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/DW/tAHYcWrGU7mj9nce4TbYlou5LPRT67U7UKqD1-L2c/francstireurs_entrevue_ep472_seq24.mpegts/playlist-b08bceed9acbde9e396ff9bda6c47b0e2767ffc3.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/Eg/o_fUnlyL800wzDHxFl6hhw-8UQc-ooyDeghAFJJhc/francstireurs_entrevue_ep472_seq24.mpegts/playlist-d4a7a4f0ec6d5166035d24a010a67a11eca19cf4.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/lB/Qc25Nb0TUdQe_w_ScrBJzqxkVpsKUEm1dGtLWhM3g/francstireurs_entrevue_ep472_seq24.mpegts/playlist-10a6530ae4e350c1c757c11287d1a0f7c2fad471.m3u8"
"https://s2.content.video.llnw.net/smedia/42f4e71183054396907c0dea18241568/Ks/l56Xl_JnkEU-hQoz9-AHS5lrBjICWHZV0dybQSN3w/francstireurs_entrevue_ep472_seq24.mpegts/playlist-933ef269e85350d026f5e55af66a76a52737ff48.m3u8"
Get the last chunk of the best rendition:
$ ./m3u82json -r -a 'https://mnmedias.api.telequebec.tv/m3u8/29880.m3u8' | jq '.Manifest | .Variants[] | select(.Resolution == "1280x720") | .Chunklist.Segments[-1]'
{
"SeqId": 104,
"Title": "",
"URI": "https://mnmedias.api.telequebec.tv/m3u8/playlist104.ts",
"Duration": 8.313322,
"Limit": 0,
"Offset": 0,
"Key": null,
"Map": null,
"Discontinuity": false,
"SCTE": null,
"ProgramDateTime": "0001-01-01T00:00:00Z",
"Custom": null
}