blog-acoustic-fingerprinting
ARCHIVED - acoustic fingerprinting television shows with python
git clone https://git.vogt.world/blog-acoustic-fingerprinting.git
Log | Files | README.md
← All files
name: src/python/clips.py
-rw-r--r--
1261
 1import warnings
 2import glob
 3warnings.filterwarnings("ignore")
 4from fingerprinter.reader import read_single
 5from etc.util import get_args_for_input_output_directories, get_file_name
 6from random import randint
 7from scipy.io.wavfile import write
 8
 9
10DESCRIPTION = """
11Pull random 1-second clips from every .wav file in a given directory (-d), and output them to another directory (-o).
12All filenames will be in the format "{episode}.{play_head}.wav", e.g. "s01e01.555.wav"
13"""
14CLIP_LENGTH_SECONDS = 16
15
16
17if __name__ == "__main__":
18  args = get_args_for_input_output_directories(DESCRIPTION)
19  print("Loading cutting clips from .wav files in directory {}".format(args.directory))
20  working_directory = args.directory
21  output_directory = args.output
22  for filename in glob.glob(working_directory + "*.wav"):
23    print("Cutting clip for {}".format(filename))
24    episode_name = get_file_name(filename)
25    channel, frame_rate = read_single(filename)
26    index_of_clip = randint(0, len(channel) - frame_rate)
27    one_second_clip = channel[index_of_clip:index_of_clip + (CLIP_LENGTH_SECONDS * frame_rate)]
28    output_file_path = "{}/{}.{}.wav".format(output_directory, episode_name, (index_of_clip / frame_rate))
29    write(output_file_path, frame_rate, one_second_clip)