I’m Dr. Krishna Rao Vijayanagar, and I have worked on Video Compression (AVC, HEVC, MultiView Plus Depth), ABR streaming, and Video Analytics (QoE, .
Basic Steps to HLS Packaging using FFmpeg. Resize a Video to Multiple Resolutions using FFmpeg ffmpeg -i brooklynsfinest_clip_1080p.mp4 \ -filter_complex \ "[0:v]split=3[v1][v2][v3];\ [v1]copy[v1out];\ [v2]scale=w=1280:h=720[v2out];\ [v3]scale=w=640:h=360[v3out]" Transcode a Video to Multiple Bitrates for HLS Packaging using FFmpeg. -map [v1out] -c:v:0 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:0 5M -maxrate:v:0 5M -minrate:v:0 5M -bufsize:v:0 10M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map [v2out] -c:v:1 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:0 3M -maxrate:v:0 3M -minrate:v:0 3M -bufsize:v:0 3M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map [v3out] -c:v:2 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:0 1M -maxrate:v:0 1M -minrate:v:0 1M -bufsize:v:0 1M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map a:0 -c:a:0 aac -b:a:0 96k -ac 2 \ -map a:0 -c:a:1 aac -b:a:1 96k -ac 2 \ -map a:0 -c:a:2 aac -b:a:2 48k -ac 2 \ Creating HLS
Playlists (m3u8) using FFmpeg. -f hls \ -hls_time 2 \ -hls_playlist_type vod \ -hls_flags independent_segments \ -hls_segment_type mpegts \ -hls_segment_filename stream_%v/data%02d.ts \ -var_stream_map “v:0,a:0 v:1,a:1 v:2,a:2” stream_%v/stream.m3u8. Create an HLS Master Playlist (m3u8) using FFmpeg. -master_pl_name master.m3u8. Final Script for HLS Packaging using FFmpeg – VOD ffmpeg -i brooklynsfinest_clip_1080p.mp4 \ -filter_complex \ "[0:v]split=3[v1][v2][v3]; \ [v1]copy[v1out]; [v2]scale=w=1280:h=720[v2out]; [v3]scale=w=640:h=360[v3out]" \ -map [v1out] -c:v:0 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:0 5M -maxrate:v:0 5M -minrate:v:0 5M -bufsize:v:0 10M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map [v2out] -c:v:1 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:1 3M -maxrate:v:1 3M -minrate:v:1 3M -bufsize:v:1 3M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map [v3out] -c:v:2 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:2 1M -maxrate:v:2 1M
-minrate:v:2 1M -bufsize:v:2 1M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \ -map a:0 -c:a:0 aac -b:a:0 96k -ac 2 \ -map a:0 -c:a:1 aac -b:a:1 96k -ac 2 \ -map a:0 -c:a:2 aac -b:a:2 48k -ac 2 \ -f hls \ -hls_time 2 \ -hls_playlist_type vod \ -hls_flags independent_segments \ -hls_segment_type mpegts \ -hls_segment_filename stream_%v/data%02d.ts \ -master_pl_name master.m3u8 \ -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" stream_%v.m3u8. #EXTM3U. #EXT-X-VERSION:6. #EXT-X-STREAM-INF:BANDWIDTH=5605600,RESOLUTION=1920x1080,CODECS="avc1.640032,mp4a.40.2" stream_0.m3u8. #EXTM3U. #EXT-X-VERSION:6. #EXT-X-TARGETDURATION:2. #EXT-X-MEDIA-SEQUENCE:0. #EXT-X-PLAYLIST-TYPE:VOD. #EXT-X-INDEPENDENT-SEGMENTS. #EXTINF:2.002000, data00.ts. #EXTINF:2.002000, data01.ts. #EXTINF:2.002011, data02.ts. #EXTINF:2.002000, data03.ts. #EXTINF:2.002000, data04.ts. #EXTINF:2.002000, data05.ts. #EXTINF:2.002000, data06.ts. #EXTINF:2.002000, data07.ts. #EXTINF:2.002011, data08.ts. #EXTINF:2.002000, data09.ts.
#EXTINF:0.041711, data10.ts. #EXT-X-ENDLIST. Live HLS Packaging using FFmpeg. #EXTM3U. #EXT-X-VERSION:6. #EXT-X-TARGETDURATION:2. #EXT-X-MEDIA-SEQUENCE:1. #EXT-X-INDEPENDENT-SEGMENTS. #EXTINF:2.002000, data01.ts. #EXTINF:2.002011, data02.ts. #EXTM3U. #EXT-X-VERSION:6. #EXT-X-TARGETDURATION:2. #EXT-X-MEDIA-SEQUENCE:2. #EXT-X-INDEPENDENT-SEGMENTS. #EXTINF:2.002011, data02.ts. #EXTINF:2.002000, data03.ts. Other useful HLS Packaging options in FFmpeg. Conclusion.
Basic Steps to HLS Packaging using FFmpeg.
Resize a Video to Multiple Resolutions using FFmpeg ffmpeg -i brooklynsfinest_clip_1080p.mp4 \ -filter_complex \ "[0:v]split=3[v1][v2][v3];\ [v1]copy[v1out];\ [v2]scale=w=1280:h=720[v2out];\ [v3]scale=w=640:h=360[v3out]" Transcode a Video to Multiple Bitrates for HLS Packaging using FFmpeg. -map [v1out] -c:v:0 libx264 -x264-params "nal-hrd=cbr:fo...