| | """
|
| | Script for extracting audio (16-bit, mono, 22000 Hz) from video file.
|
| | """
|
| |
|
| | import os
|
| | import argparse
|
| | import subprocess
|
| |
|
| |
|
| | def parse_args():
|
| | """
|
| | Create python script parameters.
|
| |
|
| | Returns
|
| | -------
|
| | ArgumentParser
|
| | Resulted args.
|
| | """
|
| | parser = argparse.ArgumentParser(
|
| | description="Extract audio from video file",
|
| | formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
| | parser.add_argument(
|
| | "--in-video",
|
| | type=str,
|
| | required=True,
|
| | help="path to input video file or directory")
|
| | parser.add_argument(
|
| | "--out-audio",
|
| | type=str,
|
| | help="path to output audio file")
|
| |
|
| | args = parser.parse_args()
|
| | return args
|
| |
|
| |
|
| | def extract_audio(in_video,
|
| | out_audio):
|
| | """
|
| | Real extract audio from video file.
|
| |
|
| | Parameters
|
| | ----------
|
| | in_video : str
|
| | Path to input video file.
|
| | out_audio : str
|
| | Path to output audio file.
|
| | """
|
| | if not out_audio:
|
| | file_stem, _ = os.path.splitext(in_video)
|
| | out_audio = file_stem + ".wav"
|
| |
|
| |
|
| |
|
| | command = "ffmpeg -i {in_video} -vn -acodec pcm_s16le -ac 1 -ar 16000 {out_audio}"
|
| | subprocess.call([command.format(in_video=in_video, out_audio=out_audio)], shell=True)
|
| |
|
| |
|
| | def main():
|
| | """
|
| | Main body of script.
|
| | """
|
| | args = parse_args()
|
| | in_video = os.path.expanduser(args.in_video)
|
| | if not os.path.exists(in_video):
|
| | raise Exception("Input file/directory doesn't exist: {}".format(in_video))
|
| | if os.path.isfile(in_video):
|
| | extract_audio(
|
| | in_video=in_video,
|
| | out_audio=args.out_audio)
|
| | else:
|
| | video_file_paths = []
|
| | for file_name in os.listdir(in_video):
|
| | if not os.path.isfile(os.path.join(in_video, file_name)):
|
| | continue
|
| | _, file_ext = os.path.splitext(file_name)
|
| | if file_ext.lower() in (".mp4", ".mkv", ".avi"):
|
| | video_file_path = os.path.join(in_video, file_name)
|
| | video_file_paths.append(video_file_path)
|
| | video_file_paths = sorted(video_file_paths)
|
| | for video_file_path in video_file_paths:
|
| | extract_audio(
|
| | in_video=video_file_path,
|
| | out_audio="")
|
| |
|
| |
|
| | if __name__ == "__main__":
|
| | main()
|
| |
|