일부 동영상을 스트리밍 할 웹 사이트를 만들려고합니다. 각 비디오에 대해 비디오, 오디오 및 자막을 3 개의 다른 폴더에 추출합니다. 비디오에 여러 오디오 트랙과 여러 자막이있는 경우가 있습니다. 많은 조사를했지만 매니페스트에 모두 추가하는 방법을 모르겠습니다. 지금은 다음 명령을 사용합니다.
ffmpeg -f webm_dash_manifest \
-i video1.mp4 -f webm_dash_manifest \
-i video2.mp4 -f webm_dash_manifest \
-i audio1.webm -f webm_dash_manifest \
-i audio2.webm -f webm_dash_manifest \
-i subtitles.vtt \
-c copy -map 0 -map 1 -map 2 -map 3 \
-f webm_dash_manifest -adaptation_sets "id=0,streams=v id=1,streams=a" manifest.mpd
내 두 비디오는 해상도와 비트 전송률이 다르며 완벽하게 작동합니다. 하지만 자막이 나오지 않고 두 개의 오디오 트랙이 두 개의 다른 비트 전송률을 가진 하나의 동일한 오디오 트랙으로 간주됩니다 (비디오처럼). 나는 많은 adaptation_sets를 가지고 있어야한다고 생각하지만 그것들을 만드는 방법을 모릅니다.
올바른 방법으로 매니페스트를 어떻게 만들 수 있습니까?
며칠 후 해결책을 찾았습니다.
내 목표는 비디오를 스트리밍에 정말 좋은 mpeg-dash 콘텐츠로 변환하는 것입니다.
비디오를 h264로, 오디오를 aac로, 자막을 webvtt로 인코딩합니다. 큰 브라우저 호환성을위한 좋은 설정입니다. vp9는 정말 좋지만 인코딩하기에 너무 깁니다.
필요한 도구 :
다음 스트림이있는 1080p 비디오 파일 "video.mkv"가 있다고 가정 해 보겠습니다.
비디오 스트림을 다른 해상도와 비트 레이트로 추출하고 트랜스 코딩합니다.
ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 5300k -maxrate 5300k -bufsize 2650k -vf 'scale=-1:1080' tmp/video/video-1080.mp4
ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 2400k -maxrate 2400k -bufsize 1200k -vf 'scale=-1:720' tmp/video/video-720.mp4
ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 600k -maxrate 600k -bufsize 300k -vf 'scale=-1:360' tmp/video/video-360.mp4
ffmpeg -i video.mkv -map 0:1 -ac 2 -ab 192k -vn -sn tmp/audio/audio-it.mp4
ffmpeg -i video.mkv -map 0:2 -ac 2 -ab 192k -vn -sn tmp/audio/audio-en.mp4
ffmpeg -i video.mkv -map 0:3 -vn -an tmp/subtitle/subtitle-it.vtt
ffmpeg -i video.mkv -map 0:4 -vn -an tmp/subtitle/subtitle-en.vtt
"-loglevel 경고"옵션을 사용하여 더 적은 정보를 볼 수 있습니다.
mp4fragment tmp/video/video-1080.mp4 tmp/video/f-video-1080.mp4
mp4fragment tmp/video/video-720.mp4 tmp/video/f-video-720.mp4
mp4fragment tmp/video/video-360.mp4 tmp/video/f-video-360.mp4
mp4fragment tmp/audio/audio-it.mp4 tmp/audio/f-audio-it.mp4
mp4fragment tmp/audio/audio-en.mp4 tmp/audio/f-audio-en.mp4
mp4dash --mpd-name=manifest.mpd tmp/video/f-video-1080.mp4 tmp/video/f-video-720.mp4 tmp/video/f-video-360.mp4 tmp/audio/f-audio-it.mp4 tmp/audio/f-audio-en.mp4 \[+format=webvtt,+language=it\]tmp/subtitle/subtitle-it.vtt \[+format=webvtt,+language=en\]tmp/subtitle/subtitle-en.vtt
이제 tmp 폴더를 삭제할 수 있습니다.
rm -rf tmp
(더 이상 필요하지 않은 경우 소스 파일)
이제 스트리밍 할 수있는 mpeg-dash 콘텐츠가 있습니다. 파일을 제공해야합니다 (cors 허용 및 바이트 범위 요청 활성화). 저는 앵귤러와 rx-player를 플레이어로 사용합니다. 언어, 자막을 전환 할 수 있으며 비디오 품질은 클라이언트의 대역폭에 맞게 조정됩니다!
Rx-player : https://github.com/canalplus/rx-player
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다