Hello World

Be Happy!

ffmpeg mp4 encoding to m3u8


install for mac

brew install ffmpeg

single m3u8 encoding

ffmpeg -i input.mp4 -g 60 -hls_time 2 out.m3u8

sample mp4 download

multiple m3u8 encoding 

mkdir sample
ffmpeg -hide_banner -y -i sample.mp4 \
  -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod  -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename sample/360p_%03d.ts sample/360p.m3u8 \
  -vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename sample/480p_%03d.ts sample/480p.m3u8 \
  -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename sample/720p_%03d.ts sample/720p.m3u8 \
  -vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 5000k -maxrate 5350k -bufsize 7500k -b:a 192k -hls_segment_filename sample/1080p_%03d.ts sample/1080p.m3u8

bash shell
sh encoding.sh sample

#!/bin/bash

echo "encoding start " $1
mkdir $1
ffmpeg -hide_banner -y -i $1.mp4 \
  -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod  -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename $1/360p_%03d.ts $1/360p.m3u8 \
  -vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename $1/480p_%03d.ts $1/480p.m3u8 \
  -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename $1/720p_%03d.ts $1/720p.m3u8 \
  -vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 5000k -maxrate 5350k -bufsize 7500k -b:a 192k -hls_segment_filename $1/1080p_%03d.ts $1/1080p.m3u8
echo "encoding done" $1

apple silicon

h264 
 mkdir sample_m1_h264
 ffmpeg -i sample_1920x1080.mp4 -vcodec h264_videotoolbox -g 60 -hls_time 2 sample_m1_h264/out.m3u8 
 ruby -run -e httpd . -p 8000 # http://localhost:8000/sample_m1_h264/out.m3u8 
h265
 mkdir sample_m1_hevc 
 ffmpeg -i sample_1920x1080.mp4 -vcodec hevc_videotoolbox -g 60 -hls_time 2 sample_m1_hevc/out.m3u8 
 ruby -run -e httpd . -p 8000 #  http://localhost:8000/sample_m1_hevc/out.m3u8
#rails-encoding (8) #ffmpeg (3) #apple-silicon (1)
List