Requirement: FFMPEG
How to install ffmpeg on CentOS 6 and 7
How to compile FFmpeg on CentOS
Step 1: Create file or download file create-vod-hls.sh
#!/usr/bin/env bash set -e # Usage create-vod-hls.sh SOURCE_FILE [OUTPUT_NAME] [[ ! "${1}" ]] && echo "Usage: create-vod-hls.sh SOURCE_FILE [OUTPUT_NAME]" && exit 1 # comment/add lines here to control which renditions would be created renditions=( # resolution bitrate audio-rate # "426x240 400k 64k" "640x360 800k 96k" "842x480 1400k 128k" "1280x720 2800k 128k" "1920x1080 5000k 192k" ) segment_target_duration=4 # try to create a new segment every X seconds max_bitrate_ratio=1.07 # maximum accepted bitrate fluctuations rate_monitor_buffer_ratio=1.5 # maximum buffer size between bitrate conformance checks ######################################################################### source="${1}" target="${2}" if [[ ! "${target}" ]]; then target="${source##*/}" # leave only last component of path target="${target%.*}" # strip extension fi mkdir -p ${target} key_frames_interval="$(echo `ffprobe ${source} 2>&1 | grep -oE '[[:digit:]]+(.[[:digit:]]+)? fps' | grep -oE '[[:digit:]]+(.[[:digit:]]+)?'`*2 | bc || echo '')" key_frames_interval=${key_frames_interval:-50} key_frames_interval=$(echo `printf "%.1f\n" $(bc -l <<<"$key_frames_interval/10")`*10 | bc) # round key_frames_interval=${key_frames_interval%.*} # truncate to integer # static parameters that are similar for all renditions static_params="-c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0" static_params+=" -g ${key_frames_interval} -keyint_min ${key_frames_interval} -hls_time ${segment_target_duration}" static_params+=" -hls_playlist_type vod" # misc params misc_params="-hide_banner -y" master_playlist="#EXTM3U #EXT-X-VERSION:3 " cmd="" for rendition in "${renditions[@]}"; do # drop extraneous spaces rendition="${rendition/[[:space:]]+/ }" # rendition fields resolution="$(echo ${rendition} | cut -d ' ' -f 1)" bitrate="$(echo ${rendition} | cut -d ' ' -f 2)" audiorate="$(echo ${rendition} | cut -d ' ' -f 3)" # calculated fields width="$(echo ${resolution} | grep -oE '^[[:digit:]]+')" height="$(echo ${resolution} | grep -oE '[[:digit:]]+$')" maxrate="$(echo "`echo ${bitrate} | grep -oE '[[:digit:]]+'`*${max_bitrate_ratio}" | bc)" bufsize="$(echo "`echo ${bitrate} | grep -oE '[[:digit:]]+'`*${rate_monitor_buffer_ratio}" | bc)" bandwidth="$(echo ${bitrate} | grep -oE '[[:digit:]]+')000" name="${height}p" cmd+=" ${static_params} -vf scale=w=${width}:h=${height}:force_original_aspect_ratio=decrease" cmd+=" -b:v ${bitrate} -maxrate ${maxrate%.*}k -bufsize ${bufsize%.*}k -b:a ${audiorate}" cmd+=" -hls_segment_filename ${target}/${name}_%03d.ts ${target}/${name}.m3u8" # add rendition entry in the master playlist master_playlist+="#EXT-X-STREAM-INF:BANDWIDTH=${bandwidth},RESOLUTION=${resolution}\n${name}.m3u8\n" done # start conversion echo -e "Executing command:\nffmpeg ${misc_params} -i ${source} ${cmd}" ffmpeg ${misc_params} -i ${source} ${cmd} # create master playlist file echo -e "${master_playlist}" > ${target}/playlist.m3u8 echo "Done - encoded HLS is at ${target}/"
[root@tutorialspots store]# wget https://gist.github.com/mrbar42/ae111731906f958b396f30906004b3fa/raw/85d14d36559e0010346993e779ab73b18d856d49/create-vod-hls.sh --2020-02-11 03:00:49-- https://gist.github.com/mrbar42/ae111731906f958b396f30906004b3fa/raw/85d14d36559e0010346993e779ab73b18d856d49/create-vod-hls.sh Resolving gist.github.com (gist.github.com)... 140.82.113.20 Connecting to gist.github.com (gist.github.com)|140.82.113.20|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://gist.githubusercontent.com/mrbar42/ae111731906f958b396f30906004b3fa/raw/85d14d36559e0010346993e779ab73b18d856d49/create-vod-hls.sh [following] --2020-02-11 03:00:49-- https://gist.githubusercontent.com/mrbar42/ae111731906f958b396f30906004b3fa/raw/85d14d36559e0010346993e779ab73b18d856d49/create-vod-hls.sh Resolving gist.githubusercontent.com (gist.githubusercontent.com)... 199.232.72.133 Connecting to gist.githubusercontent.com (gist.githubusercontent.com)|199.232.72.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3103 (3.0K) 1 Saving to: ‘create-vod-hls.sh’ 100%[======================================>] 3,103 --.-K/s in 0s 2020-02-11 03:00:50 (15.0 MB/s) - ‘create-vod-hls.sh’ saved [3103/3103]
Step 2: convert mkv to VOD HLS
bash create-vod-hls.sh filename.mkv
Note: filename doesn’t contain space