ffmpeg의 파일 목록에서 m3u8을 생성하는 방법은 무엇입니까?

ffmpeg의 파일 목록에서 m3u8을 생성하는 방법은 무엇입니까?

다음 파일 목록이 있다고 가정해 보겠습니다.

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

자막:

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

비디오:

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

FFMPEG를 사용하여 이 모든 파일을 m3u8 파일이 있는 .TS 조각으로 변환하는 방법은 무엇입니까?

또한 video.js HLS 확장을 통해 사용자가 품질을 선택할 수 있나요?

답변1

저는 이 분야의 전문가는 아니지만, 제가 처리하는 방법은 다음과 같습니다.

참고자료: 원하는 매니페스트의 완벽한 예입니다.

첫째로:

각 비디오에 대해 .m3u8 재생 목록 만들기

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

둘째:

각 오디오에 대해 .m3u8 재생 목록을 만듭니다. (비디오와 동일한 명령을 사용합니다.)

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

다음과 같은 콘텐츠가 포함된 각 자막에 대해 .m3u8 파일을 수동으로 생성합니다.

#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

여기서 #EXTINF 및 #EXT-X-TARGETDURATION은 비디오 재생 시간(초)입니다. 예를 들어(동영상 재생 시간이 00:14:47이라고 가정):

하위1.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

sub2.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

하위3.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

마지막으로 이 예에서는 다음 내용으로 master.m3u8 파일을 수동으로 생성합니다.

#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

관련 정보