Spaces:
Sleeping
Sleeping
| """ | |
| 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" | |
| # command1 = "ffmpeg -i {in_video} -vn -acodec copy {aac_audio}" | |
| # command2 = "ffmpeg -i {aac_audio} -vn -acodec pcm_s16le -ac 1 -ar 22000 {out_audio}" | |
| # command = "ffmpeg -i {in_video} -vn -acodec pcm_s16le -ac 1 -ar 22000 {out_audio}" | |
| 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() | |