Skip to content

Instantly share code, notes, and snippets.

@dudewheresmycode
Last active July 10, 2023 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dudewheresmycode/513b5e540fadf11631aa20e581de050e to your computer and use it in GitHub Desktop.
Save dudewheresmycode/513b5e540fadf11631aa20e581de050e to your computer and use it in GitHub Desktop.
Transcode fragmented MP4s and package into HLS and DASH using shaka-packager
#!/bin/bash
packager \
'in=./tmp/output_540p.mp4,stream=video,init_segment=./tmp/output/video_3000_0/video_init.mp4,segment_template=./tmp/output/video_3000_0/video_$Number$.m4s' \
'in=./tmp/output_720p.mp4,stream=video,init_segment=./tmp/output/video_1700_1/video_init.mp4,segment_template=./tmp/output/video_1700_1/video_$Number$.m4s' \
'in=./tmp/output_1080p.mp4,stream=video,init_segment=./tmp/output/video_1200_2/video_init.mp4,segment_template=./tmp/output/video_1200_2/video_$Number$.m4s' \
'in=./tmp/output_audio_128.mp4,stream=audio,language=en,roles=main,hls_name=main_en_2,init_segment=./tmp/output/audio_96_2/audio_init.mp4,segment_template=./tmp/output/audio_96_2/audio_$Number$.m4s' \
'in=./tmp/output_audio_196.mp4,stream=audio,language=en,roles=main,hls_name=main_en_3,init_segment=./tmp/output/audio_64_3/audio_init.mp4,segment_template=./tmp/output/audio_64_3/audio_$Number$.m4s' \
--fragment_duration 6 \
--segment_duration 6 \
--hls_playlist_type vod \
--hls_master_playlist_output "./tmp/output/main.m3u8" \
--generate_static_live_mpd \
--mpd_output \
"./tmp/output/manifest.mpd"
#!/bin/bash
INPUT_FILE=/path/to/mp4
COMMON_OPTS="-c:v libx264 -movflags frag_keyframe+empty_moov -frag_duration 6000000 -sc_threshold 0 -g 144"
ffmpeg \
-i $INPUT_FILE \
-threads 2 \
-filter_complex "[v:0]split=3[in1][in2][in3];[a:0]asplit=2[aud1][aud2];[in1]scale=w=1920:h=1080:force_original_aspect_ratio=decrease[out1];[in2]scale=w=1280:h=720:force_original_aspect_ratio=decrease[out2];[in3]scale=w=960:h=540:force_original_aspect_ratio=decrease[out3]" \
-map "[out1]" $COMMON_OPTS -b:v 8000k -maxrate 8000k -bufsize 4000k ./tmp/output_1080p.mp4 \
-map "[out2]" $COMMON_OPTS -b:v 3000k -maxrate 3000k -bufsize 1500k ./tmp/output_720p.mp4 \
-map "[out3]" $COMMON_OPTS -b:v 1200k -maxrate 1200k -bufsize 600k ./tmp/output_540p.mp4 \
-map "[aud1]" -c:a aac -b:a 128k -ac 2 ./tmp/output_audio_128.mp4 \
-map "[aud2]" -c:a aac -b:a 192k -ac 2 ./tmp/output_audio_196.mp4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment