Skip to content

Instantly share code, notes, and snippets.

@KutayGuler
Created April 16, 2025 14:17
Show Gist options
  • Save KutayGuler/05717b20d67083e611e6fc1095193f06 to your computer and use it in GitHub Desktop.
Save KutayGuler/05717b20d67083e611e6fc1095193f06 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Inputs
VIDEO=video.mp4
ENG_AUDIO=video.mp4 # assume embedded original audio is English
TR_AUDIO=tr.wav
ES_AUDIO=es.wav
# Step 1: Convert WAV to AAC
ffmpeg -y -i "$TR_AUDIO" -c:a aac -b:a 128k tr.aac
ffmpeg -y -i "$ES_AUDIO" -c:a aac -b:a 128k es.aac
# Step 2: Extract English audio from MP4 to eng.aac
ffmpeg -y -i "$ENG_AUDIO" -map 0:a:0 -c:a aac -b:a 128k eng.aac
# Step 3: Segment the video into HLS
ffmpeg -y -i "$VIDEO" -c:v libx264 -crf 20 -preset fast -an \
-hls_time 4 -hls_playlist_type vod \
-hls_segment_filename "video_%03d.ts" video.m3u8
# Step 4: Segment audio tracks into HLS
ffmpeg -y -i eng.aac -c:a copy -hls_time 4 -hls_playlist_type vod \
-hls_segment_filename "eng_%03d.aac" eng.m3u8
ffmpeg -y -i tr.aac -c:a copy -hls_time 4 -hls_playlist_type vod \
-hls_segment_filename "tr_%03d.aac" tr.m3u8
ffmpeg -y -i es.aac -c:a copy -hls_time 4 -hls_playlist_type vod \
-hls_segment_filename "es_%03d.aac" es.m3u8
# Step 5: Create master.m3u8
cat > master.m3u8 <<EOF
#EXTM3U
#EXT-X-VERSION:3
# Video
#EXT-X-STREAM-INF:BANDWIDTH=3000000,CODECS="avc1.640029",RESOLUTION=1280x720
video.m3u8
# Audio - English
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",AUTOSELECT=YES,DEFAULT=YES,URI="eng.m3u8"
# Audio - Turkish
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Turkish",LANGUAGE="tr",AUTOSELECT=NO,DEFAULT=NO,URI="tr.m3u8"
# Audio - Spanish
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Spanish",LANGUAGE="es",AUTOSELECT=NO,DEFAULT=NO,URI="es.m3u8"
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment