sox and ffmpeg (convert hls into live hls) usage
2014-05-08
These are the basic usage of SOX
# Create background noise profile from mp3
/usr/bin/sox noise.mp3 -n noiseprof noise.prof
# Remove noise from mp3 using profile
/usr/bin/sox input.mp3 output.mp3 noisered noise.prof 0.21
# Remove silence from mp3
/usr/bin/sox input.mp3 output.mp3 silence -l 1 0.3 5% -1 2.0 5%
# Remove noise and silence in a single command
/usr/bin/sox input.mp3 output.mp3 noisered noise.prof 0.21 silence -l 1 0.3 5% -1 2.0 5%
# Batch process files
/usr/bin/find . -type f -name "*.mp3" -mmin +30 -exec sox -S --multi-threaded -buffer 131072 {} /path/to/output/{} noisered noise.prof 0.21 silence -l 1 0.3 5% -1 2.0 5% \;
# Remove insignificant files
/usr/bin/find . -type f -name "*.mp3" -mmin +30 -size -500k -delete
This script will convert ffmpeg HLS into "live streaming HLS"
#!/bin/bash
x=0
while true; do
#cat out.m3u8|sed 's/YES/NO/' | sed 's/#EXT-X-ENDLIST//'> temp
line=`wc -l out.m3u8|awk '{print $1}'`
line=$(($line-5))
line=$(($line/2))
echo $line
head -5 out.m3u8 |sed 's/YES/NO/' | sed 's/#EXT-X-ENDLIST//' | sed "s/#EXT-X-MEDIA-SEQUENCE:0/#EXT-X-MEDIA-SEQUENCE:$line/" > temp
#echo "#EXTM3U">temp
#echo "#EXT-X-VERSION:3">>temp;
#echo "#EXT-X-TARGETDURATION:2">>temp;
#echo "#EXT-X-MEDIA-SEQUENCE:$x">>temp;
tail -16 out.m3u8 >> temp;
#echo "#EXTINF:1,">>temp;
#echo "dummy.mp3">>temp;
tail -8 out.m3u8 | grep mp3 | while read a; do
sox $a c$a noisered noise.prof 0.21
done
sed -i 's/a0/ca0/' temp
mv temp out2.m3u8
x=$(($x+1))
#sleep 2
done
The above script has to run with ffmpeg:
/root/download/ffmpeg-2.1.4/ffmpeg -f alsa -ac 2 -i hw:0,0 -strict experimental -acodec libmp3lame -map 0 -f segment -segment_list out.m3u8 -segment_format libmp3lame -segment_time 0.5 -segment_list_flags +live 'a%05d.mp3'