Wie erstelle ich m3u8 aus einer Dateiliste in ffmpeg?

Wie erstelle ich m3u8 aus einer Dateiliste in ffmpeg?

Nehmen wir an, ich habe diese Dateiliste: Audios:

file1.mp3 //audiotrack 1
file2.mp3 //audiotrack 2
file3.mp3 //audiotrack 3

Untertitel:

file1.vtt //subtitle 1
file2.vtt //subtitle 2
file3.vtt //subtitle 3

Videos:

file1_320x280.mp4 //video quality 1
file2_640x11024.mp4 //video quality 2
file3_1200x1600.mp4 //video quality 3

Wie konvertiere ich all diese Dateien mit FFMPEG in .TS-Fragmente mit einer m3u8-Datei?

Kann der Benutzer mit der HLS-Erweiterung video.js auch die Qualität auswählen?

Antwort1

Ich bin auf diesem Gebiet kein Profi, aber so gehe ich damit um.

Referenzen: Perfektes Beispiel für das gewünschte Manifest.

Zuerst:

Erstellen Sie für jedes Video eine .m3u8-Wiedergabeliste

ffmpeg -i file1_320x280.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file1_320x280.m3u8

ffmpeg -i file2_640x11024.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file2_640x11024.m3u8

ffmpeg -i file3_1200x1600.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file3_1200x1600.m3u8

Zweitens:

Erstellen Sie .m3u8-Wiedergabelisten für jedes Audio (ich verwende denselben Befehl wie für Video)

ffmpeg -i file1.mp3 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file1_320x280.m3u8

ffmpeg -i file2.mp3 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file2.m3u8

ffmpeg -i file3.mp3 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls file3.m3u8

Dann erstelle ich manuell .m3u8-Dateien für jeden Untertitel mit folgendem Inhalt:

#EXTM3U
#EXT-X-TARGETDURATION: <<VIDEO RUNTIME HERE>>
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF: <<VIDEO RUNTIME HERE>>,
file1.vtt
#EXT-X-ENDLIST

Wobei #EXTINF und #EXT-X-TARGETDURATION die Dauer eines Videos in Sekunden ist. Beispiel (nehmen wir an, dass die Videodauer 00:14:47 beträgt):

sub1.m3u8:

#EXTM3U
#EXT-X-TARGETDURATION:887
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:887.0,
file1.vtt
#EXT-X-ENDLIST

unter2.m3u8:

#EXTM3U
#EXT-X-TARGETDURATION:887
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:887.0,
file2.vtt
#EXT-X-ENDLIST

unter3.m3u8:

#EXTM3U
#EXT-X-TARGETDURATION:887
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:887.0,
file3.vtt
#EXT-X-ENDLIST

Abschließend erstelle ich für dieses Beispiel manuell die Datei master.m3u8 mit folgendem Inhalt:

#EXTM3U

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="lang",NAME="Some audio name",DEFAULT=YES,AUTOSELECT=YES,URI="file1.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="lang2",NAME="Some audio name",DEFAULT=NO,AUTOSELECT=YES,URI="file2.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="lang3",NAME="Some audio name",DEFAULT=NO,AUTOSELECT=YES,URI="file3.m3u8"

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Deutsch",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="sub1.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="sub2.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Espanol",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="es",URI="sub3.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=258157,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="stereo",RESOLUTION=320x280,SUBTITLES="subs"
file1_320x280.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=520929,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=file2_640x11024,SUBTITLES="subs"
file2_640x11024.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1144430,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="stereo",RESOLUTION=1200x1600,SUBTITLES="subs"
file3_1200x1600.m3u8

verwandte Informationen