#!/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