i have created this shell script to encode videos using ffmpeg. i need to maintain the folder structure of input and output folder automatically when i run this script.
Problem : As of now, it moves all videos to root of destination directory. it need to create subfolder and output file should save in it.
Input folder:
Folder1
--sub_folder
---video1.mkv
---video2.ts
---video3.mp4
Folder2
---cat.mkv
---mouse.ts
---train.mp4
Expected Output folder:
Folder1
--sub_folder
---video1.mp4
---video2.mp4
---video3.mp4
Folder2
---cat.mp4
---mouse.mp4
---train.mp4
Code :
srcDir=$1
destDir=$2
for filename in $(find "$srcDir" -type f); do
basePath=${filename%.*}
baseName=${basePath##*/}
audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$filename")
videoformat=$(ffprobe -loglevel error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$filename")
if [ "$audioformat" == "aac" ] && [ "$videoformat" == "h264" ] ; then
echo $filename
echo $audioformat + $videoformat
ffmpeg -i "$filename" -y -c:v copy -c:a copy "$destDir"/"$baseName.mp4" -hide_banner -loglevel warning
elif [ "$audioformat" == "aac" ] && [ "$videoformat" != "h264" ] ; then
echo $filename
echo $audioformat + $videoformat
ffmpeg -i "$filename" -y -c:v libx264 -c:a copy "$destDir"/"$baseName.mp4" -hide_banner -loglevel warning
elif [ "$audioformat" != "aac" ] && [ "$videoformat" == "h264" ] ; then
echo $filename
echo $audioformat + $videoformat
ffmpeg -i "$filename" -y -c:v copy -c:a aac "$destDir"/"$baseName.mp4" -hide_banner -loglevel warning
else
echo $filename
echo $audioformat + $videoformat
ffmpeg -i "$filename" -y -c:v libx264 -c:a aac "$destDir"/"$baseName.mp4" -hide_banner -loglevel warning
fi
done
if possible , check whether this code looks good.