Skip to content

Instantly share code, notes, and snippets.

@manasmbellani
Created February 16, 2019 03:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save manasmbellani/14e2653af1b02df32bd9ba9b48cf6366 to your computer and use it in GitHub Desktop.
Save manasmbellani/14e2653af1b02df32bd9ba9b48cf6366 to your computer and use it in GitHub Desktop.
ffmpeg_extract_audio_from_video.sh - Extracts audio from video files by running ffmpeg
#!/bin/bash
DEFAULT_OUTPUT_FOLDER="out-audio-files"
if [ $# -lt 1 ]; then
echo "[-] $0 <folder/file-to-get-audio-from> [out-folder]"
echo
echo "Description: "
echo "This script converts a single file and outputs the file into an output folder"
echo "This script has been written for MacOS X only"
echo
echo "Arguments:"
echo "folder/file-to-get-audio-from: File/folder which is a video file to get audio from"
echo "out-folder: Output folder to write multiple files to. Only valid if folder was specified with files for conversion"
echo
exit
fi
in_file_folder="$1"
out_folder="$2"
[ -z "$out_folder" ] && out_folder="$DEFAULT_OUTPUT_FOLDER"
echo "[+] out_folder: $out_folder"
function install {
# Install ffmpeg dependency via brew
echo "[*] Installing ffmpeg"
brew install ffmpeg
}
function get_audio_filename_from_video_filename {
in_file="$1"
in_file_ext="${in_file##*.}"
in_file_name_without_ext="${in_file%.*}"
out_file="$in_file_name_without_ext.mp3"
echo "$out_file"
}
function convert_single_video_file_to_audio {
in_file="$1"
out_file="$2"
echo "[*] Converting input video file: $in_file to mp3 output file: $out_file using ffmpeg"
ffmpeg -i "$in_file" -q:a 0 -map a "$out_file"
}
if [ -f "$in_file_folder" ]; then
in_file="$in_file_folder"
out_file=$(get_audio_filename_from_video_filename "$in_file")
convert_single_video_file_to_audio "$in_file" "$out_file"
elif [ -d "$in_file_folder" ]; then
in_folder="$in_file_folder"
if [ ! -d "$out_folder" ]; then
echo "[*] Making output folder: $out_folder"
mkdir "$out_folder"
fi
in_files=`ls -1 "$in_folder"`
IFS=$'\n'
for in_file in `echo "$in_files"`; do
out_file=$(get_audio_filename_from_video_filename "$in_folder/$in_file")
convert_single_video_file_to_audio "$in_folder/$in_file" "$out_file"
mv "$out_file" "$out_folder"
done
else
echo "[-] Non-existant file/folder: $in_file_folder"
exit
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment