다음 파일 목록이 있다고 가정해 보겠습니다.
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