Skip to content

Optimized library for large-scale extraction of frames and audio from video.

License

Notifications You must be signed in to change notification settings

rom1504/video2numpy

 
 

Repository files navigation

video2numpy

pypi Open In Colab Try it on gitpod

A nice template to start with

Install

pip install video2numpy

Or build from source:

python setup.py install

Usage

NAME
    video2numpy - Read frames from videos and save as numpy arrays

SYNOPSIS
    video2numpy SRC <flags>

DESCRIPTION
    Input:
      src:
        str: path to mp4 file
        str: youtube link
        str: path to txt file with multiple mp4's or youtube links
        list: list with multiple mp4's or youtube links
      dest:
        str: directory where to save frames to
        None: dest = src   .npy
      take_every_nth:
        int: only take every nth frame
      resize_size:
        int: new pixel height and width of resized frame

POSITIONAL ARGUMENTS
    SRC

FLAGS
    --dest=DEST
        Default: ''
    --take_every_nth=TAKE_EVERY_NTH
        Default: 1
    --resize_size=RESIZE_SIZE
        Default: 224

API

This module exposes a single function video2numpy which takes the same arguments as the command line tool:

import glob
from video2numpy import video2numpy

VIDS = glob.glob("some/path/my_videos/*.mp4")
FRAME_DIR = "some/path/my_embeddings"
take_every_5 = 5

video2numpy(VIDS, FRAME_DIR, take_every_5)

You can alse directly use the reader and iterate over frame blocks yourself:

import glob
from video2numpy.frame_reader import FrameReader
from video2numpy.utils import split_block

VIDS = glob.glob("some/path/my_videos/*.mp4")
take_every_5 = 5
resize_size = 300

reader = FrameReader(VIDS, FRAME_DIR, take_every_5, resize_size)

for block, ind_dict in reader:

    if you need to process the block in large batches (f.e. good for ML):
        proc_block = ml_model(block)
    else:
        proc_block = block

    # then you can separate the video frames into a dict easily with split_block from utils:
    split_up_vids = split_block(proc_block, ind_dict)

    for vid_name, proc_frames in split_up_vids.items():
        # do something with proc_frame of shape (n_frames, 300, 300, 3)
        ...

For development

Either locally, or in gitpod (do export PIP_USER=false there)

Setup a virtualenv:

python3 -m venv .env
source .env/bin/activate
pip install -e .

to run tests:

pip install -r requirements-test.txt

then

make lint
make test

You can use make black to reformat the code

python -m pytest -x -s -v tests -k "dummy" to run a specific test

About

Optimized library for large-scale extraction of frames and audio from video.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 92.8%
  • Makefile 7.2%