]> purplebirdman git - video-burn.git/blob - add-audio-to-video.sh
Calculate a/v ratio on the fly
[video-burn.git] / add-audio-to-video.sh
1 #!/bin/sh
2
3 input_video=$1
4 input_audio=$2
5
6 if [[ -z "$1" ]] || [[ -z "$2" ]]
7 then
8         echo Invalid input
9         echo "\"$0 <input video> <input audio>\""
10         exit 1
11 fi
12
13 tmp_video=tmp$$.mp4
14
15 function get_duration() {
16         ffmpeg -i $1 2>&1 | \
17                 awk -F, '/Duration/{print $1}' | \
18                 awk -F: '{print $2*3600 + $3*60 + $4}'
19 }
20
21 duration_audio=`get_duration $input_audio`
22 echo Duration of audio is $duration_audio seconds
23
24 duration_video=`get_duration $input_video`
25 echo Duration of video is $duration_video seconds
26
27 av_ratio=$(echo "2k $duration_audio $duration_video / p" | dc)
28 echo Calculated audio/video ratio is $av_ratio
29
30
31 # make video about the same length as the audio
32 ffmpeg \
33         -i $input_video \
34         -filter:v "setpts=${av_ratio}*PTS" \
35         $tmp_video
36
37 # adds audio to video,
38 # compresses audio
39 ffmpeg \
40         -i $tmp_video \
41         -i $input_audio \
42         -c:v copy \
43         -map 0:v:0 \
44         -map 1:a:0 \
45         -c:a aac \
46         -b:a 192k \
47         output.mp4
48
49 [[ -f $tmp_video ]] && rm $tmp_video