Few “years” ago I made part of small promo project for Nestle Russia as subcontractor.
It was promo action, website with some videos. Kids make sound track and my task was to merge user sound track and original video soundtrack.
It`s really easy to do with ffmpeg or mencoder.
BTW: ffmeg much better it works o.k. with aac codec and mp4 container.
Code is VERY VERY dirty, we had absolutely no time, but it can be useful to someone. And I save it “just to remember”.
#!/bin/bash
( #start subprocess
# Wait for lock on /var/lock/.merger-1.lock (fd 200) for 10 seconds
flock -x -w 3 200
if [ "$?" != "0" ]; then echo Cannot lock!; exit 1; fi
echo $$>>/var/lock/.merger-1.lock #for backward lockdir compatibility, notice this command is executed AFTER command bottom ) 200>/var/lock/.myscript-1.exclusivelock.
sourcevideo="/var/www/kinder_prod/sourcevideo"
sourceaudio="/var/www/kinder_prod/audioupload"
targetdir="/var/www/kinder_prod/processedvideo"
processedaudio="/var/www/kinder_prod/processedaudio"
while true; do
if [ "$(ls -A $sourceaudio)" ]; then
for i in `ls -1 $sourceaudio/*.wav | xargs -n1 basename`; do
videoid=`echo $i | awk -F"--" '{print $1}'`
audioid=`echo $i | awk -F"--" '{print $2}' | awk -F"." '{print $1}'`
sox $sourceaudio/$i /tmp1/$i rate 44100; mv /tmp1/$i $sourceaudio/$i; chown milkslice:milkslice $sourceaudio/$i || exit 1
sox -m $sourcevideo/$videoid.mp3 $sourceaudio/$i /tmp1/$videoid--$audioid.mp3 && \
ffmpeg -y -i /tmp1/$videoid--$audioid.mp3 -strict experimental -acodec aac -bsf:a aac_adtstoasc /tmp1/$videoid--$audioid.aac && \
ffmpeg -y -i /tmp1/$videoid--$audioid.aac -i $sourcevideo/$videoid.mp4 -bsf:a aac_adtstoasc -preset ultrafast -c copy $targetdir/$videoid--$audioid.mp4 || exit 1
# mencoder -of lavf -lavfopts format=mp4 -oac copy -fafmttag 0x706D \
#-audiofile /tmp1/$videoid--$audioid.aac -ovc copy $sourcevideo/$videoid.mp4 -o $targetdir/$videoid--$audioid.mp4 || exit 1
chown milkslice:milkslice $targetdir/$videoid--$audioid.mp4
mv -f $sourceaudio/$i $processedaudio
rm /tmp1/$videoid--$audioid.mp3
rm /tmp1/$videoid--$audioid.aac
done
fi
sleep 1;
done
) 200>/var/lock/.merger-1.lock #exit subprocess
FLOCKEXIT=$? #save exitcode status
exit $FLOCKEXIT
( #start subprocess
# Wait for lock on /var/lock/.merger-1.lock (fd 200) for 10 seconds
flock -x -w 3 200
if [ "$?" != "0" ]; then echo Cannot lock!; exit 1; fi
echo $$>>/var/lock/.merger-1.lock #for backward lockdir compatibility, notice this command is executed AFTER command bottom ) 200>/var/lock/.myscript-1.exclusivelock.
sourcevideo="/var/www/kinder_prod/sourcevideo"
sourceaudio="/var/www/kinder_prod/audioupload"
targetdir="/var/www/kinder_prod/processedvideo"
processedaudio="/var/www/kinder_prod/processedaudio"
while true; do
if [ "$(ls -A $sourceaudio)" ]; then
for i in `ls -1 $sourceaudio/*.wav | xargs -n1 basename`; do
videoid=`echo $i | awk -F"--" '{print $1}'`
audioid=`echo $i | awk -F"--" '{print $2}' | awk -F"." '{print $1}'`
sox $sourceaudio/$i /tmp1/$i rate 44100; mv /tmp1/$i $sourceaudio/$i; chown milkslice:milkslice $sourceaudio/$i || exit 1
sox -m $sourcevideo/$videoid.mp3 $sourceaudio/$i /tmp1/$videoid--$audioid.mp3 && \
ffmpeg -y -i /tmp1/$videoid--$audioid.mp3 -strict experimental -acodec aac -bsf:a aac_adtstoasc /tmp1/$videoid--$audioid.aac && \
ffmpeg -y -i /tmp1/$videoid--$audioid.aac -i $sourcevideo/$videoid.mp4 -bsf:a aac_adtstoasc -preset ultrafast -c copy $targetdir/$videoid--$audioid.mp4 || exit 1
# mencoder -of lavf -lavfopts format=mp4 -oac copy -fafmttag 0x706D \
#-audiofile /tmp1/$videoid--$audioid.aac -ovc copy $sourcevideo/$videoid.mp4 -o $targetdir/$videoid--$audioid.mp4 || exit 1
chown milkslice:milkslice $targetdir/$videoid--$audioid.mp4
mv -f $sourceaudio/$i $processedaudio
rm /tmp1/$videoid--$audioid.mp3
rm /tmp1/$videoid--$audioid.aac
done
fi
sleep 1;
done
) 200>/var/lock/.merger-1.lock #exit subprocess
FLOCKEXIT=$? #save exitcode status
exit $FLOCKEXIT
And run screen with script. (alternative to upstart)
/usr/bin/screen -dm bash -c 'cd /root/merger-prod; /root/merger-prod/merger-prod.sh'
Recent Comments