|
""" |
|
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() |
|
|