#!/bin/sh
input_video=$1
input_audio=$2
if [[ -z "$1" ]] || [[ -z "$2" ]]
then
echo Invalid input
echo "\"$0 \""
exit 1
fi
tmp_video=tmp$$.mp4
function get_duration() {
ffmpeg -i $1 2>&1 | \
awk -F, '/Duration/{print $1}' | \
awk -F: '{print $2*3600 + $3*60 + $4}'
}
duration_audio=`get_duration $input_audio`
echo Duration of audio is $duration_audio seconds
duration_video=`get_duration $input_video`
echo Duration of video is $duration_video seconds
av_ratio=$(echo "2k $duration_audio $duration_video / p" | dc)
echo Calculated audio/video ratio is $av_ratio
# make video about the same length as the audio
ffmpeg \
-i $input_video \
-filter:v "setpts=${av_ratio}*PTS" \
$tmp_video
# adds audio to video,
# compresses audio
ffmpeg \
-i $tmp_video \
-i $input_audio \
-c:v copy \
-map 0:v:0 \
-map 1:a:0 \
-c:a aac \
-b:a 192k \
output.mp4
[[ -f $tmp_video ]] && rm $tmp_video