Repository: AliaksandrSiarohin/first-order-model
Branch: master
Commit: c0274845cb2d
Files: 42
Total size: 1.5 MB
Directory structure:
gitextract_zo48uj8s/
├── .dockerignore
├── .gitignore
├── Dockerfile
├── LICENSE.md
├── README.md
├── animate.py
├── augmentation.py
├── config/
│ ├── bair-256.yaml
│ ├── fashion-256.yaml
│ ├── mgif-256.yaml
│ ├── nemo-256.yaml
│ ├── taichi-256.yaml
│ ├── taichi-adv-256.yaml
│ ├── vox-256.yaml
│ └── vox-adv-256.yaml
├── crop-video.py
├── data/
│ ├── bair256.csv
│ ├── taichi-loading/
│ │ ├── README.md
│ │ ├── load_videos.py
│ │ └── taichi-metadata.csv
│ └── taichi256.csv
├── demo.ipynb
├── demo.py
├── demo_jupyter.ipynb
├── frames_dataset.py
├── logger.py
├── modules/
│ ├── dense_motion.py
│ ├── discriminator.py
│ ├── generator.py
│ ├── keypoint_detector.py
│ ├── model.py
│ └── util.py
├── old_demo.ipynb
├── reconstruction.py
├── requirements.txt
├── run.py
├── sync_batchnorm/
│ ├── __init__.py
│ ├── batchnorm.py
│ ├── comm.py
│ ├── replicate.py
│ └── unittest.py
└── train.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
/venv
.git
__pycache__
================================================
FILE: .gitignore
================================================
/.vscode
__pycache__
/venv
================================================
FILE: Dockerfile
================================================
FROM nvcr.io/nvidia/pytorch:21.02-py3
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qqy install python3-pip ffmpeg git less nano libsm6 libxext6 libxrender-dev \
&& rm -rf /var/lib/apt/lists/*
COPY . /app/
WORKDIR /app
RUN pip3 install --upgrade pip
RUN pip3 install \
git+https://github.com/1adrianb/face-alignment \
-r requirements.txt
================================================
FILE: LICENSE.md
================================================
MIT License
Copyright (c) 2019-2023 Aliaksandr Siarohin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
!!! Check out our new [paper](https://arxiv.org/pdf/2104.11280.pdf) and [framework](https://github.com/snap-research/articulated-animation) improved for articulated objects
# First Order Motion Model for Image Animation
This repository contains the source code for the paper [First Order Motion Model for Image Animation](https://papers.nips.cc/paper/8935-first-order-motion-model-for-image-animation) by Aliaksandr Siarohin, [Stéphane Lathuilière](http://stelat.eu), [Sergey Tulyakov](http://stulyakov.com), [Elisa Ricci](http://elisaricci.eu/) and [Nicu Sebe](http://disi.unitn.it/~sebe/).
[Hugging Face Spaces](https://huggingface.co/spaces/abhishek/first-order-motion-model)
## Example animations
The videos on the left show the driving videos. The first row on the right for each dataset shows the source videos. The bottom row contains the animated sequences with motion transferred from the driving video and object taken from the source image. We trained a separate network for each task.
### VoxCeleb Dataset

### Fashion Dataset

### MGIF Dataset

### Installation
We support ```python3```. To install the dependencies run:
```
pip install -r requirements.txt
```
### YAML configs
There are several configuration (```config/dataset_name.yaml```) files one for each `dataset`. See ```config/taichi-256.yaml``` to get description of each parameter.
### Pre-trained checkpoint
Checkpoints can be found under following link: [google-drive](https://drive.google.com/open?id=1PyQJmkdCsAkOYwUyaj_l-l0as-iLDgeH) or [yandex-disk](https://yadi.sk/d/lEw8uRm140L_eQ).
### Animation Demo
To run a demo, download checkpoint and run the following command:
```
python demo.py --config config/dataset_name.yaml --driving_video path/to/driving --source_image path/to/source --checkpoint path/to/checkpoint --relative --adapt_scale
```
The result will be stored in ```result.mp4```.
The driving videos and source images should be cropped before it can be used in our method. To obtain some semi-automatic crop suggestions you can use ```python crop-video.py --inp some_youtube_video.mp4```. It will generate commands for crops using ffmpeg. In order to use the script, face-alligment library is needed:
```
git clone https://github.com/1adrianb/face-alignment
cd face-alignment
pip install -r requirements.txt
python setup.py install
```
### Animation demo with Docker
If you are having trouble getting the demo to work because of library compatibility issues,
and you're running Linux, you might try running it inside a Docker container, which would
give you better control over the execution environment.
Requirements: Docker 19.03+ and [nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
installed and able to successfully run the `nvidia-docker` usage tests.
We'll first build the container.
```
docker build -t first-order-model .
```
And now that we have the container available locally, we can use it to run the demo.
```
docker run -it --rm --gpus all \
-v $HOME/first-order-model:/app first-order-model \
python3 demo.py --config config/vox-256.yaml \
--driving_video driving.mp4 \
--source_image source.png \
--checkpoint vox-cpk.pth.tar \
--result_video result.mp4 \
--relative --adapt_scale
```
### Colab Demo
[](https://colab.research.google.com/github/AliaksandrSiarohin/first-order-model/blob/master/demo.ipynb) [](https://kaggle.com/kernels/welcome?src=https://github.com/AliaksandrSiarohin/first-order-model/blob/master/demo.ipynb)
@graphemecluster prepared a GUI demo for the Google Colab. It also works in Kaggle. For the source code, see [```demo.ipynb```](https://github.com/AliaksandrSiarohin/first-order-model/blob/master/demo.ipynb).
For the old demo, see [```old_demo.ipynb```](https://github.com/AliaksandrSiarohin/first-order-model/blob/master/old_demo.ipynb).
### Face-swap
It is possible to modify the method to perform face-swap using supervised segmentation masks.

For both unsupervised and supervised video editing, such as face-swap, please refer to [Motion Co-Segmentation](https://github.com/AliaksandrSiarohin/motion-cosegmentation).
### Training
To train a model on specific dataset run:
```
CUDA_VISIBLE_DEVICES=0,1,2,3 python run.py --config config/dataset_name.yaml --device_ids 0,1,2,3
```
The code will create a folder in the log directory (each run will create a time-stamped new directory).
Checkpoints will be saved to this folder.
To check the loss values during training see ```log.txt```.
You can also check training data reconstructions in the ```train-vis``` subfolder.
By default the batch size is tuned to run on 2 or 4 Titan-X gpu (apart from speed it does not make much difference). You can change the batch size in the train_params in corresponding ```.yaml``` file.
### Evaluation on video reconstruction
To evaluate the reconstruction performance run:
```
CUDA_VISIBLE_DEVICES=0 python run.py --config config/dataset_name.yaml --mode reconstruction --checkpoint path/to/checkpoint
```
You will need to specify the path to the checkpoint,
the ```reconstruction``` subfolder will be created in the checkpoint folder.
The generated video will be stored to this folder, also generated videos will be stored in ```png``` subfolder in loss-less '.png' format for evaluation.
Instructions for computing metrics from the paper can be found: https://github.com/AliaksandrSiarohin/pose-evaluation.
### Image animation
In order to animate videos run:
```
CUDA_VISIBLE_DEVICES=0 python run.py --config config/dataset_name.yaml --mode animate --checkpoint path/to/checkpoint
```
You will need to specify the path to the checkpoint,
the ```animation``` subfolder will be created in the same folder as the checkpoint.
You can find the generated video there and its loss-less version in the ```png``` subfolder.
By default video from test set will be randomly paired, but you can specify the "source,driving" pairs in the corresponding ```.csv``` files. The path to this file should be specified in corresponding ```.yaml``` file in pairs_list setting.
There are 2 different ways of performing animation:
by using **absolute** keypoint locations or by using **relative** keypoint locations.
1) Animation using absolute coordinates: the animation is performed using the absolute positions of the driving video and appearance of the source image.
In this way there are no specific requirements for the driving video and source appearance that is used.
However this usually leads to poor performance since irrelevant details such as shape is transferred.
Check animate parameters in ```taichi-256.yaml``` to enable this mode.
2) Animation using relative coordinates: from the driving video we first estimate the relative movement of each keypoint,
then we add this movement to the absolute position of keypoints in the source image.
This keypoint along with source image is used for animation. This usually leads to better performance, however this requires
that the object in the first frame of the video and in the source image have the same pose
### Datasets
1) **Bair**. This dataset can be directly [downloaded](https://yadi.sk/d/Rr-fjn-PdmmqeA).
2) **Mgif**. This dataset can be directly [downloaded](https://yadi.sk/d/5VdqLARizmnj3Q).
3) **Fashion**. Follow the instruction on dataset downloading [from](https://vision.cs.ubc.ca/datasets/fashion/).
4) **Taichi**. Follow the instructions in [data/taichi-loading](data/taichi-loading/README.md) or instructions from https://github.com/AliaksandrSiarohin/video-preprocessing.
5) **Nemo**. Please follow the [instructions](https://www.uva-nemo.org/) on how to download the dataset. Then the dataset should be preprocessed using scripts from https://github.com/AliaksandrSiarohin/video-preprocessing.
6) **VoxCeleb**. Please follow the instruction from https://github.com/AliaksandrSiarohin/video-preprocessing.
### Training on your own dataset
1) Resize all the videos to the same size e.g 256x256, the videos can be in '.gif', '.mp4' or folder with images.
We recommend the later, for each video make a separate folder with all the frames in '.png' format. This format is loss-less, and it has better i/o performance.
2) Create a folder ```data/dataset_name``` with 2 subfolders ```train``` and ```test```, put training videos in the ```train``` and testing in the ```test```.
3) Create a config ```config/dataset_name.yaml```, in dataset_params specify the root dir the ```root_dir: data/dataset_name```. Also adjust the number of epoch in train_params.
#### Additional notes
Citation:
```
@InProceedings{Siarohin_2019_NeurIPS,
author={Siarohin, Aliaksandr and Lathuilière, Stéphane and Tulyakov, Sergey and Ricci, Elisa and Sebe, Nicu},
title={First Order Motion Model for Image Animation},
booktitle = {Conference on Neural Information Processing Systems (NeurIPS)},
month = {December},
year = {2019}
}
```
================================================
FILE: animate.py
================================================
import os
from tqdm import tqdm
import torch
from torch.utils.data import DataLoader
from frames_dataset import PairedDataset
from logger import Logger, Visualizer
import imageio
from scipy.spatial import ConvexHull
import numpy as np
from sync_batchnorm import DataParallelWithCallback
def normalize_kp(kp_source, kp_driving, kp_driving_initial, adapt_movement_scale=False,
use_relative_movement=False, use_relative_jacobian=False):
if adapt_movement_scale:
source_area = ConvexHull(kp_source['value'][0].data.cpu().numpy()).volume
driving_area = ConvexHull(kp_driving_initial['value'][0].data.cpu().numpy()).volume
adapt_movement_scale = np.sqrt(source_area) / np.sqrt(driving_area)
else:
adapt_movement_scale = 1
kp_new = {k: v for k, v in kp_driving.items()}
if use_relative_movement:
kp_value_diff = (kp_driving['value'] - kp_driving_initial['value'])
kp_value_diff *= adapt_movement_scale
kp_new['value'] = kp_value_diff + kp_source['value']
if use_relative_jacobian:
jacobian_diff = torch.matmul(kp_driving['jacobian'], torch.inverse(kp_driving_initial['jacobian']))
kp_new['jacobian'] = torch.matmul(jacobian_diff, kp_source['jacobian'])
return kp_new
def animate(config, generator, kp_detector, checkpoint, log_dir, dataset):
log_dir = os.path.join(log_dir, 'animation')
png_dir = os.path.join(log_dir, 'png')
animate_params = config['animate_params']
dataset = PairedDataset(initial_dataset=dataset, number_of_pairs=animate_params['num_pairs'])
dataloader = DataLoader(dataset, batch_size=1, shuffle=False, num_workers=1)
if checkpoint is not None:
Logger.load_cpk(checkpoint, generator=generator, kp_detector=kp_detector)
else:
raise AttributeError("Checkpoint should be specified for mode='animate'.")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
if not os.path.exists(png_dir):
os.makedirs(png_dir)
if torch.cuda.is_available():
generator = DataParallelWithCallback(generator)
kp_detector = DataParallelWithCallback(kp_detector)
generator.eval()
kp_detector.eval()
for it, x in tqdm(enumerate(dataloader)):
with torch.no_grad():
predictions = []
visualizations = []
driving_video = x['driving_video']
source_frame = x['source_video'][:, :, 0, :, :]
kp_source = kp_detector(source_frame)
kp_driving_initial = kp_detector(driving_video[:, :, 0])
for frame_idx in range(driving_video.shape[2]):
driving_frame = driving_video[:, :, frame_idx]
kp_driving = kp_detector(driving_frame)
kp_norm = normalize_kp(kp_source=kp_source, kp_driving=kp_driving,
kp_driving_initial=kp_driving_initial, **animate_params['normalization_params'])
out = generator(source_frame, kp_source=kp_source, kp_driving=kp_norm)
out['kp_driving'] = kp_driving
out['kp_source'] = kp_source
out['kp_norm'] = kp_norm
del out['sparse_deformed']
predictions.append(np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0])
visualization = Visualizer(**config['visualizer_params']).visualize(source=source_frame,
driving=driving_frame, out=out)
visualization = visualization
visualizations.append(visualization)
predictions = np.concatenate(predictions, axis=1)
result_name = "-".join([x['driving_name'][0], x['source_name'][0]])
imageio.imsave(os.path.join(png_dir, result_name + '.png'), (255 * predictions).astype(np.uint8))
image_name = result_name + animate_params['format']
imageio.mimsave(os.path.join(log_dir, image_name), visualizations)
================================================
FILE: augmentation.py
================================================
"""
Code from https://github.com/hassony2/torch_videovision
"""
import numbers
import random
import numpy as np
import PIL
from skimage.transform import resize, rotate
from numpy import pad
import torchvision
import warnings
from skimage import img_as_ubyte, img_as_float
def crop_clip(clip, min_h, min_w, h, w):
if isinstance(clip[0], np.ndarray):
cropped = [img[min_h:min_h + h, min_w:min_w + w, :] for img in clip]
elif isinstance(clip[0], PIL.Image.Image):
cropped = [
img.crop((min_w, min_h, min_w + w, min_h + h)) for img in clip
]
else:
raise TypeError('Expected numpy.ndarray or PIL.Image' +
'but got list of {0}'.format(type(clip[0])))
return cropped
def pad_clip(clip, h, w):
im_h, im_w = clip[0].shape[:2]
pad_h = (0, 0) if h < im_h else ((h - im_h) // 2, (h - im_h + 1) // 2)
pad_w = (0, 0) if w < im_w else ((w - im_w) // 2, (w - im_w + 1) // 2)
return pad(clip, ((0, 0), pad_h, pad_w, (0, 0)), mode='edge')
def resize_clip(clip, size, interpolation='bilinear'):
if isinstance(clip[0], np.ndarray):
if isinstance(size, numbers.Number):
im_h, im_w, im_c = clip[0].shape
# Min spatial dim already matches minimal size
if (im_w <= im_h and im_w == size) or (im_h <= im_w
and im_h == size):
return clip
new_h, new_w = get_resize_sizes(im_h, im_w, size)
size = (new_w, new_h)
else:
size = size[1], size[0]
scaled = [
resize(img, size, order=1 if interpolation == 'bilinear' else 0, preserve_range=True,
mode='constant', anti_aliasing=True) for img in clip
]
elif isinstance(clip[0], PIL.Image.Image):
if isinstance(size, numbers.Number):
im_w, im_h = clip[0].size
# Min spatial dim already matches minimal size
if (im_w <= im_h and im_w == size) or (im_h <= im_w
and im_h == size):
return clip
new_h, new_w = get_resize_sizes(im_h, im_w, size)
size = (new_w, new_h)
else:
size = size[1], size[0]
if interpolation == 'bilinear':
pil_inter = PIL.Image.NEAREST
else:
pil_inter = PIL.Image.BILINEAR
scaled = [img.resize(size, pil_inter) for img in clip]
else:
raise TypeError('Expected numpy.ndarray or PIL.Image' +
'but got list of {0}'.format(type(clip[0])))
return scaled
def get_resize_sizes(im_h, im_w, size):
if im_w < im_h:
ow = size
oh = int(size * im_h / im_w)
else:
oh = size
ow = int(size * im_w / im_h)
return oh, ow
class RandomFlip(object):
def __init__(self, time_flip=False, horizontal_flip=False):
self.time_flip = time_flip
self.horizontal_flip = horizontal_flip
def __call__(self, clip):
if random.random() < 0.5 and self.time_flip:
return clip[::-1]
if random.random() < 0.5 and self.horizontal_flip:
return [np.fliplr(img) for img in clip]
return clip
class RandomResize(object):
"""Resizes a list of (H x W x C) numpy.ndarray to the final size
The larger the original image is, the more times it takes to
interpolate
Args:
interpolation (str): Can be one of 'nearest', 'bilinear'
defaults to nearest
size (tuple): (widht, height)
"""
def __init__(self, ratio=(3. / 4., 4. / 3.), interpolation='nearest'):
self.ratio = ratio
self.interpolation = interpolation
def __call__(self, clip):
scaling_factor = random.uniform(self.ratio[0], self.ratio[1])
if isinstance(clip[0], np.ndarray):
im_h, im_w, im_c = clip[0].shape
elif isinstance(clip[0], PIL.Image.Image):
im_w, im_h = clip[0].size
new_w = int(im_w * scaling_factor)
new_h = int(im_h * scaling_factor)
new_size = (new_w, new_h)
resized = resize_clip(
clip, new_size, interpolation=self.interpolation)
return resized
class RandomCrop(object):
"""Extract random crop at the same location for a list of videos
Args:
size (sequence or int): Desired output size for the
crop in format (h, w)
"""
def __init__(self, size):
if isinstance(size, numbers.Number):
size = (size, size)
self.size = size
def __call__(self, clip):
"""
Args:
img (PIL.Image or numpy.ndarray): List of videos to be cropped
in format (h, w, c) in numpy.ndarray
Returns:
PIL.Image or numpy.ndarray: Cropped list of videos
"""
h, w = self.size
if isinstance(clip[0], np.ndarray):
im_h, im_w, im_c = clip[0].shape
elif isinstance(clip[0], PIL.Image.Image):
im_w, im_h = clip[0].size
else:
raise TypeError('Expected numpy.ndarray or PIL.Image' +
'but got list of {0}'.format(type(clip[0])))
clip = pad_clip(clip, h, w)
im_h, im_w = clip.shape[1:3]
x1 = 0 if h == im_h else random.randint(0, im_w - w)
y1 = 0 if w == im_w else random.randint(0, im_h - h)
cropped = crop_clip(clip, y1, x1, h, w)
return cropped
class RandomRotation(object):
"""Rotate entire clip randomly by a random angle within
given bounds
Args:
degrees (sequence or int): Range of degrees to select from
If degrees is a number instead of sequence like (min, max),
the range of degrees, will be (-degrees, +degrees).
"""
def __init__(self, degrees):
if isinstance(degrees, numbers.Number):
if degrees < 0:
raise ValueError('If degrees is a single number,'
'must be positive')
degrees = (-degrees, degrees)
else:
if len(degrees) != 2:
raise ValueError('If degrees is a sequence,'
'it must be of len 2.')
self.degrees = degrees
def __call__(self, clip):
"""
Args:
img (PIL.Image or numpy.ndarray): List of videos to be cropped
in format (h, w, c) in numpy.ndarray
Returns:
PIL.Image or numpy.ndarray: Cropped list of videos
"""
angle = random.uniform(self.degrees[0], self.degrees[1])
if isinstance(clip[0], np.ndarray):
rotated = [rotate(image=img, angle=angle, preserve_range=True) for img in clip]
elif isinstance(clip[0], PIL.Image.Image):
rotated = [img.rotate(angle) for img in clip]
else:
raise TypeError('Expected numpy.ndarray or PIL.Image' +
'but got list of {0}'.format(type(clip[0])))
return rotated
class ColorJitter(object):
"""Randomly change the brightness, contrast and saturation and hue of the clip
Args:
brightness (float): How much to jitter brightness. brightness_factor
is chosen uniformly from [max(0, 1 - brightness), 1 + brightness].
contrast (float): How much to jitter contrast. contrast_factor
is chosen uniformly from [max(0, 1 - contrast), 1 + contrast].
saturation (float): How much to jitter saturation. saturation_factor
is chosen uniformly from [max(0, 1 - saturation), 1 + saturation].
hue(float): How much to jitter hue. hue_factor is chosen uniformly from
[-hue, hue]. Should be >=0 and <= 0.5.
"""
def __init__(self, brightness=0, contrast=0, saturation=0, hue=0):
self.brightness = brightness
self.contrast = contrast
self.saturation = saturation
self.hue = hue
def get_params(self, brightness, contrast, saturation, hue):
if brightness > 0:
brightness_factor = random.uniform(
max(0, 1 - brightness), 1 + brightness)
else:
brightness_factor = None
if contrast > 0:
contrast_factor = random.uniform(
max(0, 1 - contrast), 1 + contrast)
else:
contrast_factor = None
if saturation > 0:
saturation_factor = random.uniform(
max(0, 1 - saturation), 1 + saturation)
else:
saturation_factor = None
if hue > 0:
hue_factor = random.uniform(-hue, hue)
else:
hue_factor = None
return brightness_factor, contrast_factor, saturation_factor, hue_factor
def __call__(self, clip):
"""
Args:
clip (list): list of PIL.Image
Returns:
list PIL.Image : list of transformed PIL.Image
"""
if isinstance(clip[0], np.ndarray):
brightness, contrast, saturation, hue = self.get_params(
self.brightness, self.contrast, self.saturation, self.hue)
# Create img transform function sequence
img_transforms = []
if brightness is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_brightness(img, brightness))
if saturation is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_saturation(img, saturation))
if hue is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_hue(img, hue))
if contrast is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_contrast(img, contrast))
random.shuffle(img_transforms)
img_transforms = [img_as_ubyte, torchvision.transforms.ToPILImage()] + img_transforms + [np.array,
img_as_float]
with warnings.catch_warnings():
warnings.simplefilter("ignore")
jittered_clip = []
for img in clip:
jittered_img = img
for func in img_transforms:
jittered_img = func(jittered_img)
jittered_clip.append(jittered_img.astype('float32'))
elif isinstance(clip[0], PIL.Image.Image):
brightness, contrast, saturation, hue = self.get_params(
self.brightness, self.contrast, self.saturation, self.hue)
# Create img transform function sequence
img_transforms = []
if brightness is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_brightness(img, brightness))
if saturation is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_saturation(img, saturation))
if hue is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_hue(img, hue))
if contrast is not None:
img_transforms.append(lambda img: torchvision.transforms.functional.adjust_contrast(img, contrast))
random.shuffle(img_transforms)
# Apply to all videos
jittered_clip = []
for img in clip:
for func in img_transforms:
jittered_img = func(img)
jittered_clip.append(jittered_img)
else:
raise TypeError('Expected numpy.ndarray or PIL.Image' +
'but got list of {0}'.format(type(clip[0])))
return jittered_clip
class AllAugmentationTransform:
def __init__(self, resize_param=None, rotation_param=None, flip_param=None, crop_param=None, jitter_param=None):
self.transforms = []
if flip_param is not None:
self.transforms.append(RandomFlip(**flip_param))
if rotation_param is not None:
self.transforms.append(RandomRotation(**rotation_param))
if resize_param is not None:
self.transforms.append(RandomResize(**resize_param))
if crop_param is not None:
self.transforms.append(RandomCrop(**crop_param))
if jitter_param is not None:
self.transforms.append(ColorJitter(**jitter_param))
def __call__(self, clip):
for t in self.transforms:
clip = t(clip)
return clip
================================================
FILE: config/bair-256.yaml
================================================
dataset_params:
root_dir: data/bair
frame_shape: [256, 256, 3]
id_sampling: False
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
brightness: 0.1
contrast: 0.1
saturation: 0.1
hue: 0.1
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
sn: True
train_params:
num_epochs: 20
num_repeats: 1
epoch_milestones: [12, 18]
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 36
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 10
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 1
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: config/fashion-256.yaml
================================================
dataset_params:
root_dir: data/fashion-png
frame_shape: [256, 256, 3]
id_sampling: False
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
hue: 0.1
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
train_params:
num_epochs: 100
num_repeats: 50
epoch_milestones: [60, 90]
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 27
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 50
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 1
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: config/mgif-256.yaml
================================================
dataset_params:
root_dir: data/moving-gif
frame_shape: [256, 256, 3]
id_sampling: False
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
crop_param:
size: [256, 256]
resize_param:
ratio: [0.9, 1.1]
jitter_param:
hue: 0.5
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
single_jacobian_map: True
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
sn: True
train_params:
num_epochs: 100
num_repeats: 25
epoch_milestones: [60, 90]
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 36
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 100
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 1
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: config/nemo-256.yaml
================================================
dataset_params:
root_dir: data/nemo-png
frame_shape: [256, 256, 3]
id_sampling: False
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
sn: True
train_params:
num_epochs: 100
num_repeats: 8
epoch_milestones: [60, 90]
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 36
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 50
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 1
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: config/taichi-256.yaml
================================================
# Dataset parameters
# Each dataset should contain 2 folders train and test
# Each video can be represented as:
# - an image of concatenated frames
# - '.mp4' or '.gif'
# - folder with all frames from a specific video
# In case of Taichi. Same (youtube) video can be splitted in many parts (chunks). Each part has a following
# format (id)#other#info.mp4. For example '12335#adsbf.mp4' has an id 12335. In case of TaiChi id stands for youtube
# video id.
dataset_params:
# Path to data, data can be stored in several formats: .mp4 or .gif videos, stacked .png images or folders with frames.
root_dir: data/taichi-png
# Image shape, needed for staked .png format.
frame_shape: [256, 256, 3]
# In case of TaiChi single video can be splitted in many chunks, or the maybe several videos for single person.
# In this case epoch can be a pass over different videos (if id_sampling=True) or over different chunks (if id_sampling=False)
# If the name of the video '12335#adsbf.mp4' the id is assumed to be 12335
id_sampling: True
# List with pairs for animation, None for random pairs
pairs_list: data/taichi256.csv
# Augmentation parameters see augmentation.py for all posible augmentations
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
brightness: 0.1
contrast: 0.1
saturation: 0.1
hue: 0.1
# Defines model architecture
model_params:
common_params:
# Number of keypoint
num_kp: 10
# Number of channels per image
num_channels: 3
# Using first or zero order model
estimate_jacobian: True
kp_detector_params:
# Softmax temperature for keypoint heatmaps
temperature: 0.1
# Number of features mutliplier
block_expansion: 32
# Maximum allowed number of features
max_features: 1024
# Number of block in Unet. Can be increased or decreased depending or resolution.
num_blocks: 5
# Keypioint is predicted on smaller images for better performance,
# scale_factor=0.25 means that 256x256 image will be resized to 64x64
scale_factor: 0.25
generator_params:
# Number of features mutliplier
block_expansion: 64
# Maximum allowed number of features
max_features: 512
# Number of downsampling blocks in Jonson architecture.
# Can be increased or decreased depending or resolution.
num_down_blocks: 2
# Number of ResBlocks in Jonson architecture.
num_bottleneck_blocks: 6
# Use occlusion map or not
estimate_occlusion_map: True
dense_motion_params:
# Number of features mutliplier
block_expansion: 64
# Maximum allowed number of features
max_features: 1024
# Number of block in Unet. Can be increased or decreased depending or resolution.
num_blocks: 5
# Dense motion is predicted on smaller images for better performance,
# scale_factor=0.25 means that 256x256 image will be resized to 64x64
scale_factor: 0.25
discriminator_params:
# Discriminator can be multiscale, if you want 2 discriminator on original
# resolution and half of the original, specify scales: [1, 0.5]
scales: [1]
# Number of features mutliplier
block_expansion: 32
# Maximum allowed number of features
max_features: 512
# Number of blocks. Can be increased or decreased depending or resolution.
num_blocks: 4
# Parameters of training
train_params:
# Number of training epochs
num_epochs: 100
# For better i/o performance when number of videos is small number of epochs can be multiplied by this number.
# Thus effectivlly with num_repeats=100 each epoch is 100 times larger.
num_repeats: 150
# Drop learning rate by 10 times after this epochs
epoch_milestones: [60, 90]
# Initial learing rate for all modules
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 30
# Scales for perceptual pyramide loss. If scales = [1, 0.5, 0.25, 0.125] and image resolution is 256x256,
# than the loss will be computer on resolutions 256x256, 128x128, 64x64, 32x32.
scales: [1, 0.5, 0.25, 0.125]
# Save checkpoint this frequently. If checkpoint_freq=50, checkpoint will be saved every 50 epochs.
checkpoint_freq: 50
# Parameters of transform for equivariance loss
transform_params:
# Sigma for affine part
sigma_affine: 0.05
# Sigma for deformation part
sigma_tps: 0.005
# Number of point in the deformation grid
points_tps: 5
loss_weights:
# Weight for LSGAN loss in generator, 0 for no adversarial loss.
generator_gan: 0
# Weight for LSGAN loss in discriminator
discriminator_gan: 1
# Weights for feature matching loss, the number should be the same as number of blocks in discriminator.
feature_matching: [10, 10, 10, 10]
# Weights for perceptual loss.
perceptual: [10, 10, 10, 10, 10]
# Weights for value equivariance.
equivariance_value: 10
# Weights for jacobian equivariance.
equivariance_jacobian: 10
# Parameters of reconstruction
reconstruction_params:
# Maximum number of videos for reconstruction
num_videos: 1000
# Format for visualization, note that results will be also stored in staked .png.
format: '.mp4'
# Parameters of animation
animate_params:
# Maximum number of pairs for animation, the pairs will be either taken from pairs_list or random.
num_pairs: 50
# Format for visualization, note that results will be also stored in staked .png.
format: '.mp4'
# Normalization of diriving keypoints
normalization_params:
# Increase or decrease relative movement scale depending on the size of the object
adapt_movement_scale: False
# Apply only relative displacement of the keypoint
use_relative_movement: True
# Apply only relative change in jacobian
use_relative_jacobian: True
# Visualization parameters
visualizer_params:
# Draw keypoints of this size, increase or decrease depending on resolution
kp_size: 5
# Draw white border around images
draw_border: True
# Color map for keypoints
colormap: 'gist_rainbow'
================================================
FILE: config/taichi-adv-256.yaml
================================================
# Dataset parameters
dataset_params:
# Path to data, data can be stored in several formats: .mp4 or .gif videos, stacked .png images or folders with frames.
root_dir: data/taichi-png
# Image shape, needed for staked .png format.
frame_shape: [256, 256, 3]
# In case of TaiChi single video can be splitted in many chunks, or the maybe several videos for single person.
# In this case epoch can be a pass over different videos (if id_sampling=True) or over different chunks (if id_sampling=False)
# If the name of the video '12335#adsbf.mp4' the id is assumed to be 12335
id_sampling: True
# List with pairs for animation, None for random pairs
pairs_list: data/taichi256.csv
# Augmentation parameters see augmentation.py for all posible augmentations
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
brightness: 0.1
contrast: 0.1
saturation: 0.1
hue: 0.1
# Defines model architecture
model_params:
common_params:
# Number of keypoint
num_kp: 10
# Number of channels per image
num_channels: 3
# Using first or zero order model
estimate_jacobian: True
kp_detector_params:
# Softmax temperature for keypoint heatmaps
temperature: 0.1
# Number of features mutliplier
block_expansion: 32
# Maximum allowed number of features
max_features: 1024
# Number of block in Unet. Can be increased or decreased depending or resolution.
num_blocks: 5
# Keypioint is predicted on smaller images for better performance,
# scale_factor=0.25 means that 256x256 image will be resized to 64x64
scale_factor: 0.25
generator_params:
# Number of features mutliplier
block_expansion: 64
# Maximum allowed number of features
max_features: 512
# Number of downsampling blocks in Jonson architecture.
# Can be increased or decreased depending or resolution.
num_down_blocks: 2
# Number of ResBlocks in Jonson architecture.
num_bottleneck_blocks: 6
# Use occlusion map or not
estimate_occlusion_map: True
dense_motion_params:
# Number of features mutliplier
block_expansion: 64
# Maximum allowed number of features
max_features: 1024
# Number of block in Unet. Can be increased or decreased depending or resolution.
num_blocks: 5
# Dense motion is predicted on smaller images for better performance,
# scale_factor=0.25 means that 256x256 image will be resized to 64x64
scale_factor: 0.25
discriminator_params:
# Discriminator can be multiscale, if you want 2 discriminator on original
# resolution and half of the original, specify scales: [1, 0.5]
scales: [1]
# Number of features mutliplier
block_expansion: 32
# Maximum allowed number of features
max_features: 512
# Number of blocks. Can be increased or decreased depending or resolution.
num_blocks: 4
use_kp: True
# Parameters of training
train_params:
# Number of training epochs
num_epochs: 150
# For better i/o performance when number of videos is small number of epochs can be multiplied by this number.
# Thus effectivlly with num_repeats=100 each epoch is 100 times larger.
num_repeats: 150
# Drop learning rate by 10 times after this epochs
epoch_milestones: []
# Initial learing rate for all modules
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 0
batch_size: 27
# Scales for perceptual pyramide loss. If scales = [1, 0.5, 0.25, 0.125] and image resolution is 256x256,
# than the loss will be computer on resolutions 256x256, 128x128, 64x64, 32x32.
scales: [1, 0.5, 0.25, 0.125]
# Save checkpoint this frequently. If checkpoint_freq=50, checkpoint will be saved every 50 epochs.
checkpoint_freq: 50
# Parameters of transform for equivariance loss
transform_params:
# Sigma for affine part
sigma_affine: 0.05
# Sigma for deformation part
sigma_tps: 0.005
# Number of point in the deformation grid
points_tps: 5
loss_weights:
# Weight for LSGAN loss in generator
generator_gan: 1
# Weight for LSGAN loss in discriminator
discriminator_gan: 1
# Weights for feature matching loss, the number should be the same as number of blocks in discriminator.
feature_matching: [10, 10, 10, 10]
# Weights for perceptual loss.
perceptual: [10, 10, 10, 10, 10]
# Weights for value equivariance.
equivariance_value: 10
# Weights for jacobian equivariance.
equivariance_jacobian: 10
# Parameters of reconstruction
reconstruction_params:
# Maximum number of videos for reconstruction
num_videos: 1000
# Format for visualization, note that results will be also stored in staked .png.
format: '.mp4'
# Parameters of animation
animate_params:
# Maximum number of pairs for animation, the pairs will be either taken from pairs_list or random.
num_pairs: 50
# Format for visualization, note that results will be also stored in staked .png.
format: '.mp4'
# Normalization of diriving keypoints
normalization_params:
# Increase or decrease relative movement scale depending on the size of the object
adapt_movement_scale: False
# Apply only relative displacement of the keypoint
use_relative_movement: True
# Apply only relative change in jacobian
use_relative_jacobian: True
# Visualization parameters
visualizer_params:
# Draw keypoints of this size, increase or decrease depending on resolution
kp_size: 5
# Draw white border around images
draw_border: True
# Color map for keypoints
colormap: 'gist_rainbow'
================================================
FILE: config/vox-256.yaml
================================================
dataset_params:
root_dir: data/vox-png
frame_shape: [256, 256, 3]
id_sampling: True
pairs_list: data/vox256.csv
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
brightness: 0.1
contrast: 0.1
saturation: 0.1
hue: 0.1
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
sn: True
train_params:
num_epochs: 100
num_repeats: 75
epoch_milestones: [60, 90]
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 40
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 50
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 0
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: config/vox-adv-256.yaml
================================================
dataset_params:
root_dir: data/vox-png
frame_shape: [256, 256, 3]
id_sampling: True
pairs_list: data/vox256.csv
augmentation_params:
flip_param:
horizontal_flip: True
time_flip: True
jitter_param:
brightness: 0.1
contrast: 0.1
saturation: 0.1
hue: 0.1
model_params:
common_params:
num_kp: 10
num_channels: 3
estimate_jacobian: True
kp_detector_params:
temperature: 0.1
block_expansion: 32
max_features: 1024
scale_factor: 0.25
num_blocks: 5
generator_params:
block_expansion: 64
max_features: 512
num_down_blocks: 2
num_bottleneck_blocks: 6
estimate_occlusion_map: True
dense_motion_params:
block_expansion: 64
max_features: 1024
num_blocks: 5
scale_factor: 0.25
discriminator_params:
scales: [1]
block_expansion: 32
max_features: 512
num_blocks: 4
use_kp: True
train_params:
num_epochs: 150
num_repeats: 75
epoch_milestones: []
lr_generator: 2.0e-4
lr_discriminator: 2.0e-4
lr_kp_detector: 2.0e-4
batch_size: 36
scales: [1, 0.5, 0.25, 0.125]
checkpoint_freq: 50
transform_params:
sigma_affine: 0.05
sigma_tps: 0.005
points_tps: 5
loss_weights:
generator_gan: 1
discriminator_gan: 1
feature_matching: [10, 10, 10, 10]
perceptual: [10, 10, 10, 10, 10]
equivariance_value: 10
equivariance_jacobian: 10
reconstruction_params:
num_videos: 1000
format: '.mp4'
animate_params:
num_pairs: 50
format: '.mp4'
normalization_params:
adapt_movement_scale: False
use_relative_movement: True
use_relative_jacobian: True
visualizer_params:
kp_size: 5
draw_border: True
colormap: 'gist_rainbow'
================================================
FILE: crop-video.py
================================================
import face_alignment
import skimage.io
import numpy
from argparse import ArgumentParser
from skimage import img_as_ubyte
from skimage.transform import resize
from tqdm import tqdm
import os
import imageio
import numpy as np
import warnings
warnings.filterwarnings("ignore")
def extract_bbox(frame, fa):
if max(frame.shape[0], frame.shape[1]) > 640:
scale_factor = max(frame.shape[0], frame.shape[1]) / 640.0
frame = resize(frame, (int(frame.shape[0] / scale_factor), int(frame.shape[1] / scale_factor)))
frame = img_as_ubyte(frame)
else:
scale_factor = 1
frame = frame[..., :3]
bboxes = fa.face_detector.detect_from_image(frame[..., ::-1])
if len(bboxes) == 0:
return []
return np.array(bboxes)[:, :-1] * scale_factor
def bb_intersection_over_union(boxA, boxB):
xA = max(boxA[0], boxB[0])
yA = max(boxA[1], boxB[1])
xB = min(boxA[2], boxB[2])
yB = min(boxA[3], boxB[3])
interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)
iou = interArea / float(boxAArea + boxBArea - interArea)
return iou
def join(tube_bbox, bbox):
xA = min(tube_bbox[0], bbox[0])
yA = min(tube_bbox[1], bbox[1])
xB = max(tube_bbox[2], bbox[2])
yB = max(tube_bbox[3], bbox[3])
return (xA, yA, xB, yB)
def compute_bbox(start, end, fps, tube_bbox, frame_shape, inp, image_shape, increase_area=0.1):
left, top, right, bot = tube_bbox
width = right - left
height = bot - top
#Computing aspect preserving bbox
width_increase = max(increase_area, ((1 + 2 * increase_area) * height - width) / (2 * width))
height_increase = max(increase_area, ((1 + 2 * increase_area) * width - height) / (2 * height))
left = int(left - width_increase * width)
top = int(top - height_increase * height)
right = int(right + width_increase * width)
bot = int(bot + height_increase * height)
top, bot, left, right = max(0, top), min(bot, frame_shape[0]), max(0, left), min(right, frame_shape[1])
h, w = bot - top, right - left
start = start / fps
end = end / fps
time = end - start
scale = f'{image_shape[0]}:{image_shape[1]}'
return f'ffmpeg -i {inp} -ss {start} -t {time} -filter:v "crop={w}:{h}:{left}:{top}, scale={scale}" crop.mp4'
def compute_bbox_trajectories(trajectories, fps, frame_shape, args):
commands = []
for i, (bbox, tube_bbox, start, end) in enumerate(trajectories):
if (end - start) > args.min_frames:
command = compute_bbox(start, end, fps, tube_bbox, frame_shape, inp=args.inp, image_shape=args.image_shape, increase_area=args.increase)
commands.append(command)
return commands
def process_video(args):
device = 'cpu' if args.cpu else 'cuda'
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device=device)
video = imageio.get_reader(args.inp)
trajectories = []
previous_frame = None
fps = video.get_meta_data()['fps']
commands = []
try:
for i, frame in tqdm(enumerate(video)):
frame_shape = frame.shape
bboxes = extract_bbox(frame, fa)
## For each trajectory check the criterion
not_valid_trajectories = []
valid_trajectories = []
for trajectory in trajectories:
tube_bbox = trajectory[0]
intersection = 0
for bbox in bboxes:
intersection = max(intersection, bb_intersection_over_union(tube_bbox, bbox))
if intersection > args.iou_with_initial:
valid_trajectories.append(trajectory)
else:
not_valid_trajectories.append(trajectory)
commands += compute_bbox_trajectories(not_valid_trajectories, fps, frame_shape, args)
trajectories = valid_trajectories
## Assign bbox to trajectories, create new trajectories
for bbox in bboxes:
intersection = 0
current_trajectory = None
for trajectory in trajectories:
tube_bbox = trajectory[0]
current_intersection = bb_intersection_over_union(tube_bbox, bbox)
if intersection < current_intersection and current_intersection > args.iou_with_initial:
intersection = bb_intersection_over_union(tube_bbox, bbox)
current_trajectory = trajectory
## Create new trajectory
if current_trajectory is None:
trajectories.append([bbox, bbox, i, i])
else:
current_trajectory[3] = i
current_trajectory[1] = join(current_trajectory[1], bbox)
except IndexError as e:
raise (e)
commands += compute_bbox_trajectories(trajectories, fps, frame_shape, args)
return commands
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument("--image_shape", default=(256, 256), type=lambda x: tuple(map(int, x.split(','))),
help="Image shape")
parser.add_argument("--increase", default=0.1, type=float, help='Increase bbox by this amount')
parser.add_argument("--iou_with_initial", type=float, default=0.25, help="The minimal allowed iou with inital bbox")
parser.add_argument("--inp", required=True, help='Input image or video')
parser.add_argument("--min_frames", type=int, default=150, help='Minimum number of frames')
parser.add_argument("--cpu", dest="cpu", action="store_true", help="cpu mode.")
args = parser.parse_args()
commands = process_video(args)
for command in commands:
print (command)
================================================
FILE: data/bair256.csv
================================================
distance,source,driving,frame
0,000054.mp4,000048.mp4,0
0,000050.mp4,000063.mp4,0
0,000073.mp4,000007.mp4,0
0,000021.mp4,000010.mp4,0
0,000084.mp4,000046.mp4,0
0,000031.mp4,000102.mp4,0
0,000029.mp4,000111.mp4,0
0,000090.mp4,000112.mp4,0
0,000039.mp4,000010.mp4,0
0,000008.mp4,000069.mp4,0
0,000068.mp4,000076.mp4,0
0,000051.mp4,000052.mp4,0
0,000022.mp4,000098.mp4,0
0,000096.mp4,000032.mp4,0
0,000032.mp4,000099.mp4,0
0,000006.mp4,000053.mp4,0
0,000098.mp4,000020.mp4,0
0,000029.mp4,000066.mp4,0
0,000022.mp4,000007.mp4,0
0,000027.mp4,000065.mp4,0
0,000026.mp4,000059.mp4,0
0,000015.mp4,000112.mp4,0
0,000086.mp4,000123.mp4,0
0,000103.mp4,000052.mp4,0
0,000123.mp4,000103.mp4,0
0,000051.mp4,000005.mp4,0
0,000062.mp4,000125.mp4,0
0,000126.mp4,000111.mp4,0
0,000066.mp4,000090.mp4,0
0,000075.mp4,000106.mp4,0
0,000020.mp4,000010.mp4,0
0,000076.mp4,000028.mp4,0
0,000062.mp4,000002.mp4,0
0,000095.mp4,000127.mp4,0
0,000113.mp4,000072.mp4,0
0,000027.mp4,000104.mp4,0
0,000054.mp4,000124.mp4,0
0,000019.mp4,000089.mp4,0
0,000052.mp4,000072.mp4,0
0,000108.mp4,000033.mp4,0
0,000044.mp4,000118.mp4,0
0,000029.mp4,000086.mp4,0
0,000068.mp4,000066.mp4,0
0,000014.mp4,000036.mp4,0
0,000053.mp4,000071.mp4,0
0,000022.mp4,000094.mp4,0
0,000000.mp4,000121.mp4,0
0,000071.mp4,000079.mp4,0
0,000127.mp4,000005.mp4,0
0,000085.mp4,000023.mp4,0
================================================
FILE: data/taichi-loading/README.md
================================================
# TaiChi dataset
The scripst for loading the TaiChi dataset.
We provide only the id of the corresponding video and the bounding box. Following script will download videos from youtube and crop them according to the provided bounding boxes.
1) Load youtube-dl:
```
wget https://yt-dl.org/downloads/latest/youtube-dl -O youtube-dl
chmod a+rx youtube-dl
```
2) Run script to download videos, there are 2 formats that can be used for storing videos one is .mp4 and another is folder with .png images. While .png images occupy significantly more space, the format is loss-less and have better i/o performance when training.
```
python load_videos.py --metadata taichi-metadata.csv --format .mp4 --out_folder taichi --workers 8
```
select number of workers based on number of cpu avaliable. Note .png format take aproximatly 80GB.
================================================
FILE: data/taichi-loading/load_videos.py
================================================
import numpy as np
import pandas as pd
import imageio
import os
import subprocess
from multiprocessing import Pool
from itertools import cycle
import warnings
import glob
import time
from tqdm import tqdm
from argparse import ArgumentParser
from skimage import img_as_ubyte
from skimage.transform import resize
warnings.filterwarnings("ignore")
DEVNULL = open(os.devnull, 'wb')
def save(path, frames, format):
if format == '.mp4':
imageio.mimsave(path, frames)
elif format == '.png':
if os.path.exists(path):
print ("Warning: skiping video %s" % os.path.basename(path))
return
else:
os.makedirs(path)
for j, frame in enumerate(frames):
imageio.imsave(os.path.join(path, str(j).zfill(7) + '.png'), frames[j])
else:
print ("Unknown format %s" % format)
exit()
def download(video_id, args):
video_path = os.path.join(args.video_folder, video_id + ".mp4")
subprocess.call([args.youtube, '-f', "''best/mp4''", '--write-auto-sub', '--write-sub',
'--sub-lang', 'en', '--skip-unavailable-fragments',
"https://www.youtube.com/watch?v=" + video_id, "--output",
video_path], stdout=DEVNULL, stderr=DEVNULL)
return video_path
def run(data):
video_id, args = data
if not os.path.exists(os.path.join(args.video_folder, video_id.split('#')[0] + '.mp4')):
download(video_id.split('#')[0], args)
if not os.path.exists(os.path.join(args.video_folder, video_id.split('#')[0] + '.mp4')):
print ('Can not load video %s, broken link' % video_id.split('#')[0])
return
reader = imageio.get_reader(os.path.join(args.video_folder, video_id.split('#')[0] + '.mp4'))
fps = reader.get_meta_data()['fps']
df = pd.read_csv(args.metadata)
df = df[df['video_id'] == video_id]
all_chunks_dict = [{'start': df['start'].iloc[j], 'end': df['end'].iloc[j],
'bbox': list(map(int, df['bbox'].iloc[j].split('-'))), 'frames':[]} for j in range(df.shape[0])]
ref_fps = df['fps'].iloc[0]
ref_height = df['height'].iloc[0]
ref_width = df['width'].iloc[0]
partition = df['partition'].iloc[0]
try:
for i, frame in enumerate(reader):
for entry in all_chunks_dict:
if (i * ref_fps >= entry['start'] * fps) and (i * ref_fps < entry['end'] * fps):
left, top, right, bot = entry['bbox']
left = int(left / (ref_width / frame.shape[1]))
top = int(top / (ref_height / frame.shape[0]))
right = int(right / (ref_width / frame.shape[1]))
bot = int(bot / (ref_height / frame.shape[0]))
crop = frame[top:bot, left:right]
if args.image_shape is not None:
crop = img_as_ubyte(resize(crop, args.image_shape, anti_aliasing=True))
entry['frames'].append(crop)
except imageio.core.format.CannotReadFrameError:
None
for entry in all_chunks_dict:
first_part = '#'.join(video_id.split('#')[::-1])
path = first_part + '#' + str(entry['start']).zfill(6) + '#' + str(entry['end']).zfill(6) + '.mp4'
save(os.path.join(args.out_folder, partition, path), entry['frames'], args.format)
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument("--video_folder", default='youtube-taichi', help='Path to youtube videos')
parser.add_argument("--metadata", default='taichi-metadata-new.csv', help='Path to metadata')
parser.add_argument("--out_folder", default='taichi-png', help='Path to output')
parser.add_argument("--format", default='.png', help='Storing format')
parser.add_argument("--workers", default=1, type=int, help='Number of workers')
parser.add_argument("--youtube", default='./youtube-dl', help='Path to youtube-dl')
parser.add_argument("--image_shape", default=(256, 256), type=lambda x: tuple(map(int, x.split(','))),
help="Image shape, None for no resize")
args = parser.parse_args()
if not os.path.exists(args.video_folder):
os.makedirs(args.video_folder)
if not os.path.exists(args.out_folder):
os.makedirs(args.out_folder)
for partition in ['test', 'train']:
if not os.path.exists(os.path.join(args.out_folder, partition)):
os.makedirs(os.path.join(args.out_folder, partition))
df = pd.read_csv(args.metadata)
video_ids = set(df['video_id'])
pool = Pool(processes=args.workers)
args_list = cycle([args])
for chunks_data in tqdm(pool.imap_unordered(run, zip(video_ids, args_list))):
None
================================================
FILE: data/taichi-loading/taichi-metadata.csv
================================================
video_id,start,end,bbox,fps,width,height,partition
u6rJiF-gPx8,80,300,118-82-508-472,29.97,640,480,train
u6rJiF-gPx8,575,717,168-99-488-419,29.97,640,480,train
u6rJiF-gPx8,1257,1550,132-46-539-453,29.97,640,480,train
u6rJiF-gPx8,1551,1808,151-59-547-455,29.97,640,480,train
u6rJiF-gPx8,1888,2161,124-37-541-454,29.97,640,480,train
u6rJiF-gPx8,2484,2719,150-40-570-460,29.97,640,480,train
u6rJiF-gPx8,3000,3129,89-69-473-453,29.97,640,480,train
u6rJiF-gPx8,3300,3450,124-95-491-462,29.97,640,480,train
u6rJiF-gPx8,3600,3750,117-104-443-430,29.97,640,480,train
u6rJiF-gPx8,4157,4350,150-87-525-462,29.97,640,480,train
NBGys-uxScs,134,312,152-118-440-406,29.97,640,480,train
NBGys-uxScs,403,587,145-136-410-401,29.97,640,480,train
NBGys-uxScs,898,1092,95-79-409-393,29.97,640,480,train
NBGys-uxScs,1262,1535,49-57-391-399,29.97,640,480,train
NBGys-uxScs,1923,2165,232-80-554-402,29.97,640,480,train
NBGys-uxScs,2165,2324,138-63-465-390,29.97,640,480,train
NBGys-uxScs,2324,2503,88-72-410-394,29.97,640,480,train
NBGys-uxScs,2698,2840,154-73-486-405,29.97,640,480,train
NBGys-uxScs,2840,3222,191-53-537-399,29.97,640,480,train
NBGys-uxScs,3634,4177,186-67-521-402,29.97,640,480,train
NBGys-uxScs,4222,4367,255-80-575-400,29.97,640,480,train
NBGys-uxScs,5361,5656,165-67-501-403,29.97,640,480,train
NBGys-uxScs,5719,5923,160-78-485-403,29.97,640,480,train
NBGys-uxScs,6359,6577,152-51-499-398,29.97,640,480,train
NBGys-uxScs,7477,7830,131-64-476-409,29.97,640,480,train
uEqWZ9S_-Lw,89,581,51-38-489-476,25.0,600,480,test
uEqWZ9S_-Lw,660,1470,69-51-492-474,25.0,600,480,test
uEqWZ9S_-Lw,1470,1773,7-45-437-475,25.0,600,480,test
uEqWZ9S_-Lw,1773,1905,92-74-490-472,25.0,600,480,test
uEqWZ9S_-Lw,2600,2868,106-60-517-471,25.0,600,480,test
uEqWZ9S_-Lw,3142,3350,59-50-478-469,25.0,600,480,test
uEqWZ9S_-Lw,3414,3576,37-56-456-475,25.0,600,480,test
uEqWZ9S_-Lw,3662,3864,103-45-523-465,25.0,600,480,test
uEqWZ9S_-Lw,4340,4738,75-75-472-472,25.0,600,480,test
uEqWZ9S_-Lw,4947,5107,49-34-484-469,25.0,600,480,test
uEqWZ9S_-Lw,5252,5990,44-70-438-464,25.0,600,480,test
uEqWZ9S_-Lw,7083,7713,72-51-499-478,25.0,600,480,test
uEqWZ9S_-Lw,9388,9729,71-55-483-467,25.0,600,480,test
uEqWZ9S_-Lw,9881,10091,46-62-458-474,25.0,600,480,test
ctzMBulw1lI,320,577,85-71-478-464,30.0,640,480,train
ctzMBulw1lI,669,871,162-56-544-438,30.0,640,480,train
ctzMBulw1lI,1191,1338,144-55-533-444,30.0,640,480,train
ctzMBulw1lI,1822,1962,62-55-448-441,30.0,640,480,train
ctzMBulw1lI,2016,2175,125-61-498-434,30.0,640,480,train
ctzMBulw1lI,2509,2680,66-66-440-440,30.0,640,480,train
ctzMBulw1lI,2680,2823,152-107-491-446,30.0,640,480,train
ctzMBulw1lI,2832,3121,141-88-499-446,30.0,640,480,train
ctzMBulw1lI,4044,4326,108-16-546-454,30.0,640,480,train
ctzMBulw1lI,4326,4496,101-40-520-459,30.0,640,480,train
ctzMBulw1lI,4516,4755,56-35-483-462,30.0,640,480,train
ctzMBulw1lI,4796,4972,37-19-477-459,30.0,640,480,train
ctzMBulw1lI,5008,5236,37-2-503-468,30.0,640,480,train
ctzMBulw1lI,5548,5684,66-46-455-435,30.0,640,480,train
ctzMBulw1lI,6610,6754,78-44-491-457,30.0,640,480,train
ctzMBulw1lI,6811,7033,113-41-514-442,30.0,640,480,train
ctzMBulw1lI,7350,7511,203-66-589-452,30.0,640,480,train
ctzMBulw1lI,7659,7916,66-60-448-442,30.0,640,480,train
ctzMBulw1lI,9007,9148,94-39-492-437,30.0,640,480,train
ctzMBulw1lI,9643,9910,18-47-426-455,30.0,640,480,train
ctzMBulw1lI,11072,11285,98-44-489-435,30.0,640,480,train
ctzMBulw1lI,11701,11904,45-40-431-426,30.0,640,480,train
cpDT3xFbP4g,7,1031,133-87-482-436,29.97,640,480,train
cpDT3xFbP4g,1031,1301,127-97-467-437,29.97,640,480,train
cpDT3xFbP4g,1395,2419,112-92-473-453,29.97,640,480,train
cpDT3xFbP4g,2419,2837,136-92-484-440,29.97,640,480,train
cpDT3xFbP4g,2837,3861,92-89-460-457,29.97,640,480,train
cpDT3xFbP4g,3861,4805,172-104-508-440,29.97,640,480,train
cpDT3xFbP4g,4805,5829,153-88-514-449,29.97,640,480,train
cpDT3xFbP4g,5829,6020,148-101-487-440,29.97,640,480,train
oYlrB4ddEpM,1167,1646,277-23-962-708,25.0,1280,720,train
oYlrB4ddEpM,2815,2985,401-119-992-710,25.0,1280,720,train
oYlrB4ddEpM,3016,3228,483-105-1068-690,25.0,1280,720,train
oYlrB4ddEpM,5318,5453,235-84-846-695,25.0,1280,720,train
oYlrB4ddEpM,5656,5964,450-52-1101-703,25.0,1280,720,train
YonmpJvwmKM,2264,2578,340-67-963-690,29.97,1280,720,train
YonmpJvwmKM,4852,5063,231-9-920-698,29.97,1280,720,train
YonmpJvwmKM,5597,5854,435-48-1078-691,29.97,1280,720,train
Dn0mNZmAh2k,308,450,95-63-498-466,29.97,640,480,train
Dn0mNZmAh2k,495,975,125-114-481-470,29.97,640,480,train
Dn0mNZmAh2k,1369,1557,129-131-461-463,29.97,640,480,train
Dn0mNZmAh2k,1710,1900,35-101-401-467,29.97,640,480,train
Dn0mNZmAh2k,2085,2388,42-94-417-469,29.97,640,480,train
Dn0mNZmAh2k,3180,3377,108-134-445-471,29.97,640,480,train
Dn0mNZmAh2k,4815,5175,180-70-573-463,29.97,640,480,train
Dn0mNZmAh2k,6165,6379,127-109-498-480,29.97,640,480,train
Qlbxd48tQg8,0,263,346-187-617-458,29.97,854,480,train
Qlbxd48tQg8,358,810,251-79-624-452,29.97,854,480,train
Qlbxd48tQg8,941,1096,290-97-651-458,29.97,854,480,train
Qlbxd48tQg8,2777,3009,269-65-659-455,29.97,854,480,train
Qlbxd48tQg8,4052,4190,231-74-606-449,29.97,854,480,train
Qlbxd48tQg8,5244,5418,258-76-634-452,29.97,854,480,train
Qlbxd48tQg8,7183,7329,216-50-616-450,29.97,854,480,train
Qlbxd48tQg8,7329,8248,228-28-657-457,29.97,854,480,train
Qlbxd48tQg8,8248,9272,213-0-670-457,29.97,854,480,train
Qlbxd48tQg8,9429,9934,265-107-609-451,29.97,854,480,train
Qlbxd48tQg8,10527,10655,252-100-599-447,29.97,854,480,train
Qlbxd48tQg8,11211,11405,295-79-661-445,29.97,854,480,train
Qlbxd48tQg8,11431,11616,288-77-659-448,29.97,854,480,train
_XRyc2kiTlM,3844,4023,458-54-1402-998,25.0,1920,1080,train
3vcpk5cMDzo,170,1194,582-46-1565-1029,25.0,1920,1080,train
3vcpk5cMDzo,1410,1943,721-289-1409-977,25.0,1920,1080,train
3vcpk5cMDzo,1943,2157,576-332-1221-977,25.0,1920,1080,train
3vcpk5cMDzo,2226,2483,726-321-1430-1025,25.0,1920,1080,train
3vcpk5cMDzo,2678,3073,530-273-1311-1054,25.0,1920,1080,train
3vcpk5cMDzo,3119,3261,754-384-1303-933,25.0,1920,1080,train
3vcpk5cMDzo,3406,3710,723-377-1269-923,25.0,1920,1080,train
3vcpk5cMDzo,3755,3911,516-331-1159-974,25.0,1920,1080,train
3vcpk5cMDzo,3973,4159,674-323-1367-1016,25.0,1920,1080,train
3vcpk5cMDzo,4159,4317,540-294-1298-1052,25.0,1920,1080,train
D-8bvXjcz8c,120,360,615-63-1203-651,24.0,1280,720,test
D-8bvXjcz8c,1080,1320,467-61-1116-710,24.0,1280,720,test
D-8bvXjcz8c,5640,5824,481-43-1117-679,24.0,1280,720,test
D-8bvXjcz8c,8480,8640,117-72-713-668,24.0,1280,720,test
D-8bvXjcz8c,10458,10680,166-60-772-666,24.0,1280,720,test
Sn9jYXV6kpg,1008,1196,605-454-1123-972,29.0,1920,1080,train
Sn9jYXV6kpg,3372,3522,533-441-1015-923,29.0,1920,1080,train
Sn9jYXV6kpg,3522,3685,537-416-1036-915,29.0,1920,1080,train
Sn9jYXV6kpg,3796,3996,575-389-1104-918,29.0,1920,1080,train
Sn9jYXV6kpg,4161,4353,657-348-1192-883,29.0,1920,1080,train
Sn9jYXV6kpg,4814,4980,961-301-1502-842,29.0,1920,1080,train
Sn9jYXV6kpg,5194,5336,1036-255-1614-833,29.0,1920,1080,train
Sn9jYXV6kpg,7281,7494,522-360-1026-864,29.0,1920,1080,train
jDdTqi1t_jE,744,885,278-42-939-703,30.0,1280,720,test
jDdTqi1t_jE,2227,2380,225-7-932-714,30.0,1280,720,test
jDdTqi1t_jE,4480,4823,212-0-930-718,30.0,1280,720,test
jDdTqi1t_jE,5195,5550,213-15-909-711,30.0,1280,720,test
YddPIOYOH6o,0,547,494-313-1089-908,30.0,1920,1080,train
YddPIOYOH6o,609,755,603-354-1163-914,30.0,1920,1080,train
YddPIOYOH6o,1414,1578,571-327-1145-901,30.0,1920,1080,train
YddPIOYOH6o,1681,1862,542-319-1135-912,30.0,1920,1080,train
YddPIOYOH6o,1896,2064,533-341-1124-932,30.0,1920,1080,train
YddPIOYOH6o,2305,2613,780-293-1358-871,30.0,1920,1080,train
YddPIOYOH6o,2736,2955,592-281-1237-926,30.0,1920,1080,train
YddPIOYOH6o,3018,3178,735-386-1237-888,30.0,1920,1080,train
GQ0ef8nh9H8,645,1004,191-127-482-418,29.97,640,480,test
GQ0ef8nh9H8,1004,1380,202-152-464-414,29.97,640,480,test
GQ0ef8nh9H8,2530,2818,245-155-501-411,29.97,640,480,test
1HR5NXiNEjA,122,483,139-78-452-391,25.0,640,480,train
1HR5NXiNEjA,550,864,168-37-525-394,25.0,640,480,train
1HR5NXiNEjA,864,1176,169-91-469-391,25.0,640,480,train
1HR5NXiNEjA,1394,1548,181-98-469-386,25.0,640,480,train
1HR5NXiNEjA,3017,3234,180-23-599-442,25.0,640,480,train
cCx82sXERCI,133,330,376-33-1048-705,24.0,1280,720,train
cCx82sXERCI,330,1320,382-33-1048-699,24.0,1280,720,train
cCx82sXERCI,1340,1680,376-26-1063-713,24.0,1280,720,train
cCx82sXERCI,1800,2055,393-39-1053-699,24.0,1280,720,train
cCx82sXERCI,2055,2400,380-35-1051-706,24.0,1280,720,train
cCx82sXERCI,2400,2588,388-55-1040-707,24.0,1280,720,train
cCx82sXERCI,2589,2882,365-24-1041-700,24.0,1280,720,train
cCx82sXERCI,2883,3158,370-43-1025-698,24.0,1280,720,train
cCx82sXERCI,3158,3334,336-40-1003-707,24.0,1280,720,train
cCx82sXERCI,3368,3542,290-13-979-702,24.0,1280,720,train
cCx82sXERCI,4425,4560,317-19-994-696,24.0,1280,720,train
cCx82sXERCI,4560,4765,355-33-1024-702,24.0,1280,720,train
cCx82sXERCI,4935,5070,358-39-1017-698,24.0,1280,720,train
hNRum5Lhdws,0,525,335-142-878-685,30.0,1280,720,train
hNRum5Lhdws,525,765,376-142-917-683,30.0,1280,720,train
hNRum5Lhdws,870,1092,393-165-907-679,30.0,1280,720,train
hNRum5Lhdws,1162,1644,427-169-944-686,30.0,1280,720,train
hNRum5Lhdws,1644,1827,348-168-849-669,30.0,1280,720,train
hNRum5Lhdws,1827,1979,475-183-936-644,30.0,1280,720,train
hNRum5Lhdws,2098,2489,477-153-979-655,30.0,1280,720,train
hNRum5Lhdws,3144,3283,496-195-948-647,30.0,1280,720,train
hNRum5Lhdws,3497,3765,566-226-986-646,30.0,1280,720,train
hNRum5Lhdws,4042,4262,505-229-906-630,30.0,1280,720,train
hNRum5Lhdws,4802,4994,436-229-863-656,30.0,1280,720,train
hNRum5Lhdws,5130,5820,396-213-860-677,30.0,1280,720,train
hNRum5Lhdws,6254,6576,357-208-825-676,30.0,1280,720,train
hNRum5Lhdws,6576,6739,434-214-896-676,30.0,1280,720,train
hNRum5Lhdws,6874,7869,367-213-854-700,30.0,1280,720,train
hNRum5Lhdws,8257,8415,261-199-752-690,30.0,1280,720,train
hNRum5Lhdws,8415,8649,376-213-866-703,30.0,1280,720,train
hNRum5Lhdws,8775,9030,441-245-841-645,30.0,1280,720,train
hNRum5Lhdws,9277,9459,412-236-830-654,30.0,1280,720,train
hNRum5Lhdws,9459,9960,410-214-857-661,30.0,1280,720,train
hNRum5Lhdws,10235,10651,359-215-825-681,30.0,1280,720,train
hNRum5Lhdws,10785,11110,437-214-912-689,30.0,1280,720,train
hNRum5Lhdws,11224,11526,384-181-890-687,30.0,1280,720,train
fl9GjEkHFDg,2550,2730,371-25-1004-658,29.97,1280,720,train
fl9GjEkHFDg,3360,3630,322-28-958-664,29.97,1280,720,train
fl9GjEkHFDg,3810,3972,336-17-954-635,29.97,1280,720,train
fl9GjEkHFDg,5250,5430,331-52-942-663,29.97,1280,720,train
fl9GjEkHFDg,7050,7230,319-39-979-699,29.97,1280,720,train
sZtU-A3BB8k,0,604,682-385-1238-941,29.97,1920,1080,train
sZtU-A3BB8k,634,925,727-390-1273-936,29.97,1920,1080,train
_L745tFFmCQ,5583,5717,1192-143-1800-751,25.0,1920,1080,train
_L745tFFmCQ,8295,8448,674-75-1430-831,25.0,1920,1080,train
_L745tFFmCQ,8472,8617,526-179-1304-957,25.0,1920,1080,train
_zJWt92xoRw,480,902,220-95-760-635,29.97,1280,720,train
_zJWt92xoRw,902,1197,331-118-833-620,29.97,1280,720,train
_zJWt92xoRw,1729,1965,297-142-803-648,29.97,1280,720,train
_zJWt92xoRw,2748,2886,441-137-940-636,29.97,1280,720,train
_zJWt92xoRw,3003,3162,558-155-1044-641,29.97,1280,720,train
_zJWt92xoRw,3318,3544,586-149-1076-639,29.97,1280,720,train
_zJWt92xoRw,4396,4816,622-126-1148-652,29.97,1280,720,train
_zJWt92xoRw,5455,5636,682-135-1171-624,29.97,1280,720,train
_zJWt92xoRw,6790,6984,185-139-671-625,29.97,1280,720,train
_zJWt92xoRw,7392,7623,199-126-716-643,29.97,1280,720,train
_zJWt92xoRw,10016,10163,709-189-1053-533,29.97,1280,720,train
_zJWt92xoRw,11616,11760,280-158-684-562,29.97,1280,720,train
_zJWt92xoRw,12263,12401,169-150-602-583,29.97,1280,720,train
_zJWt92xoRw,13262,13392,171-130-591-550,29.97,1280,720,train
_zJWt92xoRw,14658,14877,556-159-999-602,29.97,1280,720,train
_zJWt92xoRw,15383,15513,529-166-971-608,29.97,1280,720,train
_zJWt92xoRw,18850,18996,201-174-605-578,29.97,1280,720,train
_zJWt92xoRw,19464,19699,181-171-584-574,29.97,1280,720,train
_zJWt92xoRw,19860,20123,149-131-589-571,29.97,1280,720,train
AXp3aT5pmWs,0,351,125-16-574-465,29.97,720,480,train
AXp3aT5pmWs,1577,1940,175-17-625-467,29.97,720,480,train
AXp3aT5pmWs,3218,3553,122-17-579-474,29.97,720,480,train
AXp3aT5pmWs,4106,4878,218-37-635-454,29.97,720,480,train
AXp3aT5pmWs,4878,5172,211-10-661-460,29.97,720,480,train
AXp3aT5pmWs,5206,5592,184-39-579-434,29.97,720,480,train
AXp3aT5pmWs,5936,6082,105-39-487-421,29.97,720,480,train
cyN6Eb5Luzo,448,1040,133-186-463-516,29.97,960,720,train
cyN6Eb5Luzo,1040,1407,138-185-485-532,29.97,960,720,train
cyN6Eb5Luzo,1923,2217,97-168-473-544,29.97,960,720,train
cyN6Eb5Luzo,2219,2368,126-183-463-520,29.97,960,720,train
cyN6Eb5Luzo,2464,3028,95-168-452-525,29.97,960,720,train
cyN6Eb5Luzo,3028,3370,122-177-486-541,29.97,960,720,train
cyN6Eb5Luzo,3376,3547,124-191-469-536,29.97,960,720,train
cyN6Eb5Luzo,3801,4825,295-184-644-533,29.97,960,720,train
vxsaQvdnEcU,507,779,167-36-606-475,29.97,640,480,train
vxsaQvdnEcU,876,1057,177-99-525-447,29.97,640,480,train
vxsaQvdnEcU,1106,1258,148-50-562-464,29.97,640,480,train
vxsaQvdnEcU,1280,1543,55-54-449-448,29.97,640,480,train
vxsaQvdnEcU,1676,1810,189-108-553-472,29.97,640,480,train
vxsaQvdnEcU,3838,4142,138-41-516-419,29.97,640,480,train
vxsaQvdnEcU,4148,4483,111-91-496-476,29.97,640,480,train
vxsaQvdnEcU,4844,5018,221-39-640-458,29.97,640,480,train
v2zjtNjnj3A,844,1000,529-149-862-482,23.97,1280,720,train
v2zjtNjnj3A,1493,1674,484-89-858-463,23.97,1280,720,train
v2zjtNjnj3A,3198,3326,471-67-881-477,23.97,1280,720,train
nLEzl5ntdeQ,149,431,85-379-731-1025,29.0,810,1440,train
nLEzl5ntdeQ,1080,1280,34-444-676-1086,29.0,810,1440,train
nLEzl5ntdeQ,1280,1440,57-450-692-1085,29.0,810,1440,train
nLEzl5ntdeQ,1448,1610,46-457-689-1100,29.0,810,1440,train
nLEzl5ntdeQ,1610,1920,59-425-744-1110,29.0,810,1440,train
nLEzl5ntdeQ,2000,2228,96-386-794-1084,29.0,810,1440,train
nLEzl5ntdeQ,2400,2571,95-434-714-1053,29.0,810,1440,train
nLEzl5ntdeQ,2670,2880,94-416-758-1080,29.0,810,1440,train
nLEzl5ntdeQ,2970,3204,97-409-789-1101,29.0,810,1440,train
nLEzl5ntdeQ,4538,4680,109-473-724-1088,29.0,810,1440,train
nLEzl5ntdeQ,4980,5220,96-436-767-1107,29.0,810,1440,train
nLEzl5ntdeQ,5280,5430,111-468-759-1116,29.0,810,1440,train
nLEzl5ntdeQ,6030,6263,73-484-704-1115,29.0,810,1440,train
nLEzl5ntdeQ,6302,6444,77-434-769-1126,29.0,810,1440,train
nLEzl5ntdeQ,6444,6632,131-401-794-1064,29.0,810,1440,train
nLEzl5ntdeQ,6632,6781,97-402-761-1066,29.0,810,1440,train
nLEzl5ntdeQ,6781,6961,76-386-760-1070,29.0,810,1440,train
ZwBsM72F0xg,159,608,218-156-602-540,15.79,1280,720,train
ZwBsM72F0xg,812,1041,165-184-547-566,15.79,1280,720,train
ZwBsM72F0xg,1075,1218,94-192-466-564,15.79,1280,720,train
ZwBsM72F0xg,5123,5433,240-179-665-604,15.79,1280,720,train
ZwBsM72F0xg,5644,5780,329-172-751-594,15.79,1280,720,train
ZwBsM72F0xg,7248,7376,584-143-1013-572,15.79,1280,720,train
YVmF50cMs_0,5490,5998,352-87-951-686,29.97,1280,720,train
YVmF50cMs_0,6563,6709,356-105-889-638,29.97,1280,720,train
YVmF50cMs_0,6975,7137,386-49-944-607,29.97,1280,720,train
YVmF50cMs_0,7664,7802,313-24-883-594,29.97,1280,720,train
YVmF50cMs_0,8894,9039,254-75-784-605,29.97,1280,720,train
YVmF50cMs_0,9717,9885,361-79-910-628,29.97,1280,720,train
YVmF50cMs_0,9885,10159,346-53-893-600,29.97,1280,720,train
YVmF50cMs_0,10186,10315,326-76-869-619,29.97,1280,720,train
YVmF50cMs_0,10630,10791,368-144-865-641,29.97,1280,720,train
YVmF50cMs_0,12090,12260,174-81-725-632,29.97,1280,720,train
YVmF50cMs_0,12260,12456,358-93-866-601,29.97,1280,720,train
YVmF50cMs_0,12521,12650,415-179-873-637,29.97,1280,720,train
YVmF50cMs_0,12650,12897,360-149-850-639,29.97,1280,720,train
YVmF50cMs_0,13238,13383,381-171-839-629,29.97,1280,720,train
YVmF50cMs_0,13839,13967,300-76-846-622,29.97,1280,720,train
FsmIt38CNog,166,740,670-172-1314-816,29.97,1920,1080,train
FsmIt38CNog,1086,1592,773-238-1339-804,29.97,1920,1080,train
FsmIt38CNog,1665,1834,786-236-1365-815,29.97,1920,1080,train
FsmIt38CNog,1881,2069,664-215-1286-837,29.97,1920,1080,train
FsmIt38CNog,2069,2212,725-248-1275-798,29.97,1920,1080,train
FsmIt38CNog,2424,2652,450-229-1035-814,29.97,1920,1080,train
FsmIt38CNog,2652,2973,252-205-876-829,29.97,1920,1080,train
FsmIt38CNog,4000,4143,375-218-1181-1024,29.97,1920,1080,train
FsmIt38CNog,4632,4761,589-112-1333-856,29.97,1920,1080,train
FsmIt38CNog,4882,5164,760-107-1645-992,29.97,1920,1080,train
FsmIt38CNog,5168,5420,963-131-1802-970,29.97,1920,1080,train
FsmIt38CNog,5725,6257,937-149-1813-1025,29.97,1920,1080,train
FsmIt38CNog,6735,6891,752-200-1576-1024,29.97,1920,1080,train
FsmIt38CNog,7520,7880,810-113-1685-988,29.97,1920,1080,train
FsmIt38CNog,7880,8058,621-145-1372-896,29.97,1920,1080,train
FsmIt38CNog,8179,8351,474-215-1181-922,29.97,1920,1080,train
FsmIt38CNog,8792,9010,174-206-935-967,29.97,1920,1080,train
FsmIt38CNog,9102,9262,446-242-1227-1023,29.97,1920,1080,train
FsmIt38CNog,9633,9828,894-296-1634-1036,29.97,1920,1080,train
FsmIt38CNog,10653,10786,982-148-1749-915,29.97,1920,1080,train
FsmIt38CNog,10786,10988,915-175-1626-886,29.97,1920,1080,train
FsmIt38CNog,11065,11230,756-159-1460-863,29.97,1920,1080,train
FsmIt38CNog,11230,11394,798-163-1483-848,29.97,1920,1080,train
FsmIt38CNog,11598,11974,810-87-1574-851,29.97,1920,1080,train
OPcZlXYcdMA,459,913,304-44-919-659,29.97,1280,720,train
OPcZlXYcdMA,913,1363,294-41-941-688,29.97,1280,720,train
OPcZlXYcdMA,1577,2084,283-38-909-664,29.97,1280,720,train
OPcZlXYcdMA,2383,2551,333-49-964-680,29.97,1280,720,train
OPcZlXYcdMA,2873,3231,331-50-958-677,29.97,1280,720,train
OPcZlXYcdMA,3417,3801,326-41-965-680,29.97,1280,720,train
OPcZlXYcdMA,4022,4435,317-39-957-679,29.97,1280,720,train
OPcZlXYcdMA,4611,4948,255-67-867-679,29.97,1280,720,train
OPcZlXYcdMA,4948,5155,420-72-1017-669,29.97,1280,720,train
OPcZlXYcdMA,5363,5913,372-59-974-661,29.97,1280,720,train
OPcZlXYcdMA,6231,6518,294-66-908-680,29.97,1280,720,train
OPcZlXYcdMA,8507,8697,279-81-904-706,29.97,1280,720,train
OPcZlXYcdMA,8697,8896,427-77-1050-700,29.97,1280,720,train
OPcZlXYcdMA,9675,10053,296-37-927-668,29.97,1280,720,train
OPcZlXYcdMA,10333,11357,307-55-922-670,29.97,1280,720,train
OPcZlXYcdMA,11398,11644,324-55-919-650,29.97,1280,720,train
OPcZlXYcdMA,11644,12197,324-26-951-653,29.97,1280,720,train
OPcZlXYcdMA,12198,12399,371-60-943-632,29.97,1280,720,train
OPcZlXYcdMA,12399,13423,316-56-921-661,29.97,1280,720,train
OPcZlXYcdMA,13457,14198,373-64-953-644,29.97,1280,720,train
OPcZlXYcdMA,15589,16099,313-45-923-655,29.97,1280,720,train
L82WHgYRq6I,21,479,494-203-1278-987,25.0,1920,1080,test
L82WHgYRq6I,525,657,547-182-1371-1006,25.0,1920,1080,test
L82WHgYRq6I,684,1309,484-31-1464-1011,25.0,1920,1080,test
L82WHgYRq6I,1384,1524,681-289-1363-971,25.0,1920,1080,test
L82WHgYRq6I,2175,2417,434-296-1132-994,25.0,1920,1080,test
L82WHgYRq6I,3035,3238,601-274-1298-971,25.0,1920,1080,test
L82WHgYRq6I,3345,3475,764-261-1448-945,25.0,1920,1080,test
L82WHgYRq6I,3583,3821,983-294-1605-916,25.0,1920,1080,test
L82WHgYRq6I,3967,4149,1101-318-1695-912,25.0,1920,1080,test
L82WHgYRq6I,5369,5623,593-307-1244-958,25.0,1920,1080,test
L82WHgYRq6I,6259,6397,220-215-1042-1037,25.0,1920,1080,test
L82WHgYRq6I,6516,6669,562-254-1273-965,25.0,1920,1080,test
L82WHgYRq6I,8183,8424,818-329-1427-938,25.0,1920,1080,test
Q0tIcxMcm4E,0,591,156-113-1024-981,25.0,1920,1080,train
Q0tIcxMcm4E,798,979,399-176-1194-971,25.0,1920,1080,train
Q0tIcxMcm4E,1142,1337,714-170-1501-957,25.0,1920,1080,train
Q0tIcxMcm4E,1337,1628,923-164-1688-929,25.0,1920,1080,train
Q0tIcxMcm4E,2116,2289,737-158-1499-920,25.0,1920,1080,train
Q0tIcxMcm4E,2367,2763,940-173-1702-935,25.0,1920,1080,train
Q0tIcxMcm4E,2859,3003,970-177-1690-897,25.0,1920,1080,train
Q0tIcxMcm4E,3329,3506,534-163-1269-898,25.0,1920,1080,train
Q0tIcxMcm4E,3636,3849,320-137-1116-933,25.0,1920,1080,train
Q0tIcxMcm4E,3892,4228,275-148-1065-938,25.0,1920,1080,train
Q0tIcxMcm4E,4725,4963,503-161-1267-925,25.0,1920,1080,train
Q0tIcxMcm4E,5647,5976,451-144-1238-931,25.0,1920,1080,train
Q0tIcxMcm4E,5976,6132,357-106-1180-929,25.0,1920,1080,train
Q0tIcxMcm4E,6354,6594,617-119-1442-944,25.0,1920,1080,train
Q0tIcxMcm4E,6616,7000,866-81-1721-936,25.0,1920,1080,train
Q0tIcxMcm4E,7000,7156,646-105-1472-931,25.0,1920,1080,train
Q0tIcxMcm4E,7247,7422,988-155-1756-923,25.0,1920,1080,train
Q0tIcxMcm4E,8272,8448,914-187-1615-888,25.0,1920,1080,train
Q0tIcxMcm4E,8984,9176,545-118-1333-906,25.0,1920,1080,train
Q0tIcxMcm4E,9589,9957,310-163-1052-905,25.0,1920,1080,train
Q0tIcxMcm4E,10364,10567,368-209-1056-897,25.0,1920,1080,train
Q0tIcxMcm4E,10884,11290,234-130-1013-909,25.0,1920,1080,train
Q0tIcxMcm4E,11354,11485,564-218-1269-923,25.0,1920,1080,train
Q0tIcxMcm4E,11528,11747,603-204-1315-916,25.0,1920,1080,train
Q0tIcxMcm4E,12030,12519,638-117-1434-913,25.0,1920,1080,train
ceoe2fz648U,116,400,117-103-428-414,29.97,640,480,train
ceoe2fz648U,1401,1532,92-78-425-411,29.97,640,480,train
ceoe2fz648U,1652,1824,119-102-436-419,29.97,640,480,train
ceoe2fz648U,3287,3419,187-134-455-402,29.97,640,480,train
ceoe2fz648U,5820,6002,84-109-395-420,29.97,640,480,train
JVXDPOICOcw,629,871,181-167-446-432,29.97,640,480,train
JTMn6S9cS_A,0,438,317-67-890-640,25.0,1280,720,train
JTMn6S9cS_A,438,677,421-110-976-665,25.0,1280,720,train
JTMn6S9cS_A,677,878,405-82-973-650,25.0,1280,720,train
JTMn6S9cS_A,996,1280,362-27-972-637,25.0,1280,720,train
JTMn6S9cS_A,1280,1456,520-112-1054-646,25.0,1280,720,train
JTMn6S9cS_A,3190,3404,377-115-930-668,25.0,1280,720,train
JTMn6S9cS_A,3780,3995,342-109-891-658,25.0,1280,720,train
JTMn6S9cS_A,4684,4907,642-112-1154-624,25.0,1280,720,train
JTMn6S9cS_A,5235,5378,577-120-1029-572,25.0,1280,720,train
JTMn6S9cS_A,6673,6878,187-101-773-687,25.0,1280,720,train
JTMn6S9cS_A,7378,7582,219-43-891-715,25.0,1280,720,train
JTMn6S9cS_A,8115,8425,342-64-905-627,25.0,1280,720,train
-YxgJ_xXcgU,119,281,327-120-643-436,30.0,1280,720,train
-YxgJ_xXcgU,471,610,105-27-601-523,30.0,1280,720,train
-YxgJ_xXcgU,3078,3220,619-133-1078-592,30.0,1280,720,train
l5gCGxF-uM0,1479,1893,139-38-541-440,29.97,654,480,train
l5gCGxF-uM0,2139,2531,149-71-531-453,29.97,654,480,train
l5gCGxF-uM0,2772,3096,136-28-565-457,29.97,654,480,train
l5gCGxF-uM0,3265,3594,180-94-513-427,29.97,654,480,train
l5gCGxF-uM0,3900,4195,156-68-536-448,29.97,654,480,train
l5gCGxF-uM0,4385,4618,135-122-452-439,29.97,654,480,train
l5gCGxF-uM0,4963,5133,117-68-488-439,29.97,654,480,train
l5gCGxF-uM0,5300,5580,150-50-547-447,29.97,654,480,train
nFDRPyBl8WY,173,810,123-51-520-448,29.97,640,480,train
nFDRPyBl8WY,916,1055,175-95-506-426,29.97,640,480,train
nFDRPyBl8WY,1332,1700,120-86-462-428,29.97,640,480,train
nFDRPyBl8WY,1702,1919,132-90-463-421,29.97,640,480,train
nFDRPyBl8WY,2042,2239,122-74-482-434,29.97,640,480,train
nFDRPyBl8WY,2239,2427,74-55-440-421,29.97,640,480,train
nFDRPyBl8WY,3036,3235,133-26-569-462,29.97,640,480,train
nFDRPyBl8WY,4062,4230,149-51-538-440,29.97,640,480,train
nFDRPyBl8WY,4248,4447,39-57-414-432,29.97,640,480,train
nFDRPyBl8WY,5504,5652,64-57-427-420,29.97,640,480,train
nFDRPyBl8WY,5671,5846,112-33-519-440,29.97,640,480,train
nFDRPyBl8WY,5873,6318,73-21-475-423,29.97,640,480,train
nFDRPyBl8WY,6831,6980,53-77-413-437,29.97,640,480,train
nFDRPyBl8WY,7059,7204,82-81-439-438,29.97,640,480,train
nFDRPyBl8WY,8310,8469,154-111-420-377,29.97,640,480,train
nFDRPyBl8WY,9525,9690,74-100-370-396,29.97,640,480,train
nFDRPyBl8WY,10690,10989,149-47-548-446,29.97,640,480,train
vgk5TBac16A,1158,1338,136-79-503-446,29.97,640,480,test
vgk5TBac16A,1338,1809,83-81-444-442,29.97,640,480,test
vgk5TBac16A,2020,2213,74-75-424-425,29.97,640,480,test
vgk5TBac16A,2213,2654,147-77-494-424,29.97,640,480,test
vgk5TBac16A,3741,4765,157-15-617-475,29.97,640,480,test
vgk5TBac16A,4765,5789,148-6-616-474,29.97,640,480,test
vgk5TBac16A,6244,7268,148-7-613-472,29.97,640,480,test
vgk5TBac16A,7276,8115,149-15-606-472,29.97,640,480,test
SllIuMCgJKM,1687,2250,129-85-487-443,29.97,640,480,train
SllIuMCgJKM,3886,4027,141-61-506-426,29.97,640,480,train
SllIuMCgJKM,4593,4775,177-51-526-400,29.97,640,480,train
SllIuMCgJKM,5101,5235,86-54-450-418,29.97,640,480,train
SllIuMCgJKM,9552,9796,149-34-548-433,29.97,640,480,train
aDyyTMUBoLE,164,351,333-46-1266-979,23.98,1920,1080,test
aDyyTMUBoLE,375,518,319-98-1293-1072,23.98,1920,1080,test
aDyyTMUBoLE,518,884,318-49-1336-1067,23.98,1920,1080,test
aDyyTMUBoLE,949,1092,437-91-1381-1035,23.98,1920,1080,test
aDyyTMUBoLE,1769,1957,241-19-1262-1040,23.98,1920,1080,test
gSIN9Mhm5oQ,127,303,852-25-1728-901,25.0,1920,1080,train
gSIN9Mhm5oQ,333,862,785-138-1530-883,25.0,1920,1080,train
gSIN9Mhm5oQ,1028,1278,722-111-1498-887,25.0,1920,1080,train
gSIN9Mhm5oQ,1450,1649,848-63-1697-912,25.0,1920,1080,train
gSIN9Mhm5oQ,1649,1848,755-117-1551-913,25.0,1920,1080,train
gSIN9Mhm5oQ,2002,2264,770-61-1682-973,25.0,1920,1080,train
gSIN9Mhm5oQ,2566,2702,453-129-1297-973,25.0,1920,1080,train
gSIN9Mhm5oQ,3199,3411,391-141-1282-1032,25.0,1920,1080,train
gSIN9Mhm5oQ,3625,3853,640-143-1512-1015,25.0,1920,1080,train
gSIN9Mhm5oQ,3992,4127,623-43-1599-1019,25.0,1920,1080,train
gSIN9Mhm5oQ,4160,4340,614-182-1431-999,25.0,1920,1080,train
gSIN9Mhm5oQ,4387,4556,639-151-1478-990,25.0,1920,1080,train
gSIN9Mhm5oQ,4870,5030,119-204-920-1005,25.0,1920,1080,train
gSIN9Mhm5oQ,5030,5257,299-204-1094-999,25.0,1920,1080,train
gSIN9Mhm5oQ,5257,5647,355-164-1198-1007,25.0,1920,1080,train
gSIN9Mhm5oQ,5833,6171,433-135-1291-993,25.0,1920,1080,train
gSIN9Mhm5oQ,6309,6449,500-153-1357-1010,25.0,1920,1080,train
gSIN9Mhm5oQ,6567,6711,552-140-1405-993,25.0,1920,1080,train
gSIN9Mhm5oQ,7285,7664,589-117-1447-975,25.0,1920,1080,train
gSIN9Mhm5oQ,8046,8212,747-38-1672-963,25.0,1920,1080,train
gSIN9Mhm5oQ,8217,8453,643-61-1527-945,25.0,1920,1080,train
gSIN9Mhm5oQ,8453,8586,544-148-1383-987,25.0,1920,1080,train
gSIN9Mhm5oQ,8682,8867,429-149-1276-996,25.0,1920,1080,train
gSIN9Mhm5oQ,9189,9506,296-145-1200-1049,25.0,1920,1080,train
gSIN9Mhm5oQ,9855,10158,676-72-1596-992,25.0,1920,1080,train
gSIN9Mhm5oQ,10184,10489,394-95-1245-946,25.0,1920,1080,train
gSIN9Mhm5oQ,10489,10723,387-118-1255-986,25.0,1920,1080,train
gSIN9Mhm5oQ,10723,10912,306-60-1185-939,25.0,1920,1080,train
gSIN9Mhm5oQ,11170,11359,410-26-1376-992,25.0,1920,1080,train
gSIN9Mhm5oQ,11488,11674,264-16-1276-1028,25.0,1920,1080,train
gSIN9Mhm5oQ,11761,12221,648-85-1604-1041,25.0,1920,1080,train
gSIN9Mhm5oQ,12221,12349,810-89-1761-1040,25.0,1920,1080,train
IdnOeLhQWv4,720,1020,108-35-522-449,29.97,640,480,train
FfvQG67eS7k,198,1222,200-14-894-708,23.97,1280,720,train
FfvQG67eS7k,1222,2246,162-24-854-716,23.97,1280,720,train
FfvQG67eS7k,2246,3270,187-15-883-711,23.97,1280,720,train
FfvQG67eS7k,3270,4294,192-89-821-718,23.97,1280,720,train
FfvQG67eS7k,4294,5318,197-106-806-715,23.97,1280,720,train
FfvQG67eS7k,5318,5619,194-125-784-715,23.97,1280,720,train
FfvQG67eS7k,5619,6483,171-93-797-719,23.97,1280,720,train
FfvQG67eS7k,8108,8298,517-64-1110-657,23.97,1280,720,train
_GY8d9rkDh8,272,773,389-136-872-619,29.97,1280,720,train
_GY8d9rkDh8,1083,1261,295-113-898-716,29.97,1280,720,train
_GY8d9rkDh8,2291,2428,495-127-1080-712,29.97,1280,720,train
_GY8d9rkDh8,2863,3046,134-118-730-714,29.97,1280,720,train
_GY8d9rkDh8,3119,3256,180-179-701-700,29.97,1280,720,train
_GY8d9rkDh8,3725,3877,460-172-987-699,29.97,1280,720,train
_GY8d9rkDh8,3975,4104,366-135-940-709,29.97,1280,720,train
_GY8d9rkDh8,4150,4360,648-161-1160-673,29.97,1280,720,train
_GY8d9rkDh8,4577,4712,395-176-835-616,29.97,1280,720,train
_GY8d9rkDh8,4953,5123,479-222-875-618,29.97,1280,720,train
_GY8d9rkDh8,5370,5773,494-185-903-594,29.97,1280,720,train
_GY8d9rkDh8,6230,6665,297-40-951-694,29.97,1280,720,train
0Q914by5A98,10440,10764,261-91-559-389,29.97,854,480,test
2GX4WZSUVPo,368,1167,299-44-957-702,29.97,1280,720,train
2GX4WZSUVPo,1274,1657,251-5-963-717,29.97,1280,720,train
2GX4WZSUVPo,1726,2096,357-62-1007-712,29.97,1280,720,train
2GX4WZSUVPo,2193,2616,489-54-1130-695,29.97,1280,720,train
2GX4WZSUVPo,3215,3395,323-52-980-709,29.97,1280,720,train
2GX4WZSUVPo,3438,3739,303-74-921-692,29.97,1280,720,train
2GX4WZSUVPo,3739,4082,442-64-1052-674,29.97,1280,720,train
2GX4WZSUVPo,4082,4318,481-33-1109-661,29.97,1280,720,train
2GX4WZSUVPo,4361,4619,460-91-1029-660,29.97,1280,720,train
2GX4WZSUVPo,4619,4912,370-63-971-664,29.97,1280,720,train
2GX4WZSUVPo,5019,5273,416-81-1011-676,29.97,1280,720,train
2GX4WZSUVPo,5317,5468,370-71-990-691,29.97,1280,720,train
2GX4WZSUVPo,5701,5871,296-30-978-712,29.97,1280,720,train
2GX4WZSUVPo,5990,6343,232-38-873-679,29.97,1280,720,train
2GX4WZSUVPo,6343,6479,398-54-1038-694,29.97,1280,720,train
2GX4WZSUVPo,6510,6656,305-83-902-680,29.97,1280,720,train
2GX4WZSUVPo,6747,7161,324-68-927-671,29.97,1280,720,train
2GX4WZSUVPo,7161,7295,484-70-1042-628,29.97,1280,720,train
2GX4WZSUVPo,7399,7587,395-63-975-643,29.97,1280,720,train
2GX4WZSUVPo,7668,8059,355-53-974-672,29.97,1280,720,train
2GX4WZSUVPo,8850,9030,444-48-1097-701,29.97,1280,720,train
2GX4WZSUVPo,9125,9665,227-23-914-710,29.97,1280,720,train
2GX4WZSUVPo,9812,10048,476-35-1134-693,29.97,1280,720,train
2GX4WZSUVPo,10357,10532,499-59-1149-709,29.97,1280,720,train
2GX4WZSUVPo,10555,10919,262-34-921-693,29.97,1280,720,train
2GX4WZSUVPo,11490,11704,415-33-1088-706,29.97,1280,720,train
2GX4WZSUVPo,11756,12092,456-37-1129-710,29.97,1280,720,train
2GX4WZSUVPo,12114,12597,332-59-989-716,29.97,1280,720,train
2GX4WZSUVPo,12639,12777,468-84-1093-709,29.97,1280,720,train
2GX4WZSUVPo,12868,13033,400-65-1036-701,29.97,1280,720,train
2GX4WZSUVPo,13323,13535,480-48-1147-715,29.97,1280,720,train
2GX4WZSUVPo,13926,14109,547-25-1206-684,29.97,1280,720,train
2GX4WZSUVPo,14392,14604,397-46-1034-683,29.97,1280,720,train
2GX4WZSUVPo,14619,14785,426-58-1030-662,29.97,1280,720,train
2GX4WZSUVPo,14824,15062,341-8-1034-701,29.97,1280,720,train
2GX4WZSUVPo,15139,15479,309-62-957-710,29.97,1280,720,train
2GX4WZSUVPo,15507,15705,310-82-926-698,29.97,1280,720,train
2GX4WZSUVPo,17311,17495,193-43-838-688,29.97,1280,720,train
2GX4WZSUVPo,17524,18103,301-9-999-707,29.97,1280,720,train
ZOhoUyxIgaU,177,1201,690-370-1331-1011,25.0,1920,1080,train
ZOhoUyxIgaU,1243,1796,730-369-1385-1024,25.0,1920,1080,train
ZOhoUyxIgaU,1974,2113,700-314-1367-981,25.0,1920,1080,train
ZOhoUyxIgaU,2646,2856,628-204-1470-1046,25.0,1920,1080,train
ZOhoUyxIgaU,3003,3225,618-265-1433-1080,25.0,1920,1080,train
ZOhoUyxIgaU,3493,4517,722-308-1473-1059,25.0,1920,1080,train
ZOhoUyxIgaU,4517,4752,744-374-1393-1023,25.0,1920,1080,train
ZOhoUyxIgaU,4818,5005,771-362-1465-1056,25.0,1920,1080,train
ZOhoUyxIgaU,6950,7120,755-354-1468-1067,25.0,1920,1080,train
ZOhoUyxIgaU,7298,7427,891-359-1612-1080,25.0,1920,1080,train
QCr8cdnal6o,262,1286,195-105-497-407,25.0,640,480,train
QCr8cdnal6o,1330,1522,142-116-428-402,25.0,640,480,train
QCr8cdnal6o,1615,2639,147-96-454-403,25.0,640,480,train
QCr8cdnal6o,3184,3432,151-82-482-413,25.0,640,480,train
QCr8cdnal6o,3713,3866,241-85-563-407,25.0,640,480,train
QCr8cdnal6o,4301,4453,205-106-504-405,25.0,640,480,train
QCr8cdnal6o,4821,5274,162-82-490-410,25.0,640,480,train
QCr8cdnal6o,5627,5779,206-129-481-404,25.0,640,480,train
QCr8cdnal6o,5952,6285,199-145-467-413,25.0,640,480,train
QCr8cdnal6o,6495,6671,188-124-459-395,25.0,640,480,train
QCr8cdnal6o,6671,6981,151-128-423-400,25.0,640,480,train
oNkBx4CZuEg,0,1024,552-115-1420-983,25.0,1920,1080,test
oNkBx4CZuEg,1024,2048,613-130-1480-997,25.0,1920,1080,test
oNkBx4CZuEg,2070,2311,527-107-1416-996,25.0,1920,1080,test
oNkBx4CZuEg,2312,2605,624-104-1513-993,25.0,1920,1080,test
oNkBx4CZuEg,2605,3529,885-140-1706-961,25.0,1920,1080,test
oNkBx4CZuEg,3647,3919,564-137-1392-965,25.0,1920,1080,test
oNkBx4CZuEg,3919,4109,558-93-1420-955,25.0,1920,1080,test
oNkBx4CZuEg,4110,4634,517-122-1364-969,25.0,1920,1080,test
oNkBx4CZuEg,4634,4861,697-115-1534-952,25.0,1920,1080,test
oNkBx4CZuEg,4861,5171,528-166-1289-927,25.0,1920,1080,test
oNkBx4CZuEg,5172,5811,558-174-1300-916,25.0,1920,1080,test
oNkBx4CZuEg,5811,6053,691-181-1402-892,25.0,1920,1080,test
oNkBx4CZuEg,6170,6468,662-142-1382-862,25.0,1920,1080,test
Xb93PUzUAYA,3,576,118-23-555-460,29.97,640,480,train
Xb93PUzUAYA,576,928,143-0-624-480,29.97,640,480,train
Xb93PUzUAYA,928,1326,106-5-575-474,29.97,640,480,train
Xb93PUzUAYA,2350,2714,134-25-589-480,29.97,640,480,train
Xb93PUzUAYA,2714,2880,164-2-629-467,29.97,640,480,train
Xb93PUzUAYA,4117,4281,130-21-579-470,29.97,640,480,train
Xb93PUzUAYA,5409,5946,98-17-528-447,29.97,640,480,train
Xb93PUzUAYA,5954,6978,139-26-560-447,29.97,640,480,train
Xb93PUzUAYA,7018,7350,158-50-543-435,29.97,640,480,train
Xb93PUzUAYA,7350,7807,110-44-520-454,29.97,640,480,train
Xb93PUzUAYA,7807,8055,106-42-538-474,29.97,640,480,train
Xb93PUzUAYA,8055,8241,92-20-526-454,29.97,640,480,train
Xb93PUzUAYA,8241,8766,110-29-556-475,29.97,640,480,train
Xb93PUzUAYA,8766,9236,101-28-535-462,29.97,640,480,train
Xb93PUzUAYA,9236,9457,151-24-578-451,29.97,640,480,train
Xb93PUzUAYA,9485,10110,143-44-547-448,29.97,640,480,train
Xb93PUzUAYA,10110,10924,165-24-587-446,29.97,640,480,train
Xb93PUzUAYA,10924,11662,86-38-491-443,29.97,640,480,train
Xb93PUzUAYA,11662,12033,127-18-544-435,29.97,640,480,train
FvQUNJNvrU4,5413,5735,286-213-677-604,29.97,1280,720,train
FvQUNJNvrU4,10877,11039,523-164-935-576,29.97,1280,720,train
FvQUNJNvrU4,12496,12740,258-150-696-588,29.97,1280,720,train
FvQUNJNvrU4,15530,15943,509-79-1075-645,29.97,1280,720,train
-K57q5o3dn4,50,481,147-47-533-433,25.0,640,480,train
-K57q5o3dn4,481,633,109-28-499-418,25.0,640,480,train
-K57q5o3dn4,765,923,139-24-515-400,25.0,640,480,train
-K57q5o3dn4,1170,1330,102-39-483-420,25.0,640,480,train
-K57q5o3dn4,1875,2115,145-20-518-393,25.0,640,480,train
-K57q5o3dn4,2353,2509,135-45-538-448,25.0,640,480,train
-K57q5o3dn4,6353,6495,119-31-512-424,25.0,640,480,train
-K57q5o3dn4,8015,8240,128-62-445-379,25.0,640,480,train
-K57q5o3dn4,9860,9990,186-75-506-395,25.0,640,480,train
bI1XOdhWVaw,299,879,243-94-745-596,29.97,932,720,train
bI1XOdhWVaw,969,1132,281-134-763-616,29.97,932,720,train
bI1XOdhWVaw,1749,1934,295-95-835-635,29.97,932,720,train
bI1XOdhWVaw,2735,3127,221-141-682-602,29.97,932,720,train
bI1XOdhWVaw,4512,4668,157-157-581-581,29.97,932,720,train
IWUTAZF8yVw,1068,1204,686-455-1241-1010,29.97,1920,1080,train
IWUTAZF8yVw,1317,1497,918-467-1475-1024,29.97,1920,1080,train
IWUTAZF8yVw,3247,3401,732-441-1308-1017,29.97,1920,1080,train
IWUTAZF8yVw,3765,3986,535-480-1091-1036,29.97,1920,1080,train
IWUTAZF8yVw,5489,5628,534-475-1063-1004,29.97,1920,1080,train
IWUTAZF8yVw,7160,7404,1235-458-1807-1030,29.97,1920,1080,train
IWUTAZF8yVw,8978,9212,253-439-858-1044,29.97,1920,1080,train
IWUTAZF8yVw,10436,10652,387-385-1045-1043,29.97,1920,1080,train
EaEZVfhn07o,3814,4838,84-20-531-467,29.97,640,480,train
EaEZVfhn07o,4838,5107,90-34-520-464,29.97,640,480,train
LmHZE5oklag,628,1146,255-145-1130-1020,29.97,1440,1080,train
LmHZE5oklag,1146,2045,177-102-1106-1031,29.97,1440,1080,train
LmHZE5oklag,2056,2519,172-157-1030-1015,29.97,1440,1080,train
LmHZE5oklag,2519,3238,281-187-1149-1055,29.97,1440,1080,train
LmHZE5oklag,3245,3444,169-145-1022-998,29.97,1440,1080,train
LmHZE5oklag,3444,3932,224-192-1077-1045,29.97,1440,1080,train
LmHZE5oklag,3932,4595,238-154-1078-994,29.97,1440,1080,train
LmHZE5oklag,4812,4951,306-206-1081-981,29.97,1440,1080,train
LmHZE5oklag,4951,5406,231-179-1073-1021,29.97,1440,1080,train
LmHZE5oklag,6213,6617,240-189-1107-1056,29.97,1440,1080,train
7dYtvnHGNxQ,237,390,156-58-544-446,29.97,720,480,train
7dYtvnHGNxQ,526,672,165-75-545-455,29.97,720,480,train
7dYtvnHGNxQ,672,802,173-80-554-461,29.97,720,480,train
7dYtvnHGNxQ,1040,1182,179-67-532-420,29.97,720,480,train
7dYtvnHGNxQ,1479,1611,197-93-564-460,29.97,720,480,train
7dYtvnHGNxQ,1644,2294,164-54-560-450,29.97,720,480,train
7dYtvnHGNxQ,2300,2440,154-76-512-434,29.97,720,480,train
7dYtvnHGNxQ,2640,2856,130-45-516-431,29.97,720,480,train
7dYtvnHGNxQ,3750,4079,175-50-556-431,29.97,720,480,train
7dYtvnHGNxQ,4079,4278,194-15-601-422,29.97,720,480,train
7dYtvnHGNxQ,4299,4448,218-21-640-443,29.97,720,480,train
7dYtvnHGNxQ,4545,4732,193-37-585-429,29.97,720,480,train
7dYtvnHGNxQ,4934,5501,221-55-607-441,29.97,720,480,train
7dYtvnHGNxQ,5675,5897,142-71-531-460,29.97,720,480,train
7dYtvnHGNxQ,6009,6169,162-71-545-454,29.97,720,480,train
7dYtvnHGNxQ,7336,7508,124-82-517-475,29.97,720,480,train
4rW_9Y1eci8,1215,1409,346-27-922-603,25.0,1280,720,train
4rW_9Y1eci8,1409,1745,280-26-785-531,25.0,1280,720,train
4rW_9Y1eci8,1927,2078,310-29-848-567,25.0,1280,720,train
4rW_9Y1eci8,2272,2460,229-10-778-559,25.0,1280,720,train
4rW_9Y1eci8,2460,2611,164-30-725-591,25.0,1280,720,train
4rW_9Y1eci8,2919,3089,234-23-710-499,25.0,1280,720,train
4rW_9Y1eci8,3420,3556,230-11-740-521,25.0,1280,720,train
4rW_9Y1eci8,4067,4339,189-4-728-543,25.0,1280,720,train
4rW_9Y1eci8,4401,4569,125-9-641-525,25.0,1280,720,train
4rW_9Y1eci8,4569,4710,199-15-727-543,25.0,1280,720,train
4rW_9Y1eci8,5157,5437,311-14-830-533,25.0,1280,720,train
mndSqTrxpts,0,175,5-168-496-659,30.0,1280,720,test
mndSqTrxpts,2234,2406,700-130-1230-660,30.0,1280,720,test
mndSqTrxpts,2406,2550,565-132-1069-636,30.0,1280,720,test
mndSqTrxpts,2911,3105,576-116-1123-663,30.0,1280,720,test
mndSqTrxpts,3600,3794,338-136-879-677,30.0,1280,720,test
Wh3AmDsdQtM,0,1024,149-52-565-468,29.97,640,480,train
Wh3AmDsdQtM,1024,2048,127-55-539-467,29.97,640,480,train
Wh3AmDsdQtM,2048,2187,109-74-506-471,29.97,640,480,train
Wh3AmDsdQtM,2187,3211,122-53-540-471,29.97,640,480,train
Wh3AmDsdQtM,3211,4235,127-64-534-471,29.97,640,480,train
Wh3AmDsdQtM,4235,5227,136-66-538-468,29.97,640,480,train
Wh3AmDsdQtM,5228,5613,124-61-537-474,29.97,640,480,train
Wh3AmDsdQtM,5613,5834,78-56-489-467,29.97,640,480,train
Wh3AmDsdQtM,5834,6097,88-35-524-471,29.97,640,480,train
HZks-9WmW5s,100,429,120-91-468-439,29.97,640,480,train
HZks-9WmW5s,473,881,116-84-464-432,29.97,640,480,train
HZks-9WmW5s,937,1383,113-80-461-428,29.97,640,480,train
HZks-9WmW5s,1786,2031,159-70-555-466,29.97,640,480,train
HZks-9WmW5s,2890,3097,169-73-551-455,29.97,640,480,train
HZks-9WmW5s,3136,3563,157-72-557-472,29.97,640,480,train
dSIkl9ONOJc,400,1424,245-88-615-458,30.0,854,480,train
dSIkl9ONOJc,1478,2055,268-76-615-423,30.0,854,480,train
dSIkl9ONOJc,2133,3039,248-89-620-461,30.0,854,480,train
dSIkl9ONOJc,3039,3199,254-97-616-459,30.0,854,480,train
dSIkl9ONOJc,3199,3481,249-88-621-460,30.0,854,480,train
dSIkl9ONOJc,3481,4328,270-85-612-427,30.0,854,480,train
dSIkl9ONOJc,4389,4739,244-85-623-464,30.0,854,480,train
dSIkl9ONOJc,4777,5311,250-92-620-462,30.0,854,480,train
dSIkl9ONOJc,5311,5762,238-74-627-463,30.0,854,480,train
dSIkl9ONOJc,6170,6801,241-76-622-457,30.0,854,480,train
dSIkl9ONOJc,6820,7157,242-75-627-460,30.0,854,480,train
dSIkl9ONOJc,7536,7964,244-58-613-427,30.0,854,480,train
dSIkl9ONOJc,7964,8151,240-38-636-434,30.0,854,480,train
dSIkl9ONOJc,8249,8560,241-72-628-459,30.0,854,480,train
dSIkl9ONOJc,8573,8721,236-71-626-461,30.0,854,480,train
OOzyPCkjVmE,250,500,157-91-490-424,30.0,640,480,train
OOzyPCkjVmE,500,750,177-95-495-413,30.0,640,480,train
OOzyPCkjVmE,750,893,182-110-493-421,30.0,640,480,train
OOzyPCkjVmE,1868,2000,130-113-441-424,30.0,640,480,train
OOzyPCkjVmE,2064,2250,115-98-450-433,30.0,640,480,train
OOzyPCkjVmE,2327,2500,108-109-419-420,30.0,640,480,train
OOzyPCkjVmE,2591,2874,93-102-401-410,30.0,640,480,train
OOzyPCkjVmE,5500,5670,84-92-407-415,30.0,640,480,train
OOzyPCkjVmE,7316,7454,167-91-485-409,30.0,640,480,train
OOzyPCkjVmE,7573,7742,128-80-479-431,30.0,640,480,train
OOzyPCkjVmE,10361,10500,200-98-478-376,30.0,640,480,train
5ujMzSyHO_8,687,1459,129-124-420-415,25.0,600,480,train
5ujMzSyHO_8,1459,1690,162-120-453-411,25.0,600,480,train
skHdRWJ_Zuk,2035,2471,300-175-839-714,29.97,1280,720,train
skHdRWJ_Zuk,2895,3164,241-154-796-709,29.97,1280,720,train
skHdRWJ_Zuk,3227,3410,255-145-827-717,29.97,1280,720,train
skHdRWJ_Zuk,13321,13499,288-164-837-713,29.97,1280,720,train
skHdRWJ_Zuk,16937,17125,435-198-926-689,29.97,1280,720,train
skHdRWJ_Zuk,17825,17983,256-153-820-717,29.97,1280,720,train
skHdRWJ_Zuk,18854,19003,236-136-802-702,29.97,1280,720,train
skHdRWJ_Zuk,19003,19142,250-108-848-706,29.97,1280,720,train
skHdRWJ_Zuk,19651,19812,350-159-909-718,29.97,1280,720,train
gkt8MPv8g1k,4933,5091,234-142-725-633,29.97,1280,720,train
gkt8MPv8g1k,5143,5440,228-137-731-640,29.97,1280,720,train
gkt8MPv8g1k,7498,7631,238-124-771-657,29.97,1280,720,train
gkt8MPv8g1k,7840,8140,253-99-793-639,29.97,1280,720,train
gkt8MPv8g1k,8470,8648,276-122-730-576,29.97,1280,720,train
gkt8MPv8g1k,9123,9323,339-150-799-610,29.97,1280,720,train
gkt8MPv8g1k,10282,10432,291-119-801-629,29.97,1280,720,train
gkt8MPv8g1k,11308,11465,315-36-916-637,29.97,1280,720,train
gkt8MPv8g1k,11865,11997,460-81-1025-646,29.97,1280,720,train
gkt8MPv8g1k,12019,12165,641-103-1201-663,29.97,1280,720,train
gkt8MPv8g1k,13072,13331,229-108-750-629,29.97,1280,720,train
gkt8MPv8g1k,13502,13686,351-136-854-639,29.97,1280,720,train
gkt8MPv8g1k,14795,14974,245-59-782-596,29.97,1280,720,train
olTSwTofrDM,420,660,278-26-909-657,29.97,1280,720,train
olTSwTofrDM,800,1163,347-57-944-654,29.97,1280,720,train
olTSwTofrDM,1163,1410,369-27-1010-668,29.97,1280,720,train
olTSwTofrDM,1839,2231,367-70-948-651,29.97,1280,720,train
olTSwTofrDM,2392,2524,463-81-1023-641,29.97,1280,720,train
olTSwTofrDM,2524,2697,361-84-911-634,29.97,1280,720,train
olTSwTofrDM,2702,2937,463-70-1035-642,29.97,1280,720,train
olTSwTofrDM,3263,3403,311-83-871-643,29.97,1280,720,train
olTSwTofrDM,3861,4063,400-26-1005-631,29.97,1280,720,train
olTSwTofrDM,4251,4385,180-49-765-634,29.97,1280,720,train
olTSwTofrDM,4600,4745,307-83-861-637,29.97,1280,720,train
olTSwTofrDM,4745,5029,211-95-756-640,29.97,1280,720,train
olTSwTofrDM,5238,5373,251-90-796-635,29.97,1280,720,train
olTSwTofrDM,6268,6492,284-46-890-652,29.97,1280,720,train
jFuiqvVaESE,450,1050,303-142-717-556,29.97,960,720,train
jFuiqvVaESE,1561,1742,259-85-773-599,29.97,960,720,train
jFuiqvVaESE,2154,2340,249-133-702-586,29.97,960,720,train
jFuiqvVaESE,2661,2850,193-99-664-570,29.97,960,720,train
jFuiqvVaESE,3980,4175,247-94-733-580,29.97,960,720,train
jFuiqvVaESE,4222,4350,170-89-719-638,29.97,960,720,train
jFuiqvVaESE,4873,5021,276-109-742-575,29.97,960,720,train
jFuiqvVaESE,5650,5884,231-93-714-576,29.97,960,720,train
jFuiqvVaESE,6800,6950,269-138-706-575,29.97,960,720,train
Mo87mOAnAio,115,579,498-178-953-633,29.97,1280,720,train
Mo87mOAnAio,658,878,481-169-934-622,29.97,1280,720,train
Mo87mOAnAio,878,1151,518-195-966-643,29.97,1280,720,train
Mo87mOAnAio,1842,2317,470-212-889-631,29.97,1280,720,train
Mo87mOAnAio,2321,2696,497-238-837-578,29.97,1280,720,train
Mo87mOAnAio,5003,5136,340-155-896-711,29.97,1280,720,train
kt2xwj8xiZI,381,996,241-119-713-591,29.97,1280,720,train
kt2xwj8xiZI,1022,1224,238-162-683-607,29.97,1280,720,train
kt2xwj8xiZI,1320,1525,217-147-693-623,29.97,1280,720,train
kt2xwj8xiZI,1587,1758,222-156-686-620,29.97,1280,720,train
kt2xwj8xiZI,2167,2447,376-124-870-618,29.97,1280,720,train
kt2xwj8xiZI,3157,3286,578-133-1063-618,29.97,1280,720,train
kt2xwj8xiZI,3343,3474,605-150-1074-619,29.97,1280,720,train
kt2xwj8xiZI,4010,4169,384-118-868-602,29.97,1280,720,train
kt2xwj8xiZI,4436,4597,301-135-792-626,29.97,1280,720,train
kt2xwj8xiZI,4637,4868,293-140-779-626,29.97,1280,720,train
kt2xwj8xiZI,5497,5712,184-159-628-603,29.97,1280,720,train
kt2xwj8xiZI,5794,6223,199-147-646-594,29.97,1280,720,train
kt2xwj8xiZI,6267,6404,143-151-605-613,29.97,1280,720,train
kt2xwj8xiZI,6804,7020,349-148-823-622,29.97,1280,720,train
kt2xwj8xiZI,8422,8633,646-109-1127-590,29.97,1280,720,train
kt2xwj8xiZI,9044,9214,404-128-885-609,29.97,1280,720,train
kt2xwj8xiZI,9316,9571,431-125-934-628,29.97,1280,720,train
kt2xwj8xiZI,9967,10146,171-125-646-600,29.97,1280,720,train
kt2xwj8xiZI,10505,10667,331-154-762-585,29.97,1280,720,train
kt2xwj8xiZI,11308,11484,304-174-713-583,29.97,1280,720,train
kt2xwj8xiZI,12196,12340,302-137-755-590,29.97,1280,720,train
kt2xwj8xiZI,12340,12638,284-127-735-578,29.97,1280,720,train
cB0yZrBOIXQ,362,639,336-89-934-687,25.0,1280,720,test
cB0yZrBOIXQ,866,1020,310-77-912-679,25.0,1280,720,test
cB0yZrBOIXQ,1162,1627,291-111-893-713,25.0,1280,720,test
cB0yZrBOIXQ,4698,4834,325-69-951-695,25.0,1280,720,test
cB0yZrBOIXQ,4834,5038,253-61-897-705,25.0,1280,720,test
cB0yZrBOIXQ,5098,5317,383-74-985-676,25.0,1280,720,test
Ttc2stTBRGI,599,850,181-116-696-631,29.97,1280,720,train
Ttc2stTBRGI,922,1054,261-162-723-624,29.97,1280,720,train
Ttc2stTBRGI,1546,1688,388-145-865-622,29.97,1280,720,train
Ttc2stTBRGI,2450,2592,651-148-1113-610,29.97,1280,720,train
Ttc2stTBRGI,2671,2852,560-184-976-600,29.97,1280,720,train
Ttc2stTBRGI,2923,3052,474-139-946-611,29.97,1280,720,train
Ttc2stTBRGI,4145,4274,412-107-951-646,29.97,1280,720,train
Ttc2stTBRGI,4362,4530,279-151-769-641,29.97,1280,720,train
Ttc2stTBRGI,5305,5488,224-160-663-599,29.97,1280,720,train
Ttc2stTBRGI,5600,5796,227-168-659-600,29.97,1280,720,train
Ttc2stTBRGI,5796,5925,230-161-681-612,29.97,1280,720,train
Ttc2stTBRGI,6208,6374,253-173-675-595,29.97,1280,720,train
Ttc2stTBRGI,6484,6627,255-183-660-588,29.97,1280,720,train
Ttc2stTBRGI,6656,6787,237-174-652-589,29.97,1280,720,train
Ttc2stTBRGI,7095,7241,265-137-726-598,29.97,1280,720,train
Ttc2stTBRGI,7243,7466,249-132-706-589,29.97,1280,720,train
ETywBOZ19Y0,606,738,1062-260-1876-1074,29.97,1920,1080,train
ETywBOZ19Y0,865,995,725-147-1561-983,29.97,1920,1080,train
ETywBOZ19Y0,995,1173,687-218-1491-1022,29.97,1920,1080,train
ETywBOZ19Y0,1192,1325,495-238-1258-1001,29.97,1920,1080,train
ETywBOZ19Y0,1447,1668,501-167-1348-1014,29.97,1920,1080,train
ETywBOZ19Y0,1668,1802,580-124-1471-1015,29.97,1920,1080,train
ETywBOZ19Y0,1926,2239,599-191-1477-1069,29.97,1920,1080,train
ETywBOZ19Y0,4796,5567,628-30-1677-1079,29.97,1920,1080,train
ETywBOZ19Y0,5724,6134,594-62-1610-1078,29.97,1920,1080,train
ETywBOZ19Y0,7020,7273,162-83-1159-1080,29.97,1920,1080,train
ETywBOZ19Y0,8463,8654,38-26-1071-1059,29.97,1920,1080,train
ETywBOZ19Y0,9818,10612,764-35-1740-1011,29.97,1920,1080,train
ETywBOZ19Y0,10883,11441,1021-140-1864-983,29.97,1920,1080,train
ETywBOZ19Y0,11614,11766,472-172-1377-1077,29.97,1920,1080,train
ETywBOZ19Y0,11766,12135,537-128-1468-1059,29.97,1920,1080,train
ETywBOZ19Y0,12323,12606,488-63-1472-1047,29.97,1920,1080,train
ETywBOZ19Y0,12639,13004,645-27-1687-1069,29.97,1920,1080,train
fLYeTpU8b1A,2654,2936,461-10-1525-1074,29.97,1920,1080,train
fLYeTpU8b1A,4439,4576,50-21-1098-1069,29.97,1920,1080,train
DMEaUoA8EPE,28,354,560-331-1218-989,25.0,1920,1080,test
DMEaUoA8EPE,597,810,514-387-1177-1050,25.0,1920,1080,test
iFMbu9-Mejc,75,344,230-45-654-469,25.0,854,480,train
iFMbu9-Mejc,344,520,199-23-642-466,25.0,854,480,train
iFMbu9-Mejc,834,1054,224-39-638-453,25.0,854,480,train
iFMbu9-Mejc,1216,1369,234-56-637-459,25.0,854,480,train
iFMbu9-Mejc,2009,2150,263-77-645-459,25.0,854,480,train
iFMbu9-Mejc,2759,3064,197-54-607-464,25.0,854,480,train
iFMbu9-Mejc,4989,5131,260-56-648-444,25.0,854,480,train
nHGRRI8otpE,4964,5223,191-103-802-714,29.67,1280,720,train
nHGRRI8otpE,6556,6821,648-125-1198-675,29.67,1280,720,train
nHGRRI8otpE,6864,7297,699-93-1270-664,29.67,1280,720,train
nHGRRI8otpE,7644,7843,597-108-1113-624,29.67,1280,720,train
nHGRRI8otpE,7843,8091,589-81-1130-622,29.67,1280,720,train
nHGRRI8otpE,8091,8229,494-55-1056-617,29.67,1280,720,train
nHGRRI8otpE,8253,8429,574-98-1082-606,29.67,1280,720,train
nHGRRI8otpE,8429,8701,616-64-1146-594,29.67,1280,720,train
nHGRRI8otpE,10363,10598,134-13-787-666,29.67,1280,720,train
nHGRRI8otpE,10965,11173,130-30-757-657,29.67,1280,720,train
nHGRRI8otpE,11292,11438,9-0-672-662,29.67,1280,720,train
nHGRRI8otpE,12581,13029,99-84-613-598,29.67,1280,720,train
nHGRRI8otpE,13241,13424,93-64-607-578,29.67,1280,720,train
mNtz9Kq4-YU,0,246,295-143-700-548,25.0,1280,720,train
mNtz9Kq4-YU,1202,1344,513-153-894-534,25.0,1280,720,train
mNtz9Kq4-YU,3942,4319,345-111-727-493,25.0,1280,720,train
mNtz9Kq4-YU,8072,8434,347-87-747-487,25.0,1280,720,train
lCb5w6n8kPs,4451,4631,273-126-535-388,30.0,810,480,test
lCb5w6n8kPs,10150,10295,292-123-558-389,30.0,810,480,test
lCb5w6n8kPs,11879,12014,237-88-541-392,30.0,810,480,test
lCb5w6n8kPs,12081,12216,242-88-547-393,30.0,810,480,test
S5DkrAAcQP0,368,1392,44-55-674-685,25.0,1280,720,train
S5DkrAAcQP0,1392,2270,247-132-749-634,25.0,1280,720,train
S5DkrAAcQP0,2379,2562,372-145-846-619,25.0,1280,720,train
S5DkrAAcQP0,2597,2795,366-160-847-641,25.0,1280,720,train
S5DkrAAcQP0,2836,3048,348-136-848-636,25.0,1280,720,train
S5DkrAAcQP0,3149,3587,506-118-1027-639,25.0,1280,720,train
S5DkrAAcQP0,3957,4124,535-110-1093-668,25.0,1280,720,train
S5DkrAAcQP0,4124,4268,553-75-1152-674,25.0,1280,720,train
ZFpTP2fSThw,0,135,826-231-1625-1030,25.0,1920,1080,test
ZFpTP2fSThw,135,270,815-245-1592-1022,25.0,1920,1080,test
ZFpTP2fSThw,405,540,808-256-1609-1057,25.0,1920,1080,test
ZFpTP2fSThw,540,675,816-241-1604-1029,25.0,1920,1080,test
ZFpTP2fSThw,744,945,859-316-1605-1062,25.0,1920,1080,test
ZFpTP2fSThw,1826,1956,806-310-1512-1016,25.0,1920,1080,test
ZFpTP2fSThw,5265,5400,948-173-1767-992,25.0,1920,1080,test
h8zzn3C5TgU,809,942,407-91-1004-688,29.97,1280,720,train
h8zzn3C5TgU,942,1167,404-52-1046-694,29.97,1280,720,train
h8zzn3C5TgU,1167,1519,323-20-1016-713,29.97,1280,720,train
h8zzn3C5TgU,1942,2314,398-68-1029-699,29.97,1280,720,train
h8zzn3C5TgU,2894,3238,323-53-979-709,29.97,1280,720,train
h8zzn3C5TgU,3635,4148,393-44-1044-695,29.97,1280,720,train
boSXUZ2t7yQ,3034,3220,207-28-625-446,30.0,810,480,train
boSXUZ2t7yQ,3311,3458,212-31-623-442,30.0,810,480,train
boSXUZ2t7yQ,3548,3717,230-49-593-412,30.0,810,480,train
boSXUZ2t7yQ,3717,4456,203-31-587-415,30.0,810,480,train
boSXUZ2t7yQ,4549,4703,235-46-605-416,30.0,810,480,train
boSXUZ2t7yQ,4795,5004,240-40-613-413,30.0,810,480,train
boSXUZ2t7yQ,5058,5189,230-26-626-422,30.0,810,480,train
6jHyn4z0KLk,1890,2170,165-112-440-387,25.0,640,480,train
6jHyn4z0KLk,2962,3100,197-120-469-392,25.0,640,480,train
0l9UlEelXFI,196,737,153-112-474-433,25.0,600,480,train
0l9UlEelXFI,738,916,187-149-451-413,25.0,600,480,train
0l9UlEelXFI,945,1236,193-145-459-411,25.0,600,480,train
0l9UlEelXFI,1443,1623,226-141-514-429,25.0,600,480,train
0l9UlEelXFI,1744,2138,237-142-528-433,25.0,600,480,train
0l9UlEelXFI,2148,2364,111-122-424-435,25.0,600,480,train
0l9UlEelXFI,2373,2545,90-120-407-437,25.0,600,480,train
0l9UlEelXFI,2545,2699,176-135-476-435,25.0,600,480,train
0l9UlEelXFI,2985,3443,230-125-539-434,25.0,600,480,train
0l9UlEelXFI,4050,4310,101-110-463-472,25.0,600,480,train
0l9UlEelXFI,4991,5173,88-57-507-476,25.0,600,480,train
0l9UlEelXFI,5201,5380,132-52-556-476,25.0,600,480,train
kTHsY7fbcgQ,361,762,460-90-995-625,25.0,1280,720,train
kTHsY7fbcgQ,762,1045,473-54-1060-641,25.0,1280,720,train
kTHsY7fbcgQ,1045,1235,457-95-1031-669,25.0,1280,720,train
kTHsY7fbcgQ,1235,2259,350-67-947-664,25.0,1280,720,train
kTHsY7fbcgQ,2365,2591,508-78-1109-679,25.0,1280,720,train
kTHsY7fbcgQ,2906,3123,385-95-926-636,25.0,1280,720,train
kTHsY7fbcgQ,3186,3333,393-113-931-651,25.0,1280,720,train
kTHsY7fbcgQ,3509,3686,390-120-913-643,25.0,1280,720,train
kTHsY7fbcgQ,3806,3940,391-113-925-647,25.0,1280,720,train
kTHsY7fbcgQ,4203,5227,438-26-1092-680,25.0,1280,720,train
kTHsY7fbcgQ,5275,5758,443-87-1048-692,25.0,1280,720,train
kTHsY7fbcgQ,5758,5931,473-58-1089-674,25.0,1280,720,train
PKE4yfDESa0,0,421,92-23-529-460,29.97,640,480,train
PKE4yfDESa0,421,1445,95-0-558-463,29.97,640,480,train
PKE4yfDESa0,1445,2469,92-22-533-463,29.97,640,480,train
PKE4yfDESa0,2469,3493,108-38-532-462,29.97,640,480,train
PKE4yfDESa0,3493,4517,98-26-537-465,29.97,640,480,train
PKE4yfDESa0,4598,4818,101-27-533-459,29.97,640,480,train
PKE4yfDESa0,4818,5657,92-5-551-464,29.97,640,480,train
vVRBxYkYILo,166,1190,1003-109-1855-961,29.97,1920,1080,train
vVRBxYkYILo,1242,1499,1034-148-1841-955,29.97,1920,1080,train
vVRBxYkYILo,2555,2883,191-208-991-1008,29.97,1920,1080,train
vVRBxYkYILo,3026,3161,71-207-862-998,29.97,1920,1080,train
vVRBxYkYILo,3218,3387,72-188-836-952,29.97,1920,1080,train
vVRBxYkYILo,3809,3954,221-128-1080-987,29.97,1920,1080,train
vVRBxYkYILo,4168,4399,365-94-1313-1042,29.97,1920,1080,train
vVRBxYkYILo,4399,4529,593-121-1493-1021,29.97,1920,1080,train
vVRBxYkYILo,4663,5010,714-37-1662-985,29.97,1920,1080,train
vVRBxYkYILo,6187,6412,353-154-1064-865,29.97,1920,1080,train
vVRBxYkYILo,6733,6900,313-208-984-879,29.97,1920,1080,train
vVRBxYkYILo,6919,7085,234-207-926-899,29.97,1920,1080,train
vVRBxYkYILo,7105,7266,186-152-911-877,29.97,1920,1080,train
vVRBxYkYILo,7291,7546,506-241-1127-862,29.97,1920,1080,train
vVRBxYkYILo,8538,8680,1149-271-1747-869,29.97,1920,1080,train
vVRBxYkYILo,8961,9207,1024-206-1756-938,29.97,1920,1080,train
vVRBxYkYILo,9314,9833,918-271-1530-883,29.97,1920,1080,train
vVRBxYkYILo,10043,10645,875-207-1528-860,29.97,1920,1080,train
-uPGb1vn9Pk,271,520,565-404-822-661,25.0,1280,720,train
-uPGb1vn9Pk,3527,3903,626-416-882-672,25.0,1280,720,train
-uPGb1vn9Pk,8686,8949,712-400-974-662,25.0,1280,720,train
-uPGb1vn9Pk,10632,10827,680-405-962-687,25.0,1280,720,train
-uPGb1vn9Pk,10837,10965,756-423-1017-684,25.0,1280,720,train
-uPGb1vn9Pk,11753,11958,785-389-1076-680,25.0,1280,720,train
-uPGb1vn9Pk,12081,12508,735-387-1033-685,25.0,1280,720,train
-uPGb1vn9Pk,12508,12793,667-387-970-690,25.0,1280,720,train
-uPGb1vn9Pk,12818,12996,641-402-924-685,25.0,1280,720,train
-uPGb1vn9Pk,13134,13484,538-407-812-681,25.0,1280,720,train
-uPGb1vn9Pk,13484,13618,469-416-730-677,25.0,1280,720,train
-uPGb1vn9Pk,14669,14909,349-413-610-674,25.0,1280,720,train
-uPGb1vn9Pk,14915,15536,358-407-627-676,25.0,1280,720,train
-uPGb1vn9Pk,15849,16074,345-416-604-675,25.0,1280,720,train
-uPGb1vn9Pk,20707,21076,504-374-792-662,25.0,1280,720,train
w81Tr0Dp1K8,1120,1378,4-307-484-787,29.97,1920,1080,test
w81Tr0Dp1K8,1375,1516,1267-268-1793-794,29.97,1920,1080,test
w81Tr0Dp1K8,2125,2449,541-220-1163-842,29.97,1920,1080,test
w81Tr0Dp1K8,2947,3160,569-222-1178-831,29.97,1920,1080,test
w81Tr0Dp1K8,3550,3698,4-314-470-780,29.97,1920,1080,test
w81Tr0Dp1K8,4036,4218,670-235-1287-852,29.97,1920,1080,test
w81Tr0Dp1K8,8275,8854,432-149-1199-916,29.97,1920,1080,test
w81Tr0Dp1K8,8965,9131,409-86-1249-926,29.97,1920,1080,test
w81Tr0Dp1K8,10513,10662,579-181-1300-902,29.97,1920,1080,test
w81Tr0Dp1K8,11502,11671,467-136-1241-910,29.97,1920,1080,test
w81Tr0Dp1K8,12112,12295,22-265-586-829,29.97,1920,1080,test
w81Tr0Dp1K8,12240,12431,434-87-1264-917,29.97,1920,1080,test
w81Tr0Dp1K8,12373,12752,1090-190-1719-819,29.97,1920,1080,test
w81Tr0Dp1K8,12900,13080,382-140-1140-898,29.97,1920,1080,test
w81Tr0Dp1K8,13602,13783,438-132-1215-909,29.97,1920,1080,test
w81Tr0Dp1K8,14180,14347,460-140-1240-920,29.97,1920,1080,test
w81Tr0Dp1K8,14197,14377,12-320-522-830,29.97,1920,1080,test
w81Tr0Dp1K8,14756,14888,1027-196-1654-823,29.97,1920,1080,test
w81Tr0Dp1K8,15145,15329,416-85-1235-904,29.97,1920,1080,test
w81Tr0Dp1K8,15329,15485,6-269-573-836,29.97,1920,1080,test
w81Tr0Dp1K8,15339,15664,422-120-1193-891,29.97,1920,1080,test
w81Tr0Dp1K8,15670,15801,6-262-579-835,29.97,1920,1080,test
A3ZmT97hAWU,95,678,136-86-477-427,29.97,640,480,test
A3ZmT97hAWU,768,1653,103-66-487-450,29.97,640,480,test
A3ZmT97hAWU,1737,2033,117-50-500-433,29.97,640,480,test
A3ZmT97hAWU,2455,2899,49-36-466-453,29.97,640,480,test
A3ZmT97hAWU,3006,3151,147-77-508-438,29.97,640,480,test
A3ZmT97hAWU,3169,3528,83-69-453-439,29.97,640,480,test
A3ZmT97hAWU,3883,4023,128-67-468-407,29.97,640,480,test
A3ZmT97hAWU,4436,4582,159-92-496-429,29.97,640,480,test
A3ZmT97hAWU,5410,5643,176-79-515-418,29.97,640,480,test
A3ZmT97hAWU,6808,7014,148-83-485-420,29.97,640,480,test
A3ZmT97hAWU,7482,7618,72-58-423-409,29.97,640,480,test
A3ZmT97hAWU,7778,8125,148-71-481-404,29.97,640,480,test
A3ZmT97hAWU,8544,8731,58-82-396-420,29.97,640,480,test
A3ZmT97hAWU,9460,9605,33-69-399-435,29.97,640,480,test
yZ5l8EJeCMI,165,992,59-94-369-404,25.0,600,480,train
yZ5l8EJeCMI,2823,3049,116-121-390-395,25.0,600,480,train
eOdr6vu_Y6g,1307,1494,414-194-790-570,29.97,1280,720,train
eOdr6vu_Y6g,1936,2203,431-194-804-567,29.97,1280,720,train
eOdr6vu_Y6g,2203,2348,409-236-738-565,29.97,1280,720,train
eOdr6vu_Y6g,3059,3265,480-225-821-566,29.97,1280,720,train
eOdr6vu_Y6g,3451,3616,444-187-815-558,29.97,1280,720,train
eOdr6vu_Y6g,6837,6992,281-52-944-715,29.97,1280,720,train
eOdr6vu_Y6g,9748,9938,327-139-875-687,29.97,1280,720,train
eOdr6vu_Y6g,11378,11551,183-120-774-711,29.97,1280,720,train
tN_7bWyIWDU,16,1005,279-39-868-628,30.0,1280,720,train
tN_7bWyIWDU,1519,1753,632-89-1167-624,30.0,1280,720,train
tN_7bWyIWDU,2885,3015,381-128-906-653,30.0,1280,720,train
tN_7bWyIWDU,3015,3177,416-104-950-638,30.0,1280,720,train
tN_7bWyIWDU,3177,3495,322-97-840-615,30.0,1280,720,train
tN_7bWyIWDU,3821,3970,371-100-901-630,30.0,1280,720,train
tN_7bWyIWDU,3970,4160,258-104-778-624,30.0,1280,720,train
tN_7bWyIWDU,4220,4570,250-79-801-630,30.0,1280,720,train
tN_7bWyIWDU,4747,5007,261-93-812-644,30.0,1280,720,train
tN_7bWyIWDU,5007,5280,349-65-903-619,30.0,1280,720,train
tN_7bWyIWDU,5280,5713,306-97-846-637,30.0,1280,720,train
tN_7bWyIWDU,5924,6499,311-102-878-669,30.0,1280,720,train
tN_7bWyIWDU,6581,6750,306-106-865-665,30.0,1280,720,train
tN_7bWyIWDU,7040,7269,327-63-894-630,30.0,1280,720,train
tN_7bWyIWDU,7495,7627,299-28-896-625,30.0,1280,720,train
tN_7bWyIWDU,7691,7943,303-94-829-620,30.0,1280,720,train
tN_7bWyIWDU,8000,8192,402-74-949-621,30.0,1280,720,train
tN_7bWyIWDU,8458,8960,233-24-840-631,30.0,1280,720,train
tN_7bWyIWDU,9007,9377,347-91-901-645,30.0,1280,720,train
tN_7bWyIWDU,9377,9673,336-61-899-624,30.0,1280,720,train
tN_7bWyIWDU,10225,10400,441-43-1044-646,30.0,1280,720,train
tN_7bWyIWDU,10660,10990,498-57-1054-613,30.0,1280,720,train
kXy-sWk4-jY,170,322,781-196-1407-822,25.0,1920,1080,train
kXy-sWk4-jY,460,688,990-201-1605-816,25.0,1920,1080,train
kXy-sWk4-jY,755,1002,801-218-1411-828,25.0,1920,1080,train
kXy-sWk4-jY,1002,1210,795-228-1426-859,25.0,1920,1080,train
kXy-sWk4-jY,1287,1454,603-236-1205-838,25.0,1920,1080,train
kXy-sWk4-jY,1703,1876,762-243-1444-925,25.0,1920,1080,train
kXy-sWk4-jY,2002,2373,761-320-1279-838,25.0,1920,1080,train
kXy-sWk4-jY,2468,2693,809-315-1331-837,25.0,1920,1080,train
kXy-sWk4-jY,2947,3147,909-315-1402-808,25.0,1920,1080,train
kXy-sWk4-jY,3950,4085,779-296-1234-751,25.0,1920,1080,train
kXy-sWk4-jY,5417,5586,627-297-1166-836,25.0,1920,1080,train
UMKGRC2QMFo,0,205,413-209-1200-996,29.97,1920,1080,train
UMKGRC2QMFo,205,800,408-213-1176-981,29.97,1920,1080,train
UMKGRC2QMFo,800,1056,592-256-1331-995,29.97,1920,1080,train
UMKGRC2QMFo,1181,1329,564-301-1262-999,29.97,1920,1080,train
UMKGRC2QMFo,1379,1519,648-285-1345-982,29.97,1920,1080,train
UMKGRC2QMFo,1699,2027,493-284-1169-960,29.97,1920,1080,train
UMKGRC2QMFo,2134,2288,523-307-1159-943,29.97,1920,1080,train
UMKGRC2QMFo,3352,3491,635-264-1309-938,29.97,1920,1080,train
UMKGRC2QMFo,4066,4225,503-300-1143-940,29.97,1920,1080,train
UMKGRC2QMFo,4225,4451,601-344-1197-940,29.97,1920,1080,train
Iw91zmQTMm0,1634,1851,412-53-1079-720,29.97,1280,720,test
Iw91zmQTMm0,2436,2702,360-126-899-665,29.97,1280,720,test
Iw91zmQTMm0,2820,3234,329-96-910-677,29.97,1280,720,test
Iw91zmQTMm0,3234,3387,420-104-991-675,29.97,1280,720,test
Iw91zmQTMm0,3445,3597,345-100-929-684,29.97,1280,720,test
Iw91zmQTMm0,3619,4049,263-86-840-663,29.97,1280,720,test
Iw91zmQTMm0,4049,4465,331-87-916-672,29.97,1280,720,test
0ye2tnrow_I,1218,1634,315-47-983-715,29.97,1280,720,train
0ye2tnrow_I,2188,2406,315-68-940-693,29.97,1280,720,train
0ye2tnrow_I,2976,3112,362-112-909-659,29.97,1280,720,train
0ye2tnrow_I,3202,3465,445-58-1068-681,29.97,1280,720,train
0ye2tnrow_I,5782,5922,5-81-643-719,29.97,1280,720,train
0ye2tnrow_I,6359,6688,1-72-630-701,29.97,1280,720,train
0ye2tnrow_I,6775,6948,374-82-989-697,29.97,1280,720,train
0ye2tnrow_I,7035,7216,326-110-910-694,29.97,1280,720,train
0ye2tnrow_I,7232,7685,347-52-985-690,29.97,1280,720,train
DfSnNtAcWAs,1390,1581,427-321-1140-1034,29.97,1920,1080,train
DfSnNtAcWAs,1651,1915,528-306-1252-1030,29.97,1920,1080,train
DfSnNtAcWAs,1982,2739,493-172-1329-1008,29.97,1920,1080,train
DfSnNtAcWAs,2743,3767,507-185-1342-1020,29.97,1920,1080,train
DfSnNtAcWAs,3838,4095,618-286-1314-982,29.97,1920,1080,train
DfSnNtAcWAs,4232,4472,615-294-1300-979,29.97,1920,1080,train
DfSnNtAcWAs,5019,5475,723-251-1460-988,29.97,1920,1080,train
DfSnNtAcWAs,5682,5972,704-328-1380-1004,29.97,1920,1080,train
DfSnNtAcWAs,6199,6603,462-127-1328-993,29.97,1920,1080,train
DfSnNtAcWAs,6804,6970,700-329-1355-984,29.97,1920,1080,train
DfSnNtAcWAs,6980,7343,675-290-1374-989,29.97,1920,1080,train
DfSnNtAcWAs,7507,7635,495-325-1208-1038,29.97,1920,1080,train
DfSnNtAcWAs,8344,8515,625-257-1370-1002,29.97,1920,1080,train
DfSnNtAcWAs,9199,9532,284-111-1185-1012,29.97,1920,1080,train
DfSnNtAcWAs,10074,10624,321-156-1193-1028,29.97,1920,1080,train
DfSnNtAcWAs,10773,10917,423-315-1113-1005,29.97,1920,1080,train
DfSnNtAcWAs,11692,11864,529-346-1235-1052,29.97,1920,1080,train
DfSnNtAcWAs,12084,12234,458-358-1116-1016,29.97,1920,1080,train
DfSnNtAcWAs,12272,12416,352-336-1034-1018,29.97,1920,1080,train
DfSnNtAcWAs,12499,12692,493-265-1254-1026,29.97,1920,1080,train
DfSnNtAcWAs,12728,12906,390-313-1097-1020,29.97,1920,1080,train
DfSnNtAcWAs,13001,13131,365-324-1040-999,29.97,1920,1080,train
DfSnNtAcWAs,13332,13508,385-216-1216-1047,29.97,1920,1080,train
DfSnNtAcWAs,14200,14383,700-313-1423-1036,29.97,1920,1080,train
DfSnNtAcWAs,14429,14558,464-158-1317-1011,29.97,1920,1080,train
DfSnNtAcWAs,14658,14844,578-299-1303-1024,29.97,1920,1080,train
DfSnNtAcWAs,15250,15769,623-272-1386-1035,29.97,1920,1080,train
DfSnNtAcWAs,15892,16447,552-133-1455-1036,29.97,1920,1080,train
DfSnNtAcWAs,16981,17343,470-94-1389-1013,29.97,1920,1080,train
DfSnNtAcWAs,17370,17527,744-254-1493-1003,29.97,1920,1080,train
DfSnNtAcWAs,17631,17811,603-273-1390-1060,29.97,1920,1080,train
DfSnNtAcWAs,18096,18263,305-221-1150-1066,29.97,1920,1080,train
DfSnNtAcWAs,18546,18683,366-262-1154-1050,29.97,1920,1080,train
DfSnNtAcWAs,19403,19627,471-257-1242-1028,29.97,1920,1080,train
DfSnNtAcWAs,19733,20059,626-231-1424-1029,29.97,1920,1080,train
DfSnNtAcWAs,20333,20603,623-215-1427-1019,29.97,1920,1080,train
DfSnNtAcWAs,20603,20939,594-175-1438-1019,29.97,1920,1080,train
DfSnNtAcWAs,21010,21665,423-236-1196-1009,29.97,1920,1080,train
EDGjhmIMCnw,561,693,181-38-823-680,29.97,1280,720,train
EDGjhmIMCnw,1349,1647,401-73-1009-681,29.97,1280,720,train
EDGjhmIMCnw,1956,2120,499-81-1064-646,29.97,1280,720,train
EDGjhmIMCnw,2241,2535,416-106-986-676,29.97,1280,720,train
EDGjhmIMCnw,2848,3066,319-106-874-661,29.97,1280,720,train
EDGjhmIMCnw,3180,3330,387-102-948-663,29.97,1280,720,train
EDGjhmIMCnw,3397,3614,389-66-1004-681,29.97,1280,720,train
EDGjhmIMCnw,3831,3982,571-68-1182-679,29.97,1280,720,train
EDGjhmIMCnw,4092,4223,311-49-938-676,29.97,1280,720,train
EDGjhmIMCnw,5034,5228,338-88-933-683,29.97,1280,720,train
EDGjhmIMCnw,5400,5542,426-134-983-691,29.97,1280,720,train
EDGjhmIMCnw,6330,6497,342-132-897-687,29.97,1280,720,train
OiblkvkAHWM,2280,2440,256-118-832-694,25.0,1280,720,test
OiblkvkAHWM,2575,2763,385-63-1018-696,25.0,1280,720,test
OiblkvkAHWM,3461,3616,315-81-935-701,25.0,1280,720,test
OiblkvkAHWM,3931,4079,281-124-846-689,25.0,1280,720,test
OiblkvkAHWM,4079,4212,350-33-1017-700,25.0,1280,720,test
OiblkvkAHWM,4695,4957,242-80-860-698,25.0,1280,720,test
OiblkvkAHWM,5484,5794,316-123-903-710,25.0,1280,720,test
OiblkvkAHWM,5980,6116,256-112-852-708,25.0,1280,720,test
OiblkvkAHWM,6251,6533,263-10-969-716,25.0,1280,720,test
OiblkvkAHWM,7654,8070,274-16-965-707,25.0,1280,720,test
OiblkvkAHWM,8617,8768,597-34-1273-710,25.0,1280,720,test
OiblkvkAHWM,10080,10217,205-30-877-702,25.0,1280,720,test
OiblkvkAHWM,10498,10640,305-60-955-710,25.0,1280,720,test
OiblkvkAHWM,11052,11181,244-65-881-702,25.0,1280,720,test
OiblkvkAHWM,14186,14331,247-38-917-708,25.0,1280,720,test
OiblkvkAHWM,14331,14459,264-5-977-718,25.0,1280,720,test
kfMckLkZz-4,249,430,182-42-604-464,29.97,640,480,train
kfMckLkZz-4,668,816,22-50-398-426,29.97,640,480,train
kfMckLkZz-4,2935,3128,86-27-528-469,29.97,640,480,train
kfMckLkZz-4,4062,4284,204-93-562-451,29.97,640,480,train
kfMckLkZz-4,4402,4580,230-80-609-459,29.97,640,480,train
XM-YfeodJq4,909,1087,492-37-1458-1003,29.97,1920,1080,train
XM-YfeodJq4,1309,1500,405-1-1474-1070,29.97,1920,1080,train
XM-YfeodJq4,4932,5073,641-4-1569-932,29.97,1920,1080,train
-kJzyrIM1cg,225,1249,436-135-1332-1031,25.0,1920,1080,train
-kJzyrIM1cg,1249,2273,518-135-1423-1040,25.0,1920,1080,train
-kJzyrIM1cg,2273,3297,557-144-1449-1036,25.0,1920,1080,train
-kJzyrIM1cg,3297,3552,533-135-1411-1013,25.0,1920,1080,train
-kJzyrIM1cg,3552,4063,534-130-1459-1055,25.0,1920,1080,train
-kJzyrIM1cg,4063,5087,620-130-1519-1029,25.0,1920,1080,train
-kJzyrIM1cg,5087,5345,574-155-1458-1039,25.0,1920,1080,train
-kJzyrIM1cg,5594,5861,504-107-1404-1007,25.0,1920,1080,train
-kJzyrIM1cg,6067,6227,581-178-1436-1033,25.0,1920,1080,train
-kJzyrIM1cg,6227,6569,532-137-1399-1004,25.0,1920,1080,train
-kJzyrIM1cg,6569,6814,684-172-1494-982,25.0,1920,1080,train
-kJzyrIM1cg,6912,7218,562-171-1385-994,25.0,1920,1080,train
-kJzyrIM1cg,7363,7547,555-159-1410-1014,25.0,1920,1080,train
-kJzyrIM1cg,7740,7920,496-133-1366-1003,25.0,1920,1080,train
-kJzyrIM1cg,7980,8110,492-134-1387-1029,25.0,1920,1080,train
-kJzyrIM1cg,8345,8658,502-108-1414-1020,25.0,1920,1080,train
-kJzyrIM1cg,8658,8968,351-65-1288-1002,25.0,1920,1080,train
-kJzyrIM1cg,8968,9113,370-105-1302-1037,25.0,1920,1080,train
-kJzyrIM1cg,9132,9313,501-117-1460-1076,25.0,1920,1080,train
-kJzyrIM1cg,9317,9474,572-194-1414-1036,25.0,1920,1080,train
-kJzyrIM1cg,9474,9628,527-153-1358-984,25.0,1920,1080,train
-kJzyrIM1cg,9878,10478,498-171-1326-999,25.0,1920,1080,train
-kJzyrIM1cg,10527,10752,475-85-1390-1000,25.0,1920,1080,train
-kJzyrIM1cg,10789,10970,479-126-1362-1009,25.0,1920,1080,train
-kJzyrIM1cg,10971,11124,601-216-1386-1001,25.0,1920,1080,train
-kJzyrIM1cg,11282,11482,616-172-1358-914,25.0,1920,1080,train
-kJzyrIM1cg,11557,11729,271-162-1089-980,25.0,1920,1080,train
-kJzyrIM1cg,11729,11935,560-193-1332-965,25.0,1920,1080,train
-kJzyrIM1cg,11935,12166,569-185-1386-1002,25.0,1920,1080,train
-kJzyrIM1cg,12318,12662,401-131-1311-1041,25.0,1920,1080,train
-kJzyrIM1cg,12809,13094,495-138-1371-1014,25.0,1920,1080,train
-kJzyrIM1cg,13350,13779,535-111-1445-1021,25.0,1920,1080,train
-kJzyrIM1cg,14036,15060,446-122-1403-1079,25.0,1920,1080,train
-kJzyrIM1cg,15133,15308,548-140-1405-997,25.0,1920,1080,train
-kJzyrIM1cg,15308,15450,537-185-1391-1039,25.0,1920,1080,train
-kJzyrIM1cg,15599,16197,466-117-1373-1024,25.0,1920,1080,train
-kJzyrIM1cg,16197,16435,510-172-1404-1066,25.0,1920,1080,train
-kJzyrIM1cg,16471,16659,585-174-1486-1075,25.0,1920,1080,train
-kJzyrIM1cg,16659,17683,412-175-1279-1042,25.0,1920,1080,train
-kJzyrIM1cg,17703,17993,484-126-1352-994,25.0,1920,1080,train
-kJzyrIM1cg,18055,19079,415-68-1399-1052,25.0,1920,1080,train
-kJzyrIM1cg,19105,19403,502-178-1387-1063,25.0,1920,1080,train
-kJzyrIM1cg,19417,19617,705-128-1656-1079,25.0,1920,1080,train
-kJzyrIM1cg,19846,20335,625-169-1501-1045,25.0,1920,1080,train
-kJzyrIM1cg,20963,21092,786-208-1461-883,25.0,1920,1080,train
0EBa26jUU1g,5,142,137-91-460-414,30.0,640,480,train
0EBa26jUU1g,142,535,129-105-454-430,30.0,640,480,train
0EBa26jUU1g,1233,1386,97-127-406-436,30.0,640,480,train
YVgja2MPa1U,0,406,371-119-1250-998,25.0,1920,1080,train
YVgja2MPa1U,414,556,520-207-1308-995,25.0,1920,1080,train
YVgja2MPa1U,748,948,412-122-1347-1057,25.0,1920,1080,train
YVgja2MPa1U,2280,2470,532-189-1399-1056,25.0,1920,1080,train
YVgja2MPa1U,2795,2940,613-249-1385-1021,25.0,1920,1080,train
YVgja2MPa1U,3524,3686,626-265-1432-1071,25.0,1920,1080,train
YVgja2MPa1U,5360,5588,446-45-1469-1068,25.0,1920,1080,train
YVgja2MPa1U,8115,8253,431-203-1294-1066,25.0,1920,1080,train
YVgja2MPa1U,8315,8576,330-118-1280-1068,25.0,1920,1080,train
PvjYVsRK4Dg,2334,2475,91-32-528-469,29.97,640,480,train
PvjYVsRK4Dg,8180,8558,80-32-516-468,29.97,640,480,train
PvjYVsRK4Dg,8559,8768,61-41-488-468,29.97,640,480,train
PvjYVsRK4Dg,8800,9045,62-41-487-466,29.97,640,480,train
PvjYVsRK4Dg,9096,9440,59-43-489-473,29.97,640,480,train
PvjYVsRK4Dg,9451,9738,63-44-480-461,29.97,640,480,train
PvjYVsRK4Dg,9756,10191,90-31-530-471,29.97,640,480,train
JoFxJXTe2IM,1167,1349,131-62-483-414,30.0,640,480,train
JoFxJXTe2IM,1367,1588,143-71-487-415,30.0,640,480,train
JoFxJXTe2IM,1615,1807,139-52-533-446,30.0,640,480,train
JoFxJXTe2IM,1821,2164,131-60-496-425,30.0,640,480,train
JoFxJXTe2IM,2313,2665,162-82-490-410,30.0,640,480,train
JoFxJXTe2IM,2665,2836,161-78-501-418,30.0,640,480,train
JoFxJXTe2IM,2902,3073,149-97-491-439,30.0,640,480,train
JoFxJXTe2IM,3073,3511,156-81-501-426,30.0,640,480,train
JoFxJXTe2IM,3551,3832,98-72-457-431,30.0,640,480,train
JoFxJXTe2IM,3832,3973,147-54-511-418,30.0,640,480,train
JoFxJXTe2IM,4120,4791,116-55-481-420,30.0,640,480,train
JoFxJXTe2IM,5668,5839,114-111-419-416,30.0,640,480,train
JoFxJXTe2IM,6019,6170,145-81-466-402,30.0,640,480,train
JoFxJXTe2IM,7003,7161,153-74-495-416,30.0,640,480,train
JoFxJXTe2IM,7161,7331,135-54-496-415,30.0,640,480,train
JoFxJXTe2IM,7990,8253,128-75-462-409,30.0,640,480,train
JoFxJXTe2IM,8426,8579,161-86-472-397,30.0,640,480,train
JoFxJXTe2IM,8734,8871,146-90-472-416,30.0,640,480,train
JoFxJXTe2IM,9077,9362,179-87-497-405,30.0,640,480,train
JoFxJXTe2IM,9410,9698,172-66-522-416,30.0,640,480,train
JoFxJXTe2IM,9830,9994,184-92-497-405,30.0,640,480,train
JoFxJXTe2IM,10574,10759,214-63-566-415,30.0,640,480,train
JoFxJXTe2IM,11127,11343,130-82-467-419,30.0,640,480,train
JoFxJXTe2IM,11511,11644,239-99-531-391,30.0,640,480,train
JoFxJXTe2IM,11893,12027,179-89-501-411,30.0,640,480,train
JoFxJXTe2IM,12121,12273,203-140-488-425,30.0,640,480,train
JoFxJXTe2IM,12412,12582,152-104-453-405,30.0,640,480,train
SdT1S9ZL4L4,1920,2199,247-50-605-408,29.97,854,480,train
SdT1S9ZL4L4,4818,4971,246-26-601-381,29.97,854,480,train
SdT1S9ZL4L4,5544,5681,261-10-640-389,29.97,854,480,train
SdT1S9ZL4L4,6613,6751,241-32-569-360,29.97,854,480,train
J4WBg84_30s,5,427,310-62-923-675,25.0,1280,720,train
J4WBg84_30s,427,638,415-86-1040-711,25.0,1280,720,train
TWZGnwNe2jY,920,1078,539-67-1527-1055,29.97,1920,1080,train
wKkuvbzNt5U,183,477,318-275-699-656,25.0,960,720,train
wKkuvbzNt5U,514,665,305-299-682-676,25.0,960,720,train
wKkuvbzNt5U,1114,1245,267-290-676-699,25.0,960,720,train
wKkuvbzNt5U,4462,4848,243-293-662-712,25.0,960,720,train
wKkuvbzNt5U,4919,5290,203-269-646-712,25.0,960,720,train
VidZQ6yA7I4,201,336,820-97-1315-592,29.97,1920,1080,train
VidZQ6yA7I4,660,802,704-125-1186-607,29.97,1920,1080,train
VidZQ6yA7I4,835,1014,810-138-1261-589,29.97,1920,1080,train
VidZQ6yA7I4,1647,1775,990-127-1450-587,29.97,1920,1080,train
VidZQ6yA7I4,1845,1985,1013-109-1523-619,29.97,1920,1080,train
VidZQ6yA7I4,2167,2336,670-125-1183-638,29.97,1920,1080,train
VidZQ6yA7I4,2807,2991,505-137-989-621,29.97,1920,1080,train
VidZQ6yA7I4,4054,4846,955-0-1776-820,29.97,1920,1080,train
VidZQ6yA7I4,5086,5478,525-0-1180-655,29.97,1920,1080,train
VidZQ6yA7I4,5537,5666,778-109-1323-654,29.97,1920,1080,train
VidZQ6yA7I4,5848,5978,832-98-1366-632,29.97,1920,1080,train
VidZQ6yA7I4,6617,6750,342-104-867-629,29.97,1920,1080,train
VidZQ6yA7I4,6750,6888,464-112-988-636,29.97,1920,1080,train
B2zZOiUBzZc,1201,2225,546-148-1387-989,25.0,1920,1080,train
B2zZOiUBzZc,2225,2517,661-282-1325-946,25.0,1920,1080,train
B2zZOiUBzZc,2779,3006,635-217-1372-954,25.0,1920,1080,train
B2zZOiUBzZc,3066,3355,731-189-1542-1000,25.0,1920,1080,train
B2zZOiUBzZc,3420,3651,490-181-1278-969,25.0,1920,1080,train
B2zZOiUBzZc,4284,4439,341-281-996-936,25.0,1920,1080,train
B2zZOiUBzZc,4512,4653,407-247-1077-917,25.0,1920,1080,train
B2zZOiUBzZc,4653,4933,432-213-1138-919,25.0,1920,1080,train
B2zZOiUBzZc,5297,5666,629-188-1432-991,25.0,1920,1080,train
B2zZOiUBzZc,5963,6091,675-268-1328-921,25.0,1920,1080,train
B2zZOiUBzZc,6285,6465,461-270-1120-929,25.0,1920,1080,train
B2zZOiUBzZc,6509,6720,295-290-904-899,25.0,1920,1080,train
B2zZOiUBzZc,6824,7014,604-262-1235-893,25.0,1920,1080,train
B2zZOiUBzZc,7097,7262,631-232-1297-898,25.0,1920,1080,train
B2zZOiUBzZc,9388,9725,676-141-1551-1016,25.0,1920,1080,train
B2zZOiUBzZc,9725,9859,565-203-1333-971,25.0,1920,1080,train
B2zZOiUBzZc,10570,10964,547-265-1237-955,25.0,1920,1080,train
B2zZOiUBzZc,11387,11745,695-250-1408-963,25.0,1920,1080,train
B2zZOiUBzZc,11826,11963,539-238-1278-977,25.0,1920,1080,train
B2zZOiUBzZc,11963,12094,707-308-1375-976,25.0,1920,1080,train
B2zZOiUBzZc,12626,13564,691-52-1641-1002,25.0,1920,1080,train
B2zZOiUBzZc,13781,13940,450-177-891-618,25.0,1920,1080,train
1cHighu8eCo,18,253,121-81-492-452,29.97,640,480,train
1cHighu8eCo,407,973,133-68-519-454,29.97,640,480,train
1cHighu8eCo,1124,1338,151-92-491-432,29.97,640,480,train
1cHighu8eCo,2037,2201,235-103-555-423,29.97,640,480,train
1cHighu8eCo,2472,2757,205-77-548-420,29.97,640,480,train
1cHighu8eCo,3111,3283,146-77-476-407,29.97,640,480,train
1cHighu8eCo,3611,3808,100-92-428-420,29.97,640,480,train
1cHighu8eCo,4953,5197,111-13-570-472,29.97,640,480,train
1cHighu8eCo,5619,5802,153-77-532-456,29.97,640,480,train
1cHighu8eCo,7079,7346,89-48-442-401,29.97,640,480,train
1cHighu8eCo,7394,7587,146-74-500-428,29.97,640,480,train
1cHighu8eCo,8082,8345,137-88-481-432,29.97,640,480,train
1cHighu8eCo,8928,9137,221-88-562-429,29.97,640,480,train
1cHighu8eCo,10401,10703,238-104-554-420,29.97,640,480,train
1cHighu8eCo,11779,11995,129-73-503-447,29.97,640,480,train
oTmbnz-bRE0,109,942,344-151-787-594,29.97,1280,720,train
oTmbnz-bRE0,1037,1207,290-164-719-593,29.97,1280,720,train
oTmbnz-bRE0,1357,1526,496-210-875-589,29.97,1280,720,train
oTmbnz-bRE0,1760,1922,371-203-746-578,29.97,1280,720,train
oTmbnz-bRE0,1942,2082,448-169-845-566,29.97,1280,720,train
oTmbnz-bRE0,2397,2642,248-168-666-586,29.97,1280,720,train
oTmbnz-bRE0,2758,3011,370-212-741-583,29.97,1280,720,train
oTmbnz-bRE0,3450,3631,429-200-826-597,29.97,1280,720,train
oTmbnz-bRE0,3862,4088,285-173-726-614,29.97,1280,720,train
oTmbnz-bRE0,4243,4384,441-191-857-607,29.97,1280,720,train
oTmbnz-bRE0,4897,5077,278-211-711-644,29.97,1280,720,train
oTmbnz-bRE0,5341,5498,160-181-623-644,29.97,1280,720,train
oTmbnz-bRE0,5666,5820,320-213-754-647,29.97,1280,720,train
oTmbnz-bRE0,6238,6408,302-151-749-598,29.97,1280,720,train
oTmbnz-bRE0,6879,7047,485-175-887-577,29.97,1280,720,train
oTmbnz-bRE0,7061,7229,523-131-983-591,29.97,1280,720,train
oTmbnz-bRE0,8022,8321,292-146-765-619,29.97,1280,720,train
oTmbnz-bRE0,8462,8656,385-184-811-610,29.97,1280,720,train
oTmbnz-bRE0,8656,8877,283-163-737-617,29.97,1280,720,train
oTmbnz-bRE0,9161,9432,385-214-784-613,29.97,1280,720,train
oTmbnz-bRE0,9567,9732,204-189-653-638,29.97,1280,720,train
oTmbnz-bRE0,9806,9956,316-230-747-661,29.97,1280,720,train
oTmbnz-bRE0,9956,10106,370-210-792-632,29.97,1280,720,train
oTmbnz-bRE0,10797,10962,244-145-720-621,29.97,1280,720,train
oTmbnz-bRE0,11147,11276,440-166-892-618,29.97,1280,720,train
oTmbnz-bRE0,11427,11657,290-209-702-621,29.97,1280,720,train
oTmbnz-bRE0,11960,12117,208-163-703-658,29.97,1280,720,train
oTmbnz-bRE0,12637,12858,391-125-905-639,29.97,1280,720,train
oTmbnz-bRE0,12972,13128,149-153-658-662,29.97,1280,720,train
oTmbnz-bRE0,13160,13326,416-165-869-618,29.97,1280,720,train
oTmbnz-bRE0,13328,13691,356-162-808-614,29.97,1280,720,train
oTmbnz-bRE0,13691,14002,369-161-844-636,29.97,1280,720,train
oTmbnz-bRE0,14019,14331,287-83-835-631,29.97,1280,720,train
wPTaGTzwRDI,82,884,128-72-450-394,25.0,640,480,train
wPTaGTzwRDI,884,1052,100-114-389-403,25.0,640,480,train
wPTaGTzwRDI,1052,1399,115-99-418-402,25.0,640,480,train
wPTaGTzwRDI,1399,1583,92-111-383-402,25.0,640,480,train
wPTaGTzwRDI,2078,2418,91-110-383-402,25.0,640,480,train
wPTaGTzwRDI,2504,2670,159-83-475-399,25.0,640,480,train
wPTaGTzwRDI,2670,3335,140-67-475-402,25.0,640,480,train
wPTaGTzwRDI,3335,3904,212-105-509-402,25.0,640,480,train
wPTaGTzwRDI,4476,4872,208-99-515-406,25.0,640,480,train
wPTaGTzwRDI,4976,5251,110-71-434-395,25.0,640,480,train
hYZDOpHYgLM,5477,5667,235-233-981-979,29.97,1920,1080,train
hYZDOpHYgLM,6080,6230,644-274-1337-967,29.97,1920,1080,train
hYZDOpHYgLM,7337,7502,374-237-1132-995,29.97,1920,1080,train
hYZDOpHYgLM,7827,8062,297-290-960-953,29.97,1920,1080,train
LstLDRUBAp4,0,135,423-35-1380-992,25.0,1920,1080,train
LstLDRUBAp4,270,593,460-30-1471-1041,25.0,1920,1080,train
LstLDRUBAp4,675,810,494-8-1509-1023,25.0,1920,1080,train
LstLDRUBAp4,2295,2430,444-16-1463-1035,25.0,1920,1080,train
LstLDRUBAp4,2430,2565,491-146-1380-1035,25.0,1920,1080,train
LstLDRUBAp4,2596,2726,613-256-1287-930,25.0,1920,1080,train
_cIRyxE3Kf8,1983,2675,111-50-515-454,25.0,640,480,train
_cIRyxE3Kf8,2970,3293,115-5-562-452,25.0,640,480,train
_cIRyxE3Kf8,4056,4216,46-7-504-465,25.0,640,480,train
_cIRyxE3Kf8,4946,5763,144-37-550-443,25.0,640,480,train
_cIRyxE3Kf8,5763,5999,89-52-498-461,25.0,640,480,train
knidf7i-J3Y,95,323,317-139-824-646,29.97,1280,720,train
knidf7i-J3Y,534,1558,215-1-879-665,29.97,1280,720,train
knidf7i-J3Y,2217,2434,300-157-779-636,29.97,1280,720,train
knidf7i-J3Y,2531,2714,277-150-765-638,29.97,1280,720,train
knidf7i-J3Y,2743,2975,388-225-805-642,29.97,1280,720,train
knidf7i-J3Y,3181,3506,402-182-858-638,29.97,1280,720,train
knidf7i-J3Y,3600,3750,273-162-759-648,29.97,1280,720,train
knidf7i-J3Y,3766,3995,284-150-760-626,29.97,1280,720,train
knidf7i-J3Y,3995,4485,283-166-768-651,29.97,1280,720,train
knidf7i-J3Y,4635,4877,321-147-814-640,29.97,1280,720,train
knidf7i-J3Y,4951,5132,312-215-753-656,29.97,1280,720,train
knidf7i-J3Y,5132,5370,324-193-764-633,29.97,1280,720,train
knidf7i-J3Y,5650,6000,268-25-883-640,29.97,1280,720,train
svFggnyI4d8,293,481,1027-268-1829-1070,29.97,1920,1080,train
svFggnyI4d8,843,1018,1104-237-1916-1049,29.97,1920,1080,train
svFggnyI4d8,1379,1541,867-132-1652-917,29.97,1920,1080,train
svFggnyI4d8,3752,3919,604-205-1424-1025,29.97,1920,1080,train
svFggnyI4d8,5259,5425,733-184-1588-1039,29.97,1920,1080,train
svFggnyI4d8,6260,6412,812-282-1575-1045,29.97,1920,1080,train
svFggnyI4d8,7079,7279,459-120-1336-997,29.97,1920,1080,train
0mpd65lmphU,0,163,330-220-607-497,25.0,1280,720,train
0mpd65lmphU,0,299,918-216-1214-512,25.0,1280,720,train
0mpd65lmphU,353,535,905-230-1166-491,25.0,1280,720,train
0mpd65lmphU,1163,1698,913-219-1184-490,25.0,1280,720,train
0mpd65lmphU,1799,2003,353-204-637-488,25.0,1280,720,train
0mpd65lmphU,1932,2262,919-226-1184-491,25.0,1280,720,train
0mpd65lmphU,2459,2661,244-208-524-488,25.0,1280,720,train
0mpd65lmphU,2315,2672,829-224-1108-503,25.0,1280,720,train
0mpd65lmphU,2807,3111,707-210-1001-504,25.0,1280,720,train
0mpd65lmphU,3180,3433,143-223-416-496,25.0,1280,720,train
0mpd65lmphU,3433,3608,163-208-448-493,25.0,1280,720,train
0mpd65lmphU,3176,3745,666-226-964-524,25.0,1280,720,train
0mpd65lmphU,3745,4129,689-212-994-517,25.0,1280,720,train
0mpd65lmphU,3825,4216,115-199-420-504,25.0,1280,720,train
0mpd65lmphU,4140,4436,710-228-993-511,25.0,1280,720,train
YoABR3mDsIg,1160,1315,355-156-865-666,29.97,1280,720,train
YoABR3mDsIg,1413,1903,379-183-863-667,29.97,1280,720,train
YoABR3mDsIg,1979,2139,439-199-910-670,29.97,1280,720,train
YoABR3mDsIg,2220,2433,423-214-872-663,29.97,1280,720,train
YoABR3mDsIg,2810,2999,491-183-949-641,29.97,1280,720,train
YoABR3mDsIg,3080,3250,475-189-929-643,29.97,1280,720,train
YoABR3mDsIg,9740,9873,357-169-853-665,29.97,1280,720,train
YoABR3mDsIg,9948,10085,354-195-827-668,29.97,1280,720,train
YoABR3mDsIg,10085,10331,250-192-723-665,29.97,1280,720,train
YoABR3mDsIg,10578,10714,257-212-744-699,29.97,1280,720,train
YoABR3mDsIg,10714,10893,218-189-727-698,29.97,1280,720,train
YoABR3mDsIg,11261,11456,176-182-705-711,29.97,1280,720,train
YoABR3mDsIg,11551,11740,208-166-744-702,29.97,1280,720,train
8eflkNicY-E,945,1125,431-110-961-640,25.0,1280,720,train
8eflkNicY-E,2011,2153,415-169-915-669,25.0,1280,720,train
8eflkNicY-E,2398,2580,367-131-868-632,25.0,1280,720,train
8eflkNicY-E,2713,2843,319-142-858-681,25.0,1280,720,train
8eflkNicY-E,3587,3734,264-122-815-673,25.0,1280,720,train
EswKOjV3isk,427,1451,117-36-542-461,29.97,640,480,train
EswKOjV3isk,1451,2475,127-59-522-454,29.97,640,480,train
EswKOjV3isk,2475,3499,131-64-521-454,29.97,640,480,train
EswKOjV3isk,3499,3900,131-66-517-452,29.97,640,480,train
EswKOjV3isk,3900,4924,132-67-517-452,29.97,640,480,train
EswKOjV3isk,4924,5948,130-63-521-454,29.97,640,480,train
EswKOjV3isk,5948,6972,130-64-520-454,29.97,640,480,train
EswKOjV3isk,6972,7996,128-61-520-453,29.97,640,480,train
EswKOjV3isk,7996,8832,125-58-522-455,29.97,640,480,train
EswKOjV3isk,8832,8960,122-37-544-459,29.97,640,480,train
uggNT3QkTYQ,0,180,310-299-605-594,15.0,960,720,train
uggNT3QkTYQ,1235,1372,292-243-683-634,15.0,960,720,train
uggNT3QkTYQ,1386,1536,301-211-743-653,15.0,960,720,train
uggNT3QkTYQ,2779,2925,314-112-883-681,15.0,960,720,train
zBJADM80dPQ,420,992,447-127-935-615,29.97,1280,720,train
zBJADM80dPQ,1906,2109,578-60-1180-662,29.97,1280,720,train
zBJADM80dPQ,3184,3336,352-148-875-671,29.97,1280,720,train
zBJADM80dPQ,3393,3711,126-29-732-635,29.97,1280,720,train
AN62b1UpmcE,342,737,372-186-758-572,25.0,1280,720,train
AN62b1UpmcE,737,883,383-245-725-587,25.0,1280,720,train
AN62b1UpmcE,883,1209,367-227-731-591,25.0,1280,720,train
AN62b1UpmcE,1214,1406,352-210-744-602,25.0,1280,720,train
AN62b1UpmcE,1406,1736,321-211-736-626,25.0,1280,720,train
AN62b1UpmcE,3445,3584,22-10-667-655,25.0,1280,720,train
UU9-XEvF5X4,214,514,350-166-881-697,30.0,1280,720,train
UU9-XEvF5X4,514,1059,371-137-938-704,30.0,1280,720,train
UU9-XEvF5X4,1060,1252,378-159-922-703,30.0,1280,720,train
UU9-XEvF5X4,1252,1498,365-128-938-701,30.0,1280,720,train
UU9-XEvF5X4,1499,2353,376-158-922-704,30.0,1280,720,train
UU9-XEvF5X4,2370,3240,275-52-941-718,30.0,1280,720,train
UU9-XEvF5X4,3811,4835,307-3-1010-706,30.0,1280,720,train
UU9-XEvF5X4,4924,5948,301-31-984-714,30.0,1280,720,train
UU9-XEvF5X4,6144,7168,254-90-881-717,30.0,1280,720,train
UU9-XEvF5X4,7168,8018,340-183-858-701,30.0,1280,720,train
UU9-XEvF5X4,14225,15249,343-156-906-719,30.0,1280,720,train
UU9-XEvF5X4,15249,15422,335-154-891-710,30.0,1280,720,train
UU9-XEvF5X4,16589,16717,314-108-918-712,30.0,1280,720,train
UU9-XEvF5X4,19207,19770,367-161-903-697,30.0,1280,720,train
UU9-XEvF5X4,21551,22575,308-21-975-688,30.0,1280,720,train
UU9-XEvF5X4,22580,23082,382-121-934-673,30.0,1280,720,train
UU9-XEvF5X4,23082,23377,338-158-881-701,30.0,1280,720,train
UU9-XEvF5X4,23377,24401,392-131-954-693,30.0,1280,720,train
UU9-XEvF5X4,24401,24680,397-170-884-657,30.0,1280,720,train
UU9-XEvF5X4,24765,25094,426-133-960-667,30.0,1280,720,train
UU9-XEvF5X4,25094,26118,407-137-964-694,30.0,1280,720,train
UU9-XEvF5X4,26118,27142,389-139-941-691,30.0,1280,720,train
UU9-XEvF5X4,27290,27965,340-80-952-692,30.0,1280,720,train
UU9-XEvF5X4,27965,28305,250-36-920-706,30.0,1280,720,train
UU9-XEvF5X4,29032,29256,281-106-871-696,30.0,1280,720,train
UU9-XEvF5X4,29265,29501,319-114-891-686,30.0,1280,720,train
UU9-XEvF5X4,29501,30026,334-90-932-688,30.0,1280,720,train
UU9-XEvF5X4,30466,30699,282-8-990-716,30.0,1280,720,train
UU9-XEvF5X4,30755,30925,279-3-993-717,30.0,1280,720,train
UU9-XEvF5X4,31271,31490,267-39-920-692,30.0,1280,720,train
UU9-XEvF5X4,31580,32098,289-63-923-697,30.0,1280,720,train
UU9-XEvF5X4,32098,33122,259-22-947-710,30.0,1280,720,train
UU9-XEvF5X4,33296,33465,279-128-852-701,30.0,1280,720,train
UU9-XEvF5X4,33501,33697,275-121-855-701,30.0,1280,720,train
UU9-XEvF5X4,34758,34954,296-43-957-704,30.0,1280,720,train
UU9-XEvF5X4,35111,35246,292-58-945-711,30.0,1280,720,train
UU9-XEvF5X4,35545,35783,271-34-953-716,30.0,1280,720,train
UU9-XEvF5X4,35899,36032,376-151-918-693,30.0,1280,720,train
UU9-XEvF5X4,36273,36476,406-152-964-710,30.0,1280,720,train
UU9-XEvF5X4,38680,39383,369-146-903-680,30.0,1280,720,train
UU9-XEvF5X4,39383,40407,364-111-931-678,30.0,1280,720,train
UU9-XEvF5X4,40407,40939,358-122-918-682,30.0,1280,720,train
UU9-XEvF5X4,49635,49824,263-3-930-670,30.0,1280,720,train
UU9-XEvF5X4,52401,52598,484-104-1042-662,30.0,1280,720,train
UU9-XEvF5X4,52983,53208,336-112-899-675,30.0,1280,720,train
UU9-XEvF5X4,53475,53890,364-100-983-719,30.0,1280,720,train
UU9-XEvF5X4,54205,54334,69-128-649-708,30.0,1280,720,train
UU9-XEvF5X4,54522,54706,311-75-949-713,30.0,1280,720,train
UU9-XEvF5X4,55529,55665,379-27-1060-708,30.0,1280,720,train
UU9-XEvF5X4,57251,57789,398-45-1069-716,30.0,1280,720,train
UU9-XEvF5X4,58567,58816,105-59-753-707,30.0,1280,720,train
UU9-XEvF5X4,60005,60201,25-18-714-707,30.0,1280,720,train
UU9-XEvF5X4,61363,62161,511-16-1175-680,30.0,1280,720,train
UU9-XEvF5X4,62431,62894,679-93-1242-656,30.0,1280,720,train
UU9-XEvF5X4,63139,63682,308-83-943-718,30.0,1280,720,train
UU9-XEvF5X4,63714,64162,351-11-1042-702,30.0,1280,720,train
UU9-XEvF5X4,64185,64513,418-10-1126-718,30.0,1280,720,train
UU9-XEvF5X4,64751,65404,248-101-819-672,30.0,1280,720,train
UU9-XEvF5X4,67077,67236,621-81-1235-695,30.0,1280,720,train
UU9-XEvF5X4,67265,67395,370-95-993-718,30.0,1280,720,train
UU9-XEvF5X4,69598,69942,471-126-962-617,30.0,1280,720,train
UU9-XEvF5X4,70047,70298,430-129-976-675,30.0,1280,720,train
UU9-XEvF5X4,70450,70602,472-120-1050-698,30.0,1280,720,train
UU9-XEvF5X4,70666,71075,371-107-964-700,30.0,1280,720,train
UU9-XEvF5X4,71344,71656,303-62-953-712,30.0,1280,720,train
UU9-XEvF5X4,72135,72283,478-87-1105-714,30.0,1280,720,train
UU9-XEvF5X4,72413,72553,597-68-1228-699,30.0,1280,720,train
UU9-XEvF5X4,72848,73155,560-4-1267-711,30.0,1280,720,train
UU9-XEvF5X4,74833,74996,421-106-1028-713,30.0,1280,720,train
UU9-XEvF5X4,76104,76503,316-77-957-718,30.0,1280,720,train
UU9-XEvF5X4,76689,77143,460-88-1088-716,30.0,1280,720,train
UU9-XEvF5X4,77370,77627,355-58-1008-711,30.0,1280,720,train
UU9-XEvF5X4,77721,78156,201-0-919-718,30.0,1280,720,train
Y6DtgVbcD90,180,512,466-170-1308-1012,30.0,1920,1080,train
Y6DtgVbcD90,2644,2880,449-168-1331-1050,30.0,1920,1080,train
Y6DtgVbcD90,8003,8160,408-71-1324-987,30.0,1920,1080,train
niFUaaCwYag,706,1500,391-171-1288-1068,29.97,1920,1080,train
niFUaaCwYag,1500,1660,511-259-1281-1029,29.97,1920,1080,train
niFUaaCwYag,1882,2162,461-220-1297-1056,29.97,1920,1080,train
niFUaaCwYag,2162,2451,458-177-1338-1057,29.97,1920,1080,train
niFUaaCwYag,2549,2880,649-254-1459-1064,29.97,1920,1080,train
niFUaaCwYag,3010,3198,662-254-1487-1079,29.97,1920,1080,train
niFUaaCwYag,3382,3572,638-271-1410-1043,29.97,1920,1080,train
niFUaaCwYag,3986,4160,783-306-1510-1033,29.97,1920,1080,train
niFUaaCwYag,4545,4835,704-360-1391-1047,29.97,1920,1080,train
niFUaaCwYag,6741,7039,408-246-1224-1062,29.97,1920,1080,train
niFUaaCwYag,7313,7459,433-232-1236-1035,29.97,1920,1080,train
niFUaaCwYag,7459,7724,502-192-1349-1039,29.97,1920,1080,train
niFUaaCwYag,7724,7912,536-216-1398-1078,29.97,1920,1080,train
niFUaaCwYag,7948,8273,448-224-1277-1053,29.97,1920,1080,train
niFUaaCwYag,9440,9618,628-241-1449-1062,29.97,1920,1080,train
niFUaaCwYag,10391,10575,827-408-1450-1031,29.97,1920,1080,train
niFUaaCwYag,12164,12342,619-298-1391-1070,29.97,1920,1080,train
niFUaaCwYag,13057,13262,502-201-1349-1048,29.97,1920,1080,train
niFUaaCwYag,13382,13631,301-240-1141-1080,29.97,1920,1080,train
niFUaaCwYag,13753,14084,320-84-1280-1044,29.97,1920,1080,train
niFUaaCwYag,14451,14704,227-59-1248-1080,29.97,1920,1080,train
niFUaaCwYag,14993,15127,475-240-1306-1071,29.97,1920,1080,train
niFUaaCwYag,15365,15581,673-219-1534-1080,29.97,1920,1080,train
niFUaaCwYag,15765,15984,596-194-1428-1026,29.97,1920,1080,train
niFUaaCwYag,16246,16429,628-261-1372-1005,29.97,1920,1080,train
niFUaaCwYag,16454,16678,606-316-1321-1031,29.97,1920,1080,train
niFUaaCwYag,16698,16880,742-278-1487-1023,29.97,1920,1080,train
niFUaaCwYag,17027,17171,827-357-1472-1002,29.97,1920,1080,train
niFUaaCwYag,17171,17387,857-326-1500-969,29.97,1920,1080,train
niFUaaCwYag,17825,17975,763-314-1450-1001,29.97,1920,1080,train
niFUaaCwYag,18414,18548,717-222-1569-1074,29.97,1920,1080,train
niFUaaCwYag,19161,19305,380-128-1330-1078,29.97,1920,1080,train
niFUaaCwYag,19705,19918,800-201-1647-1048,29.97,1920,1080,train
niFUaaCwYag,19930,20284,682-203-1529-1050,29.97,1920,1080,train
niFUaaCwYag,20505,20673,667-283-1452-1068,29.97,1920,1080,train
niFUaaCwYag,20673,20893,649-244-1472-1067,29.97,1920,1080,train
niFUaaCwYag,21645,21805,408-231-1248-1071,29.97,1920,1080,train
ab28GAufK8o,261,596,175-63-551-439,29.97,640,480,test
ab28GAufK8o,832,976,122-88-445-411,29.97,640,480,test
ab28GAufK8o,997,1200,139-78-473-412,29.97,640,480,test
ab28GAufK8o,1353,1493,125-100-470-445,29.97,640,480,test
ab28GAufK8o,1591,1826,53-87-398-432,29.97,640,480,test
ab28GAufK8o,2018,2163,56-48-430-422,29.97,640,480,test
ab28GAufK8o,2361,2499,178-110-533-465,29.97,640,480,test
XYuT0U0K5CA,0,339,417-115-957-655,50.0,1280,720,train
XYuT0U0K5CA,339,1363,363-117-919-673,50.0,1280,720,train
XYuT0U0K5CA,1581,2605,297-117-852-672,50.0,1280,720,train
XYuT0U0K5CA,2605,2993,304-127-851-674,50.0,1280,720,train
XYuT0U0K5CA,3014,3389,405-154-936-685,50.0,1280,720,train
XYuT0U0K5CA,3449,3582,323-180-830-687,50.0,1280,720,train
XYuT0U0K5CA,3582,3924,350-155-881-686,50.0,1280,720,train
XYuT0U0K5CA,3930,4432,267-154-801-688,50.0,1280,720,train
XYuT0U0K5CA,4449,5023,267-154-807-694,50.0,1280,720,train
XYuT0U0K5CA,5147,5416,361-7-1007-653,50.0,1280,720,train
XYuT0U0K5CA,5416,5612,396-163-912-679,50.0,1280,720,train
XYuT0U0K5CA,5635,5892,467-148-1009-690,50.0,1280,720,train
XYuT0U0K5CA,5893,6139,451-137-986-672,50.0,1280,720,train
XYuT0U0K5CA,6150,6417,478-148-1005-675,50.0,1280,720,train
XYuT0U0K5CA,6417,6895,439-123-982-666,50.0,1280,720,train
XYuT0U0K5CA,6902,7148,475-126-1020-671,50.0,1280,720,train
XYuT0U0K5CA,7151,7341,461-132-999-670,50.0,1280,720,train
XYuT0U0K5CA,7398,7956,409-17-1089-697,50.0,1280,720,train
XYuT0U0K5CA,8980,10004,255-6-936-687,50.0,1280,720,train
XYuT0U0K5CA,10048,10343,242-28-909-695,50.0,1280,720,train
XYuT0U0K5CA,11554,11740,268-121-843-696,50.0,1280,720,train
XYuT0U0K5CA,11789,12813,196-32-860-696,50.0,1280,720,train
XYuT0U0K5CA,12813,13039,173-45-829-701,50.0,1280,720,train
XYuT0U0K5CA,13066,13227,225-1-930-706,50.0,1280,720,train
XYuT0U0K5CA,14251,14994,127-58-787-718,50.0,1280,720,train
XYuT0U0K5CA,15130,15728,260-50-908-698,50.0,1280,720,train
XYuT0U0K5CA,15736,15989,296-82-926-712,50.0,1280,720,train
XYuT0U0K5CA,15989,16162,273-48-933-708,50.0,1280,720,train
XYuT0U0K5CA,16537,16817,304-101-890-687,50.0,1280,720,train
XYuT0U0K5CA,17383,17539,223-18-907-702,50.0,1280,720,train
XYuT0U0K5CA,17662,18152,399-48-1019-668,50.0,1280,720,train
XYuT0U0K5CA,18152,18350,274-74-875-675,50.0,1280,720,train
XYuT0U0K5CA,18391,18595,250-0-932-682,50.0,1280,720,train
XYuT0U0K5CA,19497,19666,91-17-768-694,50.0,1280,720,train
XYuT0U0K5CA,19780,20027,265-54-893-682,50.0,1280,720,train
XYuT0U0K5CA,20560,20777,81-79-680-678,50.0,1280,720,train
XYuT0U0K5CA,21021,21174,69-5-748-684,50.0,1280,720,train
XYuT0U0K5CA,21314,21526,225-57-848-680,50.0,1280,720,train
XYuT0U0K5CA,21564,21921,82-19-748-685,50.0,1280,720,train
XYuT0U0K5CA,22051,22192,115-49-746-680,50.0,1280,720,train
XYuT0U0K5CA,22311,22466,123-67-736-680,50.0,1280,720,train
XYuT0U0K5CA,22476,23082,185-1-881-697,50.0,1280,720,train
k1RAdWov7kU,52,465,604-208-1340-944,25.0,1920,1080,train
k1RAdWov7kU,465,790,615-225-1368-978,25.0,1920,1080,train
k1RAdWov7kU,790,1168,575-190-1339-954,25.0,1920,1080,train
k1RAdWov7kU,1168,1508,470-150-1281-961,25.0,1920,1080,train
k1RAdWov7kU,1707,2152,491-126-1351-986,25.0,1920,1080,train
k1RAdWov7kU,2152,2288,502-188-1337-1023,25.0,1920,1080,train
k1RAdWov7kU,2411,3435,487-53-1422-988,25.0,1920,1080,train
k1RAdWov7kU,3607,3863,528-93-1411-976,25.0,1920,1080,train
k1RAdWov7kU,4021,4906,523-103-1425-1005,25.0,1920,1080,train
k1RAdWov7kU,5036,5640,446-101-1377-1032,25.0,1920,1080,train
k1RAdWov7kU,5757,5927,361-91-1332-1062,25.0,1920,1080,train
k1RAdWov7kU,5927,6123,471-40-1472-1041,25.0,1920,1080,train
k1RAdWov7kU,6635,6871,403-77-1341-1015,25.0,1920,1080,train
k1RAdWov7kU,6880,7647,390-67-1358-1035,25.0,1920,1080,train
k1RAdWov7kU,8195,8422,464-120-1357-1013,25.0,1920,1080,train
k1RAdWov7kU,8575,8823,487-45-1442-1000,25.0,1920,1080,train
k1RAdWov7kU,8946,9302,353-9-1364-1020,25.0,1920,1080,train
k1RAdWov7kU,9832,10097,493-34-1418-959,25.0,1920,1080,train
k1RAdWov7kU,10226,10360,503-70-1378-945,25.0,1920,1080,train
k1RAdWov7kU,10468,11282,597-85-1522-1010,25.0,1920,1080,train
NXPySOFaBf0,1491,1630,128-45-550-467,29.97,854,480,train
29FLWPEOCMw,5779,6424,195-15-643-463,29.97,854,480,train
29FLWPEOCMw,7448,8472,165-3-625-463,29.97,854,480,train
29FLWPEOCMw,8472,8725,168-34-587-453,29.97,854,480,train
29FLWPEOCMw,8725,9065,174-12-625-463,29.97,854,480,train
29FLWPEOCMw,9369,9892,210-0-665-455,29.97,854,480,train
FzJJ_bWLzcA,315,450,540-216-1386-1062,29.97,1920,1080,train
FzJJ_bWLzcA,1950,2096,575-123-1466-1014,29.97,1920,1080,train
FzJJ_bWLzcA,2502,2805,752-95-1647-990,29.97,1920,1080,train
FzJJ_bWLzcA,3462,3600,452-57-1346-951,29.97,1920,1080,train
FzJJ_bWLzcA,3829,4122,182-56-1031-905,29.97,1920,1080,train
d_kA4yIakbs,4185,4886,282-114-608-440,29.97,854,480,train
d_kA4yIakbs,5023,5303,275-114-579-418,29.97,854,480,train
d_kA4yIakbs,5445,5583,226-125-517-416,29.97,854,480,train
d_kA4yIakbs,5599,5775,312-142-598-428,29.97,854,480,train
d_kA4yIakbs,6152,6282,284-155-560-431,29.97,854,480,train
d_kA4yIakbs,7188,7406,329-147-630-448,29.97,854,480,train
d_kA4yIakbs,7502,7726,347-93-696-442,29.97,854,480,train
7cHsPUybKGg,2452,2582,143-101-429-387,25.0,640,480,train
7cHsPUybKGg,2621,2814,157-68-480-391,25.0,640,480,train
7cHsPUybKGg,2852,2980,179-93-474-388,25.0,640,480,train
7cHsPUybKGg,3235,3386,141-97-429-385,25.0,640,480,train
7cHsPUybKGg,3411,3568,136-52-475-391,25.0,640,480,train
7cHsPUybKGg,3640,3782,178-97-474-393,25.0,640,480,train
7cHsPUybKGg,3827,4164,156-81-470-395,25.0,640,480,train
7cHsPUybKGg,4512,4664,120-22-503-405,25.0,640,480,train
7cHsPUybKGg,4700,4874,137-70-472-405,25.0,640,480,train
7cHsPUybKGg,5587,5721,138-101-478-441,25.0,640,480,train
7cHsPUybKGg,5940,6115,141-83-476-418,25.0,640,480,train
7cHsPUybKGg,6159,6437,120-77-453-410,25.0,640,480,train
LZ2llkUGrsw,3300,3431,58-38-464-444,29.97,640,480,train
LZ2llkUGrsw,4052,4360,121-6-581-466,29.97,640,480,train
LZ2llkUGrsw,4522,4687,129-20-566-457,29.97,640,480,train
LZ2llkUGrsw,4769,4910,128-0-595-467,29.97,640,480,train
LZ2llkUGrsw,6142,6320,165-44-588-467,29.97,640,480,train
LZ2llkUGrsw,6509,6865,130-42-543-455,29.97,640,480,train
LZ2llkUGrsw,7286,7415,89-69-473-453,29.97,640,480,train
LZ2llkUGrsw,8448,8749,140-100-515-475,29.97,640,480,train
LZ2llkUGrsw,8751,9081,130-52-551-473,29.97,640,480,train
LZ2llkUGrsw,9420,10071,84-62-491-469,29.97,640,480,train
LZ2llkUGrsw,10108,10260,137-27-575-465,29.97,640,480,train
LZ2llkUGrsw,11207,11425,93-58-504-469,29.97,640,480,train
LZ2llkUGrsw,11428,11676,100-13-560-473,29.97,640,480,train
LZ2llkUGrsw,12120,12297,151-37-580-466,29.97,640,480,train
LZ2llkUGrsw,12382,12553,114-25-569-480,29.97,640,480,train
LZ2llkUGrsw,12554,12742,126-22-574-470,29.97,640,480,train
Q52BKOPKOA0,381,1405,43-56-675-688,25.0,1280,720,train
Q52BKOPKOA0,1405,2281,248-133-752-637,25.0,1280,720,train
Q52BKOPKOA0,2388,2571,385-154-842-611,25.0,1280,720,train
Q52BKOPKOA0,2571,2703,384-174-842-632,25.0,1280,720,train
Q52BKOPKOA0,2845,3063,341-126-856-641,25.0,1280,720,train
Q52BKOPKOA0,3104,3288,514-144-996-626,25.0,1280,720,train
Q52BKOPKOA0,3289,3519,458-144-951-637,25.0,1280,720,train
Q52BKOPKOA0,3631,3762,716-160-1165-609,25.0,1280,720,train
Q52BKOPKOA0,3972,4138,531-112-1096-677,25.0,1280,720,train
Q52BKOPKOA0,4138,4281,547-70-1158-681,25.0,1280,720,train
MEPsADK9Vmk,466,703,170-167-443-440,29.97,640,480,test
MEPsADK9Vmk,898,1426,191-137-502-448,29.97,640,480,test
MEPsADK9Vmk,1611,1887,241-115-572-446,29.97,640,480,test
MEPsADK9Vmk,2049,2189,157-127-491-461,29.97,640,480,test
MEPsADK9Vmk,2208,2422,198-169-483-454,29.97,640,480,test
MEPsADK9Vmk,2585,2786,110-119-447-456,29.97,640,480,test
MEPsADK9Vmk,2786,2966,166-127-491-452,29.97,640,480,test
MEPsADK9Vmk,4351,4602,204-133-517-446,29.97,640,480,test
MEPsADK9Vmk,4654,4834,142-144-434-436,29.97,640,480,test
9b1jcHFhVKg,588,727,147-107-476-436,25.0,600,480,train
9b1jcHFhVKg,820,1133,129-89-491-451,25.0,600,480,train
9b1jcHFhVKg,2160,2321,167-85-525-443,25.0,600,480,train
9b1jcHFhVKg,2322,2488,152-82-522-452,25.0,600,480,train
9b1jcHFhVKg,2489,2688,145-94-502-451,25.0,600,480,train
9b1jcHFhVKg,2690,3649,132-93-491-452,25.0,600,480,train
9b1jcHFhVKg,3655,3919,88-9-529-450,25.0,600,480,train
9b1jcHFhVKg,4429,4616,180-85-542-447,25.0,600,480,train
9b1jcHFhVKg,5354,6378,130-96-481-447,25.0,600,480,train
9b1jcHFhVKg,6378,7402,132-89-491-448,25.0,600,480,train
9b1jcHFhVKg,7402,7550,129-89-493-453,25.0,600,480,train
9b1jcHFhVKg,7560,7840,133-90-490-447,25.0,600,480,train
9b1jcHFhVKg,7938,8115,133-89-501-457,25.0,600,480,train
9b1jcHFhVKg,8238,8370,134-90-493-449,25.0,600,480,train
9b1jcHFhVKg,8370,8687,134-90-493-449,25.0,600,480,train
9b1jcHFhVKg,8688,9213,115-50-517-452,25.0,600,480,train
9b1jcHFhVKg,9213,9614,91-11-532-452,25.0,600,480,train
oEtFlwUMyvY,2897,3921,118-45-525-452,29.97,640,480,train
oEtFlwUMyvY,3921,4896,113-52-513-452,29.97,640,480,train
oEtFlwUMyvY,5677,5828,113-49-524-460,29.97,640,480,train
oEtFlwUMyvY,5844,6125,108-18-550-460,29.97,640,480,train
FpLOIJJMXhg,117,652,98-4-561-467,25.0,640,480,train
FpLOIJJMXhg,665,1505,115-32-561-478,25.0,640,480,train
FpLOIJJMXhg,1731,2326,81-25-509-453,25.0,640,480,train
FpLOIJJMXhg,2363,2588,77-21-519-463,25.0,640,480,train
FpLOIJJMXhg,2661,3274,57-2-523-468,25.0,640,480,train
FpLOIJJMXhg,3596,3769,177-126-506-455,25.0,640,480,train
FpLOIJJMXhg,4268,4552,103-85-472-454,25.0,640,480,train
FpLOIJJMXhg,4939,5673,89-68-478-457,25.0,640,480,train
FpLOIJJMXhg,6731,7031,94-63-498-467,25.0,640,480,train
nUDf0Gv_GJ4,530,1554,0-73-334-408,25.0,640,480,train
nUDf0Gv_GJ4,1638,1808,34-97-343-406,25.0,640,480,train
nUDf0Gv_GJ4,1914,2285,9-102-312-405,25.0,640,480,train
nUDf0Gv_GJ4,2424,3169,44-95-356-407,25.0,640,480,train
nUDf0Gv_GJ4,3461,3816,4-97-320-413,25.0,640,480,train
nUDf0Gv_GJ4,3909,4148,10-104-315-409,25.0,640,480,train
nUDf0Gv_GJ4,4148,4625,10-90-330-410,25.0,640,480,train
nUDf0Gv_GJ4,4724,5514,10-86-339-415,25.0,640,480,train
nUDf0Gv_GJ4,5648,5900,48-97-369-418,25.0,640,480,train
nUDf0Gv_GJ4,5947,6692,12-64-373-425,25.0,640,480,train
nUDf0Gv_GJ4,6786,6960,3-81-347-425,25.0,640,480,train
nUDf0Gv_GJ4,6960,7198,2-64-371-433,25.0,640,480,train
nUDf0Gv_GJ4,7290,7475,94-72-450-428,25.0,640,480,train
nUDf0Gv_GJ4,7689,7890,79-78-436-435,25.0,640,480,train
nUDf0Gv_GJ4,7890,8044,27-80-373-426,25.0,640,480,train
nUDf0Gv_GJ4,8044,8310,55-62-418-425,25.0,640,480,train
QBqpVrjyeYM,3660,3843,146-118-499-471,25.0,640,480,train
QBqpVrjyeYM,4690,5063,186-181-476-471,25.0,640,480,train
QBqpVrjyeYM,6048,6213,194-188-481-475,25.0,640,480,train
QBqpVrjyeYM,6216,6347,194-195-462-463,25.0,640,480,train
AdEkWqdDlp8,0,216,1072-335-1762-1025,25.0,1920,1080,train
AdEkWqdDlp8,292,749,1093-301-1807-1015,25.0,1920,1080,train
AdEkWqdDlp8,1203,2227,234-261-1046-1073,25.0,1920,1080,train
AdEkWqdDlp8,2227,3251,331-260-1123-1052,25.0,1920,1080,train
AdEkWqdDlp8,3251,3610,409-307-1107-1005,25.0,1920,1080,train
AdEkWqdDlp8,3659,3891,553-314-1197-958,25.0,1920,1080,train
AdEkWqdDlp8,3920,4110,408-302-1107-1001,25.0,1920,1080,train
AdEkWqdDlp8,4110,4342,631-323-1293-985,25.0,1920,1080,train
AdEkWqdDlp8,4342,5056,658-290-1350-982,25.0,1920,1080,train
JdiIQg47Wc4,835,1096,173-195-1000-1022,25.0,1920,1080,train
JdiIQg47Wc4,2117,2248,63-141-981-1059,25.0,1920,1080,train
JdiIQg47Wc4,3301,3563,243-73-1183-1013,25.0,1920,1080,train
JdiIQg47Wc4,3603,3733,329-191-1171-1033,25.0,1920,1080,train
JdiIQg47Wc4,3801,3959,160-152-1049-1041,25.0,1920,1080,train
aOZmneMZICQ,0,219,257-120-540-403,24.0,854,480,train
aOZmneMZICQ,291,1256,289-139-556-406,24.0,854,480,train
aOZmneMZICQ,1256,1919,292-125-573-406,24.0,854,480,train
aOZmneMZICQ,1919,2496,298-108-598-408,24.0,854,480,train
aOZmneMZICQ,2496,2767,284-116-574-406,24.0,854,480,train
aOZmneMZICQ,3246,3456,288-129-561-402,24.0,854,480,train
aOZmneMZICQ,3480,3677,273-80-593-400,24.0,854,480,train
aOZmneMZICQ,3752,3951,282-122-566-406,24.0,854,480,train
aOZmneMZICQ,3980,4124,251-56-601-406,24.0,854,480,train
aOZmneMZICQ,4257,4452,281-120-564-403,24.0,854,480,train
aOZmneMZICQ,4472,4864,261-71-594-404,24.0,854,480,train
aOZmneMZICQ,4880,5180,284-102-585-403,24.0,854,480,train
aOZmneMZICQ,5180,5334,269-87-585-403,24.0,854,480,train
aOZmneMZICQ,5338,6362,245-49-605-409,24.0,854,480,train
aOZmneMZICQ,6413,6809,303-116-590-403,24.0,854,480,train
RCiy2FYViEg,382,1051,185-80-511-406,29.97,640,480,train
RCiy2FYViEg,1740,2161,178-76-502-400,29.97,640,480,train
RCiy2FYViEg,2238,2446,194-65-506-377,29.97,640,480,train
RCiy2FYViEg,3171,3310,208-84-510-386,29.97,640,480,train
RCiy2FYViEg,4437,4805,200-97-477-374,29.97,640,480,train
67If7DVAWNE,1170,1327,142-51-549-458,30.0,640,480,train
67If7DVAWNE,1327,1472,136-38-562-464,30.0,640,480,train
67If7DVAWNE,1472,2005,141-41-564-464,30.0,640,480,train
gaccfn5JB4Y,1713,1845,169-28-566-425,29.97,640,480,test
gaccfn5JB4Y,7950,8100,90-20-497-427,29.97,640,480,test
VBevstnH4Ds,482,738,184-126-459-401,25.0,640,480,train
VBevstnH4Ds,1057,1578,168-92-475-399,25.0,640,480,train
VBevstnH4Ds,1700,2163,165-90-475-400,25.0,640,480,train
VBevstnH4Ds,2269,2688,168-96-473-401,25.0,640,480,train
VBevstnH4Ds,2702,3267,152-64-491-403,25.0,640,480,train
VBevstnH4Ds,3390,4414,158-76-483-401,25.0,640,480,train
VBevstnH4Ds,4414,5438,186-124-456-394,25.0,640,480,train
VBevstnH4Ds,5438,5759,191-130-459-398,25.0,640,480,train
VBevstnH4Ds,5759,6783,186-112-476-402,25.0,640,480,train
VBevstnH4Ds,6783,7807,181-129-454-402,25.0,640,480,train
VBevstnH4Ds,7807,8583,181-123-455-397,25.0,640,480,train
gDF0gW-jo9E,635,829,382-105-903-626,29.97,1280,720,train
gDF0gW-jo9E,830,977,379-102-902-625,29.97,1280,720,train
gDF0gW-jo9E,1068,1261,365-73-914-622,29.97,1280,720,train
gDF0gW-jo9E,1497,1685,251-115-812-676,29.97,1280,720,train
gDF0gW-jo9E,2196,2402,321-115-834-628,29.97,1280,720,train
gDF0gW-jo9E,2547,2830,335-78-869-612,29.97,1280,720,train
gDF0gW-jo9E,2830,2963,199-48-750-599,29.97,1280,720,train
gDF0gW-jo9E,3252,3451,138-49-793-704,29.97,1280,720,train
gDF0gW-jo9E,3451,3681,109-49-765-705,29.97,1280,720,train
gDF0gW-jo9E,3681,3879,123-54-768-699,29.97,1280,720,train
gDF0gW-jo9E,3904,4333,152-74-752-674,29.97,1280,720,train
gDF0gW-jo9E,4336,4520,241-82-788-629,29.97,1280,720,train
gDF0gW-jo9E,4520,4706,231-68-790-627,29.97,1280,720,train
gDF0gW-jo9E,4729,4917,194-97-757-660,29.97,1280,720,train
gDF0gW-jo9E,5663,5864,274-97-863-686,29.97,1280,720,train
gDF0gW-jo9E,6151,6473,344-80-941-677,29.97,1280,720,train
IXMiGVYeTJ4,934,1146,149-124-418-393,29.97,640,480,train
IXMiGVYeTJ4,1164,1293,131-128-393-390,29.97,640,480,train
IXMiGVYeTJ4,2749,2926,106-123-381-398,29.97,640,480,train
IXMiGVYeTJ4,3645,3833,147-130-407-390,29.97,640,480,train
IXMiGVYeTJ4,4400,4553,204-131-470-397,29.97,640,480,train
IXMiGVYeTJ4,4557,4727,179-120-456-397,29.97,640,480,train
IXMiGVYeTJ4,5128,5438,154-101-448-395,29.97,640,480,train
5Z8D9WwcETQ,124,357,368-103-847-582,25.0,1280,720,train
5Z8D9WwcETQ,357,500,371-107-846-582,25.0,1280,720,train
5Z8D9WwcETQ,979,1228,378-79-872-573,25.0,1280,720,train
5Z8D9WwcETQ,3241,3390,284-86-810-612,25.0,1280,720,train
5Z8D9WwcETQ,3795,3937,235-22-842-629,25.0,1280,720,train
5Z8D9WwcETQ,3942,4165,158-15-812-669,25.0,1280,720,train
5Z8D9WwcETQ,5695,5947,306-0-974-668,25.0,1280,720,train
5Z8D9WwcETQ,5995,6145,141-6-760-625,25.0,1280,720,train
5Z8D9WwcETQ,10158,10356,276-20-844-588,25.0,1280,720,train
5Z8D9WwcETQ,10530,10835,366-34-959-627,25.0,1280,720,train
q1KCN0rDiAE,0,406,604-254-1172-822,25.0,1920,1080,train
q1KCN0rDiAE,406,898,658-267-1222-831,25.0,1920,1080,train
q1KCN0rDiAE,898,1105,535-307-1046-818,25.0,1920,1080,train
q1KCN0rDiAE,1413,1616,469-320-1002-853,25.0,1920,1080,train
q1KCN0rDiAE,1616,1772,547-292-1136-881,25.0,1920,1080,train
q1KCN0rDiAE,1772,2022,577-260-1188-871,25.0,1920,1080,train
q1KCN0rDiAE,2228,2475,415-304-982-871,25.0,1920,1080,train
q1KCN0rDiAE,2558,2771,412-310-980-878,25.0,1920,1080,train
q1KCN0rDiAE,2987,3151,250-177-941-868,25.0,1920,1080,train
q1KCN0rDiAE,3175,3366,263-293-938-968,25.0,1920,1080,train
q1KCN0rDiAE,4387,4893,703-292-1274-863,25.0,1920,1080,train
q1KCN0rDiAE,7136,7376,622-341-1098-817,25.0,1920,1080,train
q1KCN0rDiAE,7387,7523,671-304-1219-852,25.0,1920,1080,train
q1KCN0rDiAE,7523,7733,676-272-1241-837,25.0,1920,1080,train
q1KCN0rDiAE,7733,7876,588-306-1119-837,25.0,1920,1080,train
4rknb1u9kAQ,513,1091,258-111-788-641,29.97,1280,720,train
4rknb1u9kAQ,1292,1580,226-163-724-661,29.97,1280,720,train
4rknb1u9kAQ,2059,2348,310-141-842-673,29.97,1280,720,train
4rknb1u9kAQ,2607,2789,399-169-877-647,29.97,1280,720,train
4rknb1u9kAQ,2900,3041,435-146-955-666,29.97,1280,720,train
4rknb1u9kAQ,3537,3683,384-125-920-661,29.97,1280,720,train
4rknb1u9kAQ,4230,4481,608-146-1083-621,29.97,1280,720,train
4rknb1u9kAQ,4505,4661,562-121-1033-592,29.97,1280,720,train
4rknb1u9kAQ,5879,6017,446-134-938-626,29.97,1280,720,train
4rknb1u9kAQ,6622,6907,171-58-810-697,29.97,1280,720,train
4rknb1u9kAQ,8458,8625,220-150-726-656,29.97,1280,720,train
4rknb1u9kAQ,13070,13211,297-192-714-609,29.97,1280,720,train
4rknb1u9kAQ,13237,13385,206-164-679-637,29.97,1280,720,train
4rknb1u9kAQ,13449,13691,276-182-706-612,29.97,1280,720,train
4rknb1u9kAQ,13887,14183,282-140-753-611,29.97,1280,720,train
gmSa_wwIhfE,4297,4451,136-10-590-464,29.97,640,480,train
gmSa_wwIhfE,4734,4885,65-30-513-478,29.97,640,480,train
gmSa_wwIhfE,4904,5032,139-53-553-467,29.97,640,480,train
gmSa_wwIhfE,5033,5218,145-49-550-454,29.97,640,480,train
gmSa_wwIhfE,5550,5727,164-66-563-465,29.97,640,480,train
gmSa_wwIhfE,9143,9366,214-52-611-449,29.97,640,480,train
gmSa_wwIhfE,10057,10203,177-37-587-447,29.97,640,480,train
gmSa_wwIhfE,11205,11372,183-82-546-445,29.97,640,480,train
gmSa_wwIhfE,11524,11672,184-66-568-450,29.97,640,480,train
WlDYrq8K6nk,2253,2686,260-18-938-696,29.97,1280,720,test
WlDYrq8K6nk,2959,3094,353-46-990-683,29.97,1280,720,test
WlDYrq8K6nk,3247,3381,324-52-980-708,29.97,1280,720,test
WlDYrq8K6nk,3984,4245,341-116-938-713,29.97,1280,720,test
WlDYrq8K6nk,4875,5151,389-9-1096-716,29.97,1280,720,test
WlDYrq8K6nk,5264,5403,297-17-959-679,29.97,1280,720,test
WlDYrq8K6nk,5943,6135,261-23-942-704,29.97,1280,720,test
WlDYrq8K6nk,7058,7241,337-4-1009-676,29.97,1280,720,test
WlDYrq8K6nk,8186,8512,276-7-974-705,29.97,1280,720,test
WlDYrq8K6nk,8520,8777,326-75-953-702,29.97,1280,720,test
y4egTMS9H1k,382,640,107-62-963-918,25.0,1920,1080,train
y4egTMS9H1k,640,917,146-51-1032-937,25.0,1920,1080,train
y4egTMS9H1k,978,1117,443-111-1272-940,25.0,1920,1080,train
y4egTMS9H1k,1139,1357,579-120-1453-994,25.0,1920,1080,train
y4egTMS9H1k,3217,3350,507-24-1464-981,25.0,1920,1080,train
y4egTMS9H1k,3469,3730,353-37-1308-992,25.0,1920,1080,train
y4egTMS9H1k,4163,4389,519-45-1426-952,25.0,1920,1080,train
y4egTMS9H1k,4612,4800,532-60-1428-956,25.0,1920,1080,train
y4egTMS9H1k,4800,5009,492-16-1437-961,25.0,1920,1080,train
y4egTMS9H1k,5330,5476,192-123-1038-969,25.0,1920,1080,train
y4egTMS9H1k,5508,5704,123-167-910-954,25.0,1920,1080,train
y4egTMS9H1k,5922,6063,322-93-1246-1017,25.0,1920,1080,train
y4egTMS9H1k,6103,6370,410-87-1372-1049,25.0,1920,1080,train
y4egTMS9H1k,6370,6514,700-137-1517-954,25.0,1920,1080,train
y4egTMS9H1k,7018,7169,782-129-1677-1024,25.0,1920,1080,train
y4egTMS9H1k,7388,7705,874-46-1869-1041,25.0,1920,1080,train
y4egTMS9H1k,8168,8332,433-46-1357-970,25.0,1920,1080,train
y4egTMS9H1k,8944,9083,431-95-1295-959,25.0,1920,1080,train
y4egTMS9H1k,9083,9280,476-52-1369-945,25.0,1920,1080,train
y4egTMS9H1k,9280,9458,484-138-1335-989,25.0,1920,1080,train
y4egTMS9H1k,9539,9751,664-141-1434-911,25.0,1920,1080,train
y4egTMS9H1k,9751,9943,572-104-1363-895,25.0,1920,1080,train
y4egTMS9H1k,10173,10417,256-80-1165-989,25.0,1920,1080,train
y4egTMS9H1k,10452,10675,298-104-1181-987,25.0,1920,1080,train
y4egTMS9H1k,10706,10835,512-109-1449-1046,25.0,1920,1080,train
y4egTMS9H1k,10859,11061,609-129-1527-1047,25.0,1920,1080,train
y4egTMS9H1k,11342,11706,595-24-1616-1045,25.0,1920,1080,train
P9nWs-Haf_I,267,1291,184-140-490-446,25.0,648,480,train
P9nWs-Haf_I,1599,1740,194-154-489-449,25.0,648,480,train
P9nWs-Haf_I,1850,2113,199-140-514-455,25.0,648,480,train
4a0Gro197W4,23,312,64-3-527-466,29.97,640,480,train
4a0Gro197W4,2755,2910,186-37-530-381,29.97,640,480,train
4a0Gro197W4,3130,3285,138-13-515-390,29.97,640,480,train
eQqUScz9rLw,76,580,165-101-468-404,25.0,640,480,train
eQqUScz9rLw,580,904,132-123-426-417,25.0,640,480,train
eQqUScz9rLw,2620,2923,124-72-489-437,25.0,640,480,train
eQqUScz9rLw,3587,3735,155-71-526-442,25.0,640,480,train
jVIhp_8EWIE,302,524,115-36-497-418,29.97,640,480,train
jVIhp_8EWIE,4912,5048,215-59-515-359,29.97,640,480,train
Jgx22uN5xzQ,249,600,267-111-558-402,25.0,640,480,train
Jgx22uN5xzQ,951,1200,134-124-415-405,25.0,640,480,train
Jgx22uN5xzQ,1261,1391,133-132-403-402,25.0,640,480,train
Jgx22uN5xzQ,1527,1725,125-134-389-398,25.0,640,480,train
Jgx22uN5xzQ,2151,2387,120-131-379-390,25.0,640,480,train
Jgx22uN5xzQ,2410,2675,175-127-443-395,25.0,640,480,train
Jgx22uN5xzQ,2887,3311,17-28-455-466,25.0,640,480,train
Jgx22uN5xzQ,3436,3605,43-80-423-460,25.0,640,480,train
Jgx22uN5xzQ,4505,4714,105-82-502-479,25.0,640,480,train
rjfmhJ6GCwM,1218,1634,315-46-983-714,29.97,1280,720,train
rjfmhJ6GCwM,1801,2000,383-51-1049-717,29.97,1280,720,train
rjfmhJ6GCwM,2188,2406,316-69-940-693,29.97,1280,720,train
rjfmhJ6GCwM,2976,3114,360-113-911-664,29.97,1280,720,train
rjfmhJ6GCwM,3225,3430,406-62-1025-681,29.97,1280,720,train
rjfmhJ6GCwM,6472,6687,347-92-951-696,29.97,1280,720,train
rjfmhJ6GCwM,6689,6881,354-104-950-700,29.97,1280,720,train
rjfmhJ6GCwM,7235,7685,343-43-990-690,29.97,1280,720,train
P0aQKRrvpt8,1107,1244,117-132-383-398,25.0,640,480,train
P0aQKRrvpt8,3501,3681,119-87-407-375,25.0,640,480,train
S_aTWQUxylE,162,566,131-17-573-459,25.0,640,480,train
qVoJJj13PaY,1167,1486,116-42-518-444,29.97,640,480,train
qVoJJj13PaY,6070,6213,150-74-523-447,29.97,640,480,train
qV6PjN55Lb4,785,941,423-68-1345-990,29.97,1920,1080,train
qV6PjN55Lb4,946,1875,425-73-1343-991,29.97,1920,1080,train
qV6PjN55Lb4,1949,2088,725-205-1498-978,29.97,1920,1080,train
qV6PjN55Lb4,2373,2706,582-118-1452-988,29.97,1920,1080,train
qV6PjN55Lb4,2727,3057,466-21-1443-998,29.97,1920,1080,train
qV6PjN55Lb4,3251,3419,727-173-1508-954,29.97,1920,1080,train
qV6PjN55Lb4,3566,3742,721-127-1607-1013,29.97,1920,1080,train
qV6PjN55Lb4,3905,4135,607-109-1467-969,29.97,1920,1080,train
qV6PjN55Lb4,4135,4296,387-167-1208-988,29.97,1920,1080,train
qV6PjN55Lb4,4336,4491,466-162-1289-985,29.97,1920,1080,train
qV6PjN55Lb4,4491,4876,437-97-1333-993,29.97,1920,1080,train
qV6PjN55Lb4,6370,6521,497-194-1254-951,29.97,1920,1080,train
qV6PjN55Lb4,7456,7733,615-179-1389-953,29.97,1920,1080,train
qV6PjN55Lb4,7944,8378,546-146-1336-936,29.97,1920,1080,train
qV6PjN55Lb4,8681,8902,708-113-1516-921,29.97,1920,1080,train
qV6PjN55Lb4,8924,9094,763-107-1572-916,29.97,1920,1080,train
qV6PjN55Lb4,9582,9794,458-53-1401-996,29.97,1920,1080,train
qV6PjN55Lb4,10285,10464,653-140-1488-975,29.97,1920,1080,train
qV6PjN55Lb4,10464,10594,515-175-1337-997,29.97,1920,1080,train
qV6PjN55Lb4,10769,10965,620-128-1487-995,29.97,1920,1080,train
qV6PjN55Lb4,11040,11178,438-121-1326-1009,29.97,1920,1080,train
qV6PjN55Lb4,11350,11534,512-146-1381-1015,29.97,1920,1080,train
qV6PjN55Lb4,11680,12002,534-65-1495-1026,29.97,1920,1080,train
mAmvStH5k4g,3132,3284,150-38-554-442,29.97,640,480,train
mAmvStH5k4g,3765,3971,173-34-592-453,29.97,640,480,train
mAmvStH5k4g,4096,4426,140-40-555-455,29.97,640,480,train
mAmvStH5k4g,4471,4866,71-36-507-472,29.97,640,480,train
mAmvStH5k4g,5670,5820,119-44-539-464,29.97,640,480,train
pbznqs21OvQ,577,1601,311-101-794-584,50.0,1280,720,train
pbznqs21OvQ,1684,2013,418-130-873-585,50.0,1280,720,train
pbznqs21OvQ,2070,2226,259-120-742-603,50.0,1280,720,train
pbznqs21OvQ,2278,2486,284-169-752-637,50.0,1280,720,train
pbznqs21OvQ,2567,3591,302-98-884-680,50.0,1280,720,train
pbznqs21OvQ,3867,4371,181-152-687-658,50.0,1280,720,train
pbznqs21OvQ,4484,4685,295-174-782-661,50.0,1280,720,train
pbznqs21OvQ,4733,5022,164-106-697-639,50.0,1280,720,train
pbznqs21OvQ,5022,5166,184-114-737-667,50.0,1280,720,train
pbznqs21OvQ,5166,5341,101-83-671-653,50.0,1280,720,train
pbznqs21OvQ,5631,5785,305-178-785-658,50.0,1280,720,train
pbznqs21OvQ,5785,5946,302-151-814-663,50.0,1280,720,train
pbznqs21OvQ,6089,6377,342-151-846-655,50.0,1280,720,train
pbznqs21OvQ,6811,6967,487-17-1121-651,50.0,1280,720,train
pbznqs21OvQ,6967,7157,488-110-1057-679,50.0,1280,720,train
pbznqs21OvQ,7540,7724,436-16-1139-719,50.0,1280,720,train
pbznqs21OvQ,8385,9137,220-97-817-694,50.0,1280,720,train
pbznqs21OvQ,9137,10050,123-71-679-627,50.0,1280,720,train
pbznqs21OvQ,10050,10519,253-147-726-620,50.0,1280,720,train
pbznqs21OvQ,10879,11158,451-156-910-615,50.0,1280,720,train
pbznqs21OvQ,11158,11595,445-134-916-605,50.0,1280,720,train
pbznqs21OvQ,11867,12075,287-145-803-661,50.0,1280,720,train
pbznqs21OvQ,12075,12266,267-119-806-658,50.0,1280,720,train
pbznqs21OvQ,12312,13142,267-94-840-667,50.0,1280,720,train
pbznqs21OvQ,13295,13877,286-72-907-693,50.0,1280,720,train
pbznqs21OvQ,13877,14421,253-43-900-690,50.0,1280,720,train
N8yfhFc25c8,0,1024,454-277-1173-996,29.97,1920,1080,train
N8yfhFc25c8,1557,1836,668-339-1312-983,29.97,1920,1080,train
N8yfhFc25c8,1836,1995,558-329-1224-995,29.97,1920,1080,train
N8yfhFc25c8,2082,2265,497-321-1166-990,29.97,1920,1080,train
N8yfhFc25c8,2309,2876,669-318-1338-987,29.97,1920,1080,train
N8yfhFc25c8,3000,3524,653-341-1309-997,29.97,1920,1080,train
N8yfhFc25c8,3524,4357,528-342-1193-1007,29.97,1920,1080,train
N8yfhFc25c8,4669,4863,537-350-1180-993,29.97,1920,1080,train
N8yfhFc25c8,4878,5546,660-287-1347-974,29.97,1920,1080,train
Bm82HLNjkKw,241,830,166-223-422-479,30.0,640,480,train
Bm82HLNjkKw,1528,2552,165-202-443-480,30.0,640,480,train
Bm82HLNjkKw,6236,7260,181-203-457-479,30.0,640,480,train
Bm82HLNjkKw,7338,7690,182-201-461-480,30.0,640,480,train
MvupxvDqZ9M,155,1104,106-6-563-463,29.97,640,480,train
MvupxvDqZ9M,1905,2823,137-5-579-447,29.97,640,480,train
MvupxvDqZ9M,3202,3832,120-13-558-451,29.97,640,480,train
MvupxvDqZ9M,4250,4436,100-6-535-441,29.97,640,480,train
MvupxvDqZ9M,4436,5020,95-5-555-465,29.97,640,480,train
MvupxvDqZ9M,5709,6733,103-26-532-455,29.97,640,480,train
MvupxvDqZ9M,6972,7811,141-16-580-455,29.97,640,480,train
MvupxvDqZ9M,8962,9544,165-21-609-465,29.97,640,480,train
MvupxvDqZ9M,9566,10120,123-24-555-456,29.97,640,480,train
MvupxvDqZ9M,10463,11410,89-10-536-457,29.97,640,480,train
MvupxvDqZ9M,11410,11671,94-32-517-455,29.97,640,480,train
MvupxvDqZ9M,11759,12308,102-10-548-456,29.97,640,480,train
VhprHat04dk,1321,1459,458-125-1287-954,29.97,1920,1080,train
VhprHat04dk,4550,4740,426-96-1261-931,29.97,1920,1080,train
mtXOJ5vBkLw,180,497,215-45-620-450,29.97,854,480,train
mtXOJ5vBkLw,1302,1449,292-94-660-462,29.97,854,480,train
mtXOJ5vBkLw,4527,4703,247-70-637-460,29.97,854,480,train
NjAu1n_-r0A,318,596,635-329-1359-1053,25.0,1920,1080,train
NjAu1n_-r0A,596,945,625-291-1383-1049,25.0,1920,1080,train
NjAu1n_-r0A,1043,1176,621-326-1328-1033,25.0,1920,1080,train
NjAu1n_-r0A,1208,1476,536-166-1419-1049,25.0,1920,1080,train
NjAu1n_-r0A,1530,1701,638-310-1377-1049,25.0,1920,1080,train
NjAu1n_-r0A,1736,1943,538-344-1233-1039,25.0,1920,1080,train
NjAu1n_-r0A,2095,2297,650-283-1407-1040,25.0,1920,1080,train
NjAu1n_-r0A,2363,2548,602-289-1353-1040,25.0,1920,1080,train
NjAu1n_-r0A,2800,2953,535-381-1183-1029,25.0,1920,1080,train
NjAu1n_-r0A,3220,3412,742-288-1481-1027,25.0,1920,1080,train
NjAu1n_-r0A,3493,3701,640-345-1332-1037,25.0,1920,1080,train
NjAu1n_-r0A,4925,5081,797-329-1519-1051,25.0,1920,1080,train
NjAu1n_-r0A,5155,5355,617-196-1481-1060,25.0,1920,1080,train
NjAu1n_-r0A,5674,6187,594-155-1499-1060,25.0,1920,1080,train
NjAu1n_-r0A,6817,7302,641-282-1398-1039,25.0,1920,1080,train
NjAu1n_-r0A,7741,8169,583-260-1355-1032,25.0,1920,1080,train
NjAu1n_-r0A,8170,8311,595-285-1353-1043,25.0,1920,1080,train
NjAu1n_-r0A,8355,8749,517-158-1413-1054,25.0,1920,1080,train
NjAu1n_-r0A,8977,9148,539-182-1406-1049,25.0,1920,1080,train
NjAu1n_-r0A,9318,9468,487-349-1192-1054,25.0,1920,1080,train
NjAu1n_-r0A,10494,10665,557-293-1292-1028,25.0,1920,1080,train
wtFqCHVGA44,2596,2867,199-24-648-473,29.97,854,480,train
wtFqCHVGA44,3700,3904,304-35-693-424,29.97,854,480,train
wtFqCHVGA44,3904,4136,302-20-698-416,29.97,854,480,train
wtFqCHVGA44,4311,4536,352-50-752-450,29.97,854,480,train
wtFqCHVGA44,4536,4849,325-30-755-460,29.97,854,480,train
wtFqCHVGA44,4849,5250,334-42-738-446,29.97,854,480,train
wtFqCHVGA44,5250,5428,333-52-726-445,29.97,854,480,train
wtFqCHVGA44,5428,5631,339-34-726-421,29.97,854,480,train
wtFqCHVGA44,5855,6021,290-36-704-450,29.97,854,480,train
wtFqCHVGA44,6021,6623,279-47-702-470,29.97,854,480,train
wtFqCHVGA44,6641,6810,241-23-667-449,29.97,854,480,train
wtFqCHVGA44,8312,8460,222-4-688-470,29.97,854,480,train
wtFqCHVGA44,8469,9108,189-27-627-465,29.97,854,480,train
wtFqCHVGA44,9108,9262,181-7-607-433,29.97,854,480,train
P4vKV-G3hGE,108,351,573-307-1290-1024,29.97,1920,1080,train
P4vKV-G3hGE,440,991,635-223-1341-929,29.97,1920,1080,train
P4vKV-G3hGE,1024,1225,553-285-1226-958,29.97,1920,1080,train
P4vKV-G3hGE,1225,1410,493-325-1156-988,29.97,1920,1080,train
P4vKV-G3hGE,1410,1616,424-293-1115-984,29.97,1920,1080,train
P4vKV-G3hGE,1830,2163,415-337-1090-1012,29.97,1920,1080,train
P4vKV-G3hGE,2805,3003,383-128-1122-867,29.97,1920,1080,train
P4vKV-G3hGE,3071,3458,394-135-1153-894,29.97,1920,1080,train
P4vKV-G3hGE,3541,3759,439-121-1186-868,29.97,1920,1080,train
P4vKV-G3hGE,3814,4012,321-52-1063-794,29.97,1920,1080,train
P4vKV-G3hGE,4592,4973,503-160-1239-896,29.97,1920,1080,train
P4vKV-G3hGE,6213,6361,357-138-1198-979,29.97,1920,1080,train
P4vKV-G3hGE,6381,6654,396-189-1245-1038,29.97,1920,1080,train
P4vKV-G3hGE,6877,7122,375-180-1215-1020,29.97,1920,1080,train
P4vKV-G3hGE,7122,7250,238-172-1087-1021,29.97,1920,1080,train
P4vKV-G3hGE,7251,7541,190-146-1030-986,29.97,1920,1080,train
P4vKV-G3hGE,7782,8012,208-67-1179-1038,29.97,1920,1080,train
P4vKV-G3hGE,8735,8939,472-124-1397-1049,29.97,1920,1080,train
P4vKV-G3hGE,8939,9583,200-172-1071-1043,29.97,1920,1080,train
P4vKV-G3hGE,9707,9896,331-115-1149-933,29.97,1920,1080,train
P4vKV-G3hGE,10209,10491,440-116-1296-972,29.97,1920,1080,train
P4vKV-G3hGE,10529,10754,361-178-1168-985,29.97,1920,1080,train
P4vKV-G3hGE,10953,11209,23-165-920-1062,29.97,1920,1080,train
P4vKV-G3hGE,11209,11419,86-122-998-1034,29.97,1920,1080,train
P4vKV-G3hGE,11505,11735,204-111-1154-1061,29.97,1920,1080,train
P4vKV-G3hGE,11841,12014,337-119-1256-1038,29.97,1920,1080,train
P4vKV-G3hGE,12014,12430,272-124-1220-1072,29.97,1920,1080,train
P4vKV-G3hGE,12871,13029,253-103-1226-1076,29.97,1920,1080,train
P4vKV-G3hGE,13615,13753,270-91-1256-1077,29.97,1920,1080,train
P4vKV-G3hGE,13912,14056,199-96-1183-1080,29.97,1920,1080,train
P4vKV-G3hGE,14659,14813,107-57-1119-1069,29.97,1920,1080,train
P4vKV-G3hGE,15277,15599,133-17-1142-1026,29.97,1920,1080,train
P4vKV-G3hGE,15744,15999,254-31-1234-1011,29.97,1920,1080,train
P4vKV-G3hGE,16759,16906,114-48-955-889,29.97,1920,1080,train
P4vKV-G3hGE,18069,18488,99-98-969-968,29.97,1920,1080,train
P4vKV-G3hGE,19055,19352,253-139-1085-971,29.97,1920,1080,train
P4vKV-G3hGE,19352,19586,177-183-965-971,29.97,1920,1080,train
P4vKV-G3hGE,19890,20019,106-96-855-845,29.97,1920,1080,train
P4vKV-G3hGE,20160,20364,422-68-1213-859,29.97,1920,1080,train
P4vKV-G3hGE,20517,20810,423-165-1203-945,29.97,1920,1080,train
P4vKV-G3hGE,20851,20984,373-84-1201-912,29.97,1920,1080,train
P4vKV-G3hGE,21140,21382,117-63-949-895,29.97,1920,1080,train
P4vKV-G3hGE,21722,21912,174-142-982-950,29.97,1920,1080,train
8hLvlQrXI6U,7700,7984,132-38-546-452,29.97,640,480,test
8hLvlQrXI6U,8247,8392,155-43-560-448,29.97,640,480,test
8hLvlQrXI6U,8872,9001,97-24-536-463,29.97,640,480,test
Rrwo_EH5k30,0,348,524-251-1324-1051,29.97,1920,1080,train
Rrwo_EH5k30,348,1372,556-207-1406-1057,29.97,1920,1080,train
Rrwo_EH5k30,1372,2189,562-217-1388-1043,29.97,1920,1080,train
Rrwo_EH5k30,2203,2561,408-60-1418-1070,29.97,1920,1080,train
Rrwo_EH5k30,2622,3069,463-95-1432-1064,29.97,1920,1080,train
Rrwo_EH5k30,3069,3294,484-36-1510-1062,29.97,1920,1080,train
Rrwo_EH5k30,3423,4447,457-24-1499-1066,29.97,1920,1080,train
Rrwo_EH5k30,4508,5532,441-41-1469-1069,29.97,1920,1080,train
Rrwo_EH5k30,5708,6732,404-128-1343-1067,29.97,1920,1080,train
Rrwo_EH5k30,6732,7756,559-268-1339-1048,29.97,1920,1080,train
c3ORapk0EH8,101,253,654-322-1241-909,25.0,1920,1080,train
c3ORapk0EH8,388,747,386-317-1021-952,25.0,1920,1080,train
c3ORapk0EH8,747,1031,393-262-1091-960,25.0,1920,1080,train
c3ORapk0EH8,1073,1208,635-307-1293-965,25.0,1920,1080,train
c3ORapk0EH8,1286,1488,646-234-1440-1028,25.0,1920,1080,train
c3ORapk0EH8,1538,1784,864-252-1611-999,25.0,1920,1080,train
c3ORapk0EH8,1869,2027,1152-302-1877-1027,25.0,1920,1080,train
c3ORapk0EH8,2224,2546,718-300-1368-950,25.0,1920,1080,train
c3ORapk0EH8,2717,2886,1055-369-1559-873,25.0,1920,1080,train
c3ORapk0EH8,2886,3031,1132-355-1655-878,25.0,1920,1080,train
c3ORapk0EH8,3066,3206,1059-371-1534-846,25.0,1920,1080,train
c3ORapk0EH8,3228,3361,1007-371-1475-839,25.0,1920,1080,train
c3ORapk0EH8,3565,3709,977-380-1445-848,25.0,1920,1080,train
c3ORapk0EH8,4362,4568,572-244-1335-1007,25.0,1920,1080,train
c3ORapk0EH8,4568,4707,416-301-1138-1023,25.0,1920,1080,train
c3ORapk0EH8,4716,4958,491-196-1336-1041,25.0,1920,1080,train
c3ORapk0EH8,7026,7156,609-116-1547-1054,25.0,1920,1080,train
c3ORapk0EH8,10140,10328,258-89-1228-1059,25.0,1920,1080,train
c3ORapk0EH8,10447,10713,688-237-1468-1017,25.0,1920,1080,train
c3ORapk0EH8,10713,10856,775-200-1576-1001,25.0,1920,1080,train
c3ORapk0EH8,10856,11314,617-252-1339-974,25.0,1920,1080,train
c3ORapk0EH8,11314,11502,641-216-1402-977,25.0,1920,1080,train
c3ORapk0EH8,11502,11764,802-260-1514-972,25.0,1920,1080,train
c3ORapk0EH8,12636,12805,361-6-1424-1069,25.0,1920,1080,train
c3ORapk0EH8,20720,20904,347-110-1183-946,25.0,1920,1080,train
c3ORapk0EH8,20904,21110,606-159-1291-844,25.0,1920,1080,train
5HNVxg4Vwzc,1629,1825,318-19-1013-714,29.97,1280,720,train
5HNVxg4Vwzc,2312,2467,339-69-975-705,29.97,1280,720,train
5HNVxg4Vwzc,3628,3817,314-49-978-713,29.97,1280,720,train
5HNVxg4Vwzc,4936,5141,298-26-963-691,29.97,1280,720,train
5HNVxg4Vwzc,7606,7739,417-95-944-622,29.97,1280,720,train
5HNVxg4Vwzc,8400,8540,467-82-1022-637,29.97,1280,720,train
5HNVxg4Vwzc,13192,13408,450-112-989-651,29.97,1280,720,train
5HNVxg4Vwzc,13902,14081,428-95-1016-683,29.97,1280,720,train
5HNVxg4Vwzc,14081,14349,453-66-1024-637,29.97,1280,720,train
5HNVxg4Vwzc,17828,18041,388-41-1061-714,29.97,1280,720,train
5HNVxg4Vwzc,18320,18615,261-11-955-705,29.97,1280,720,train
PjpHBRjIjpo,359,1026,569-167-1419-1017,29.97,1920,1080,train
PjpHBRjIjpo,1500,1679,853-180-1739-1066,29.97,1920,1080,train
PjpHBRjIjpo,1730,2519,856-151-1783-1078,29.97,1920,1080,train
PjpHBRjIjpo,2759,3318,851-216-1652-1017,29.97,1920,1080,train
PjpHBRjIjpo,3318,3981,655-174-1467-986,29.97,1920,1080,train
PjpHBRjIjpo,4199,4439,590-203-1406-1019,29.97,1920,1080,train
PjpHBRjIjpo,5039,5212,574-153-1417-996,29.97,1920,1080,train
4rv26XZJJsc,947,1131,80-64-447-431,25.0,640,480,train
7KzG5fmhdRE,208,655,195-23-613-441,30.0,854,480,train
7KzG5fmhdRE,655,1255,157-3-603-449,30.0,854,480,train
7KzG5fmhdRE,1255,2075,135-29-579-473,30.0,854,480,train
7KzG5fmhdRE,2075,2370,116-5-568-457,30.0,854,480,train
7KzG5fmhdRE,2370,2781,84-27-534-477,30.0,854,480,train
7KzG5fmhdRE,2781,2972,217-35-623-441,30.0,854,480,train
7KzG5fmhdRE,2972,3461,214-16-635-437,30.0,854,480,train
7KzG5fmhdRE,3461,4485,201-25-633-457,30.0,854,480,train
7KzG5fmhdRE,4485,4898,204-37-612-445,30.0,854,480,train
7KzG5fmhdRE,4898,5559,321-45-719-443,30.0,854,480,train
7KzG5fmhdRE,5559,6212,367-26-789-448,30.0,854,480,train
7KzG5fmhdRE,7236,7375,468-41-850-423,30.0,854,480,train
eR67awnEM2Q,0,551,941-315-1695-1069,30.0,1920,1080,train
eR67awnEM2Q,552,1125,996-339-1700-1043,30.0,1920,1080,train
eR67awnEM2Q,1125,1455,833-339-1547-1053,30.0,1920,1080,train
eR67awnEM2Q,1455,1768,1004-325-1717-1038,30.0,1920,1080,train
eR67awnEM2Q,1768,1964,800-352-1468-1020,30.0,1920,1080,train
eR67awnEM2Q,1964,2219,621-333-1319-1031,30.0,1920,1080,train
eR67awnEM2Q,2220,2390,530-343-1194-1007,30.0,1920,1080,train
eR67awnEM2Q,2390,2738,420-304-1135-1019,30.0,1920,1080,train
eR67awnEM2Q,2861,3017,444-288-1204-1048,30.0,1920,1080,train
eR67awnEM2Q,3017,3308,438-249-1234-1045,30.0,1920,1080,train
eR67awnEM2Q,3362,3659,523-317-1251-1045,30.0,1920,1080,train
eR67awnEM2Q,3713,3853,618-382-1277-1041,30.0,1920,1080,train
eR67awnEM2Q,3918,4070,555-262-1343-1050,30.0,1920,1080,train
eR67awnEM2Q,4281,4518,620-312-1370-1062,30.0,1920,1080,train
eR67awnEM2Q,4664,5329,330-290-1071-1031,30.0,1920,1080,train
eR67awnEM2Q,5466,5627,293-309-1014-1030,30.0,1920,1080,train
eR67awnEM2Q,5724,5872,319-295-1042-1018,30.0,1920,1080,train
eR67awnEM2Q,5985,6233,557-313-1290-1046,30.0,1920,1080,train
eR67awnEM2Q,6233,6436,729-323-1450-1044,30.0,1920,1080,train
eR67awnEM2Q,6497,6657,875-317-1614-1056,30.0,1920,1080,train
eR67awnEM2Q,6731,6923,690-309-1427-1046,30.0,1920,1080,train
eR67awnEM2Q,7368,7703,600-314-1320-1034,30.0,1920,1080,train
eR67awnEM2Q,7711,8132,551-189-1372-1010,30.0,1920,1080,train
eR67awnEM2Q,8144,8800,554-188-1374-1008,30.0,1920,1080,train
eR67awnEM2Q,8866,9143,946-335-1649-1038,30.0,1920,1080,train
eR67awnEM2Q,9245,9457,804-326-1521-1043,30.0,1920,1080,train
eR67awnEM2Q,9781,9973,963-306-1702-1045,30.0,1920,1080,train
eR67awnEM2Q,10377,10642,512-190-1387-1065,30.0,1920,1080,train
eR67awnEM2Q,10642,10838,830-328-1573-1071,30.0,1920,1080,train
eR67awnEM2Q,10838,11058,823-291-1600-1068,30.0,1920,1080,train
eR67awnEM2Q,11064,11557,760-190-1643-1073,30.0,1920,1080,train
agjeMK0otQA,1570,2233,330-57-744-471,29.97,854,480,train
agjeMK0otQA,2843,3867,298-46-726-474,29.97,854,480,train
agjeMK0otQA,3867,4891,272-47-699-474,29.97,854,480,train
agjeMK0otQA,4891,5341,282-45-696-459,29.97,854,480,train
agjeMK0otQA,5381,5681,256-43-640-427,29.97,854,480,train
agjeMK0otQA,5681,6235,295-25-702-432,29.97,854,480,train
agjeMK0otQA,6235,6425,354-37-770-453,29.97,854,480,train
agjeMK0otQA,6425,6654,351-60-764-473,29.97,854,480,train
agjeMK0otQA,6654,7658,254-39-695-480,29.97,854,480,train
agjeMK0otQA,7660,7885,261-56-634-429,29.97,854,480,train
agjeMK0otQA,7885,8133,274-36-686-448,29.97,854,480,train
agjeMK0otQA,8133,8350,339-60-746-467,29.97,854,480,train
agjeMK0otQA,9042,9256,230-59-598-427,29.97,854,480,train
agjeMK0otQA,9300,9576,210-40-607-437,29.97,854,480,train
agjeMK0otQA,9576,9761,251-37-671-457,29.97,854,480,train
agjeMK0otQA,9761,9961,277-57-697-477,29.97,854,480,train
agjeMK0otQA,10698,10877,204-53-580-429,29.97,854,480,train
agjeMK0otQA,10877,11400,166-33-566-433,29.97,854,480,train
Yqt573H689c,26,451,552-103-1389-940,29.97,1920,1080,train
Yqt573H689c,451,1475,527-120-1388-981,29.97,1920,1080,train
Yqt573H689c,1475,2499,558-114-1416-972,29.97,1920,1080,train
Yqt573H689c,2499,2748,390-118-1263-991,29.97,1920,1080,train
Yqt573H689c,2748,3053,632-127-1486-981,29.97,1920,1080,train
Yqt573H689c,3053,3505,510-181-1305-976,29.97,1920,1080,train
Yqt573H689c,3632,4437,368-93-1305-1030,29.97,1920,1080,train
Yqt573H689c,4437,4955,593-157-1422-986,29.97,1920,1080,train
Yqt573H689c,5076,5278,368-178-1213-1023,29.97,1920,1080,train
Yqt573H689c,5280,6000,441-139-1294-992,29.97,1920,1080,train
Yqt573H689c,6316,6655,569-139-1452-1022,29.97,1920,1080,train
Yqt573H689c,6655,7166,502-143-1378-1019,29.97,1920,1080,train
Yqt573H689c,7216,7770,295-143-1154-1002,29.97,1920,1080,train
Yqt573H689c,7770,8169,170-141-1037-1008,29.97,1920,1080,train
Yqt573H689c,8169,8931,285-99-1197-1011,29.97,1920,1080,train
Yqt573H689c,8932,9127,366-99-1253-986,29.97,1920,1080,train
Yqt573H689c,9249,9501,207-74-1166-1033,29.97,1920,1080,train
Yqt573H689c,9872,10034,635-107-1471-943,29.97,1920,1080,train
Yqt573H689c,10190,10701,454-92-1392-1030,29.97,1920,1080,train
Yqt573H689c,10809,10959,329-119-1262-1052,29.97,1920,1080,train
Yqt573H689c,10987,11199,369-37-1388-1056,29.97,1920,1080,train
Yqt573H689c,11954,12168,544-64-1528-1048,29.97,1920,1080,train
Yqt573H689c,12291,12578,317-59-1270-1012,29.97,1920,1080,train
Yqt573H689c,12651,12823,517-108-1442-1033,29.97,1920,1080,train
Yqt573H689c,12860,13884,745-81-1715-1051,29.97,1920,1080,train
Yqt573H689c,13884,14560,613-142-1474-1003,29.97,1920,1080,train
Yqt573H689c,14560,14973,470-90-1397-1017,29.97,1920,1080,train
Yqt573H689c,14973,15474,547-44-1549-1046,29.97,1920,1080,train
Yqt573H689c,15475,15624,845-72-1755-982,29.97,1920,1080,train
Yqt573H689c,15624,16648,759-77-1707-1025,29.97,1920,1080,train
Yqt573H689c,16720,17044,777-134-1595-952,29.97,1920,1080,train
Yqt573H689c,17044,17241,871-93-1714-936,29.97,1920,1080,train
Yqt573H689c,17241,17782,675-101-1488-914,29.97,1920,1080,train
Yqt573H689c,17827,17967,902-146-1624-868,29.97,1920,1080,train
Yqt573H689c,18096,18306,718-77-1563-922,29.97,1920,1080,train
Yqt573H689c,18306,18617,516-109-1358-951,29.97,1920,1080,train
Yqt573H689c,18617,19217,678-104-1565-991,29.97,1920,1080,train
Yqt573H689c,19217,19855,638-47-1581-990,29.97,1920,1080,train
Yqt573H689c,19865,20797,802-73-1701-972,29.97,1920,1080,train
-p3QMYa_buo,150,938,81-5-537-461,29.97,640,480,train
-p3QMYa_buo,1203,1654,110-18-539-447,29.97,640,480,train
-p3QMYa_buo,1912,2095,120-24-547-451,29.97,640,480,train
-p3QMYa_buo,2100,2289,141-30-567-456,29.97,640,480,train
-p3QMYa_buo,2479,2808,127-14-568-455,29.97,640,480,train
-p3QMYa_buo,3029,3329,129-18-569-458,29.97,640,480,train
-p3QMYa_buo,3482,3819,120-33-537-450,29.97,640,480,train
-p3QMYa_buo,4004,4138,106-30-530-454,29.97,640,480,train
-p3QMYa_buo,4148,4302,134-26-569-461,29.97,640,480,train
-p3QMYa_buo,4503,4832,119-30-544-455,29.97,640,480,train
-p3QMYa_buo,5060,6084,110-27-538-455,29.97,640,480,train
-p3QMYa_buo,6084,6735,85-40-503-458,29.97,640,480,train
-p3QMYa_buo,6960,7340,135-25-563-453,29.97,640,480,train
-p3QMYa_buo,7522,7686,142-34-558-450,29.97,640,480,train
-p3QMYa_buo,7686,8423,114-41-543-470,29.97,640,480,train
-p3QMYa_buo,9274,9472,146-38-574-466,29.97,640,480,train
-p3QMYa_buo,9656,9945,137-25-569-457,29.97,640,480,train
-p3QMYa_buo,10107,10466,111-39-532-460,29.97,640,480,train
-p3QMYa_buo,10648,10799,96-0-530-434,29.97,640,480,train
-p3QMYa_buo,10799,11285,95-12-537-454,29.97,640,480,train
-p3QMYa_buo,11285,11772,78-27-526-475,29.97,640,480,train
E93J3Gtrxhs,122,445,933-277-1711-1055,29.97,1920,1080,train
E93J3Gtrxhs,593,744,917-283-1623-989,29.97,1920,1080,train
E93J3Gtrxhs,1344,1780,935-236-1742-1043,29.97,1920,1080,train
E93J3Gtrxhs,1979,2334,752-188-1622-1058,29.97,1920,1080,train
E93J3Gtrxhs,2334,2594,944-247-1724-1027,29.97,1920,1080,train
E93J3Gtrxhs,3390,3530,646-21-1585-960,29.97,1920,1080,train
E93J3Gtrxhs,5189,5360,332-34-1310-1012,29.97,1920,1080,train
E93J3Gtrxhs,5360,5537,324-141-1238-1055,29.97,1920,1080,train
ytT4iU7h-A8,1778,2049,93-28-1078-1013,29.97,1920,1080,train
ytT4iU7h-A8,2049,2389,309-80-1286-1057,29.97,1920,1080,train
ytT4iU7h-A8,2563,2880,70-43-1049-1022,29.97,1920,1080,train
ytT4iU7h-A8,2880,3044,71-116-891-936,29.97,1920,1080,train
ytT4iU7h-A8,3439,3635,206-70-1172-1036,29.97,1920,1080,train
ytT4iU7h-A8,3664,3887,245-24-1282-1061,29.97,1920,1080,train
ytT4iU7h-A8,3990,4119,383-21-1422-1060,29.97,1920,1080,train
ytT4iU7h-A8,4127,4291,215-78-1212-1075,29.97,1920,1080,train
ytT4iU7h-A8,4865,5048,397-27-1440-1070,29.97,1920,1080,train
ytT4iU7h-A8,6173,6517,424-8-1491-1075,29.97,1920,1080,train
ytT4iU7h-A8,6884,7149,407-125-1346-1064,29.97,1920,1080,train
ytT4iU7h-A8,10804,11024,262-47-1287-1072,29.97,1920,1080,train
sjzfA4dYMfg,1769,2003,310-10-1014-714,25.0,1280,720,train
sjzfA4dYMfg,2303,2447,283-15-982-714,25.0,1280,720,train
MHWHMZ1N8rk,0,1024,133-50-470-387,30.0,640,480,train
MHWHMZ1N8rk,1024,1191,140-48-475-383,30.0,640,480,train
MHWHMZ1N8rk,1914,2938,138-48-474-384,30.0,640,480,train
MHWHMZ1N8rk,2938,3962,133-42-475-384,30.0,640,480,train
MHWHMZ1N8rk,3962,4666,142-49-475-382,30.0,640,480,train
MHWHMZ1N8rk,4759,5246,149-54-477-382,30.0,640,480,train
MHWHMZ1N8rk,5246,6153,124-37-473-386,30.0,640,480,train
MHWHMZ1N8rk,6293,6513,131-47-467-383,30.0,640,480,train
MHWHMZ1N8rk,7196,7434,131-36-480-385,30.0,640,480,train
MHWHMZ1N8rk,7445,8469,133-42-475-384,30.0,640,480,train
MHWHMZ1N8rk,8469,8848,137-40-476-379,30.0,640,480,train
MHWHMZ1N8rk,8857,9562,138-33-487-382,30.0,640,480,train
cEOS2zoyQw4,2285,2500,276-24-949-697,25.0,1280,720,train
cEOS2zoyQw4,2587,2818,276-28-957-709,25.0,1280,720,train
cEOS2zoyQw4,2831,2976,298-42-955-699,25.0,1280,720,train
cEOS2zoyQw4,3492,3670,322-37-1000-715,25.0,1280,720,train
cEOS2zoyQw4,3724,4006,327-17-1001-691,25.0,1280,720,train
cEOS2zoyQw4,5678,6155,423-54-1087-718,25.0,1280,720,train
cEOS2zoyQw4,7372,7525,320-42-978-700,25.0,1280,720,train
cEOS2zoyQw4,7536,7742,308-21-1006-719,25.0,1280,720,train
cEOS2zoyQw4,8918,9068,269-25-921-677,25.0,1280,720,train
cEOS2zoyQw4,9648,10267,299-15-977-693,25.0,1280,720,train
cEOS2zoyQw4,10820,11648,298-4-977-683,25.0,1280,720,train
cEOS2zoyQw4,12796,13029,194-58-856-720,25.0,1280,720,train
cEOS2zoyQw4,13575,13853,284-12-986-714,25.0,1280,720,train
cEOS2zoyQw4,13965,14104,285-19-977-711,25.0,1280,720,train
cEOS2zoyQw4,15149,15819,300-15-989-704,25.0,1280,720,train
cEOS2zoyQw4,16021,16153,259-14-954-709,25.0,1280,720,train
jxAD7rOqDZs,323,483,320-80-817-577,29.97,1280,720,train
jxAD7rOqDZs,483,743,316-96-821-601,29.97,1280,720,train
jxAD7rOqDZs,961,1178,191-71-743-623,29.97,1280,720,train
jxAD7rOqDZs,1376,1661,121-152-598-629,29.97,1280,720,train
jxAD7rOqDZs,1705,1862,2-117-505-620,29.97,1280,720,train
jxAD7rOqDZs,2057,2234,253-128-748-623,29.97,1280,720,train
58m6HTXpBz8,1172,1382,576-137-1364-925,25.0,1920,1080,train
58m6HTXpBz8,1552,1772,508-128-1331-951,25.0,1920,1080,train
58m6HTXpBz8,2203,2352,873-37-1721-885,25.0,1920,1080,train
aOk2Diz9C9g,3328,3464,139-48-486-395,25.0,640,480,train
ZBVzUnF9eXU,31,658,157-99-505-447,30.0,640,480,train
ZBVzUnF9eXU,678,889,161-125-496-460,30.0,640,480,train
ZBVzUnF9eXU,955,1200,114-69-517-472,30.0,640,480,train
ZBVzUnF9eXU,1397,1610,104-156-396-448,30.0,640,480,train
ZBVzUnF9eXU,1803,2097,68-120-399-451,30.0,640,480,train
bXz9ZSVlSKo,149,484,160-96-514-450,25.0,600,480,train
bXz9ZSVlSKo,789,1596,149-82-519-452,25.0,600,480,train
bXz9ZSVlSKo,1607,1761,140-44-552-456,25.0,600,480,train
bXz9ZSVlSKo,2458,2612,165-107-508-450,25.0,600,480,train
bXz9ZSVlSKo,2824,2986,168-113-506-451,25.0,600,480,train
bXz9ZSVlSKo,2986,3118,159-96-513-450,25.0,600,480,train
bXz9ZSVlSKo,3268,3578,157-93-516-452,25.0,600,480,train
bXz9ZSVlSKo,3793,4046,158-93-516-451,25.0,600,480,train
bXz9ZSVlSKo,4169,5047,141-58-538-455,25.0,600,480,train
bXz9ZSVlSKo,5047,5254,137-35-561-459,25.0,600,480,train
bXz9ZSVlSKo,5322,5477,155-85-521-451,25.0,600,480,train
bXz9ZSVlSKo,5995,6214,155-89-518-452,25.0,600,480,train
bXz9ZSVlSKo,6315,6591,166-110-509-453,25.0,600,480,train
bXz9ZSVlSKo,6819,7523,159-95-516-452,25.0,600,480,train
bXz9ZSVlSKo,7530,8444,139-55-540-456,25.0,600,480,train
bXz9ZSVlSKo,8444,8973,127-30-561-464,25.0,600,480,train
bXz9ZSVlSKo,9083,9241,167-110-504-447,25.0,600,480,train
bXz9ZSVlSKo,9241,10265,150-87-521-458,25.0,600,480,train
bXz9ZSVlSKo,10265,10536,161-95-515-449,25.0,600,480,train
5dsMA7KF_b0,150,1095,510-144-1245-879,29.97,1920,1080,train
5dsMA7KF_b0,1297,1490,922-217-1549-844,29.97,1920,1080,train
5dsMA7KF_b0,1758,2065,832-212-1476-856,29.97,1920,1080,train
5dsMA7KF_b0,2479,2648,987-324-1525-862,29.97,1920,1080,train
5dsMA7KF_b0,2712,2928,944-305-1504-865,29.97,1920,1080,train
5dsMA7KF_b0,3152,3338,706-298-1295-887,29.97,1920,1080,train
5dsMA7KF_b0,3890,4052,779-236-1385-842,29.97,1920,1080,train
5dsMA7KF_b0,4646,4972,773-221-1368-816,29.97,1920,1080,train
5dsMA7KF_b0,5095,5246,796-235-1372-811,29.97,1920,1080,train
5dsMA7KF_b0,5306,5472,793-207-1405-819,29.97,1920,1080,train
5dsMA7KF_b0,6092,6255,978-316-1535-873,29.97,1920,1080,train
5dsMA7KF_b0,6368,6561,1026-306-1587-867,29.97,1920,1080,train
5dsMA7KF_b0,6561,6739,1101-359-1634-892,29.97,1920,1080,train
5dsMA7KF_b0,7949,8091,278-176-951-849,29.97,1920,1080,train
5dsMA7KF_b0,8632,8819,531-178-1231-878,29.97,1920,1080,train
5dsMA7KF_b0,8920,9234,836-194-1513-871,29.97,1920,1080,train
5dsMA7KF_b0,9347,9648,782-175-1489-882,29.97,1920,1080,train
5dsMA7KF_b0,9648,9940,736-139-1479-882,29.97,1920,1080,train
8xSkbMUpegs,1680,1920,322-89-923-690,29.97,1280,720,train
8xSkbMUpegs,2185,2400,221-75-866-720,29.97,1280,720,train
8xSkbMUpegs,2926,3144,294-14-946-666,29.97,1280,720,train
8xSkbMUpegs,3160,3323,414-78-998-662,29.97,1280,720,train
8xSkbMUpegs,3476,3697,330-56-946-672,29.97,1280,720,train
8xSkbMUpegs,3840,4000,475-90-1015-630,29.97,1280,720,train
8xSkbMUpegs,4406,4565,671-106-1149-584,29.97,1280,720,train
8xSkbMUpegs,4665,4800,620-10-1151-541,29.97,1280,720,train
8xSkbMUpegs,5365,5640,516-89-1017-590,29.97,1280,720,train
8xSkbMUpegs,8569,8907,254-32-868-646,29.97,1280,720,train
8xSkbMUpegs,9625,9880,393-65-983-655,29.97,1280,720,train
8xSkbMUpegs,11849,12000,383-70-988-675,29.97,1280,720,train
aJjr_OD8M4A,17249,18273,487-168-1397-1078,29.97,1920,1080,train
A-0smsWdrog,0,480,569-143-1343-917,30.0,1920,1080,train
A-0smsWdrog,1500,1679,857-45-1658-846,30.0,1920,1080,train
A-0smsWdrog,2998,3130,706-107-1468-869,30.0,1920,1080,train
A-0smsWdrog,4667,4854,485-97-1399-1011,30.0,1920,1080,train
A-0smsWdrog,5370,5700,370-106-1287-1023,30.0,1920,1080,train
A-0smsWdrog,6405,6555,266-162-1023-919,30.0,1920,1080,train
A-0smsWdrog,6922,7079,646-135-1439-928,30.0,1920,1080,train
A-0smsWdrog,7980,8162,448-31-1443-1026,30.0,1920,1080,train
A-0smsWdrog,10538,10674,172-129-960-917,30.0,1920,1080,train
A-0smsWdrog,11346,11477,595-223-1293-921,30.0,1920,1080,train
w2awOCDRtrc,1729,2009,120-40-509-429,25.0,640,480,test
w2awOCDRtrc,3059,3190,139-32-540-433,25.0,640,480,test
sSNvvVqnd_8,46,262,75-79-458-462,25.0,640,480,train
sSNvvVqnd_8,1286,2310,130-77-518-465,25.0,640,480,train
sSNvvVqnd_8,2397,3014,195-71-587-463,25.0,640,480,train
sSNvvVqnd_8,3099,3708,102-79-491-468,25.0,640,480,train
sSNvvVqnd_8,3708,4423,202-96-565-459,25.0,640,480,train
sSNvvVqnd_8,4423,5042,144-72-527-455,25.0,640,480,train
sSNvvVqnd_8,5208,5376,194-91-548-445,25.0,640,480,train
sSNvvVqnd_8,5376,5577,182-89-547-454,25.0,640,480,train
sSNvvVqnd_8,5700,6078,139-84-501-446,25.0,640,480,train
sSNvvVqnd_8,6188,6990,119-87-494-462,25.0,640,480,train
sSNvvVqnd_8,7131,7297,99-49-527-477,25.0,640,480,train
sSNvvVqnd_8,7297,8321,93-78-488-473,25.0,640,480,train
sSNvvVqnd_8,8321,8851,95-93-461-459,25.0,640,480,train
sSNvvVqnd_8,8863,9145,165-89-543-467,25.0,640,480,train
sSNvvVqnd_8,9704,9982,194-70-599-475,25.0,640,480,train
sSNvvVqnd_8,9982,10197,105-105-461-461,25.0,640,480,train
sSNvvVqnd_8,10197,10363,63-87-431-455,25.0,640,480,train
sSNvvVqnd_8,10363,10503,164-96-537-469,25.0,640,480,train
sSNvvVqnd_8,10503,10878,185-95-552-462,25.0,640,480,train
AYrUqlwE6n8,0,1024,372-66-999-693,29.97,1280,720,train
AYrUqlwE6n8,1024,2048,354-71-981-698,29.97,1280,720,train
AYrUqlwE6n8,2069,3093,458-125-901-568,29.97,1280,720,train
AYrUqlwE6n8,3093,4117,464-126-903-565,29.97,1280,720,train
AYrUqlwE6n8,4117,5141,375-136-801-562,29.97,1280,720,train
AYrUqlwE6n8,5141,6165,439-138-869-568,29.97,1280,720,train
AYrUqlwE6n8,6165,6328,459-144-898-583,29.97,1280,720,train
AYrUqlwE6n8,6328,6814,510-149-965-604,29.97,1280,720,train
AYrUqlwE6n8,6814,7800,423-138-908-623,29.97,1280,720,train
AYrUqlwE6n8,7800,7965,285-132-800-647,29.97,1280,720,train
AYrUqlwE6n8,7965,8449,366-130-900-664,29.97,1280,720,train
AYrUqlwE6n8,8662,8951,352-94-919-661,29.97,1280,720,train
AYrUqlwE6n8,8985,9166,424-110-892-578,29.97,1280,720,train
AYrUqlwE6n8,9166,10190,443-111-933-601,29.97,1280,720,train
AYrUqlwE6n8,10190,10622,499-144-961-606,29.97,1280,720,train
AYrUqlwE6n8,10677,11366,285-104-836-655,29.97,1280,720,train
AYrUqlwE6n8,11573,12431,401-113-934-646,29.97,1280,720,train
AYrUqlwE6n8,12487,13329,423-112-925-614,29.97,1280,720,train
AYrUqlwE6n8,13329,13960,433-123-947-637,29.97,1280,720,train
AYrUqlwE6n8,14060,14200,278-124-803-649,29.97,1280,720,train
AYrUqlwE6n8,14200,14467,384-139-886-641,29.97,1280,720,train
AYrUqlwE6n8,14531,15555,331-99-893-661,29.97,1280,720,train
AYrUqlwE6n8,15555,16177,433-134-963-664,29.97,1280,720,train
AYrUqlwE6n8,16218,16904,409-124-946-661,29.97,1280,720,train
AYrUqlwE6n8,16904,17928,411-97-981-667,29.97,1280,720,train
AYrUqlwE6n8,17928,18468,371-102-910-641,29.97,1280,720,train
AYrUqlwE6n8,18470,19494,466-118-915-567,29.97,1280,720,train
AYrUqlwE6n8,19494,20243,386-146-817-577,29.97,1280,720,train
AYrUqlwE6n8,20243,20397,436-158-875-597,29.97,1280,720,train
AYrUqlwE6n8,20425,20884,496-100-1004-608,29.97,1280,720,train
AYrUqlwE6n8,20936,21373,444-133-953-642,29.97,1280,720,train
AYrUqlwE6n8,21564,22588,386-115-959-688,29.97,1280,720,train
AYrUqlwE6n8,22667,23691,372-137-875-640,29.97,1280,720,train
AYrUqlwE6n8,23691,23952,344-128-871-655,29.97,1280,720,train
AYrUqlwE6n8,23952,24976,360-96-906-642,29.97,1280,720,train
AYrUqlwE6n8,24976,25214,398-146-872-620,29.97,1280,720,train
AYrUqlwE6n8,25405,25694,388-126-936-674,29.97,1280,720,train
AYrUqlwE6n8,26008,26995,355-70-971-686,29.97,1280,720,train
KrsQLNWK9Jc,1022,1224,508-135-1074-701,22.0,1280,720,train
KrsQLNWK9Jc,1422,1572,582-140-1132-690,22.0,1280,720,train
KrsQLNWK9Jc,1572,1747,504-146-1045-687,22.0,1280,720,train
KrsQLNWK9Jc,1747,1963,353-151-906-704,22.0,1280,720,train
KrsQLNWK9Jc,1963,2106,232-156-775-699,22.0,1280,720,train
KrsQLNWK9Jc,2243,2493,208-144-765-701,22.0,1280,720,train
KrsQLNWK9Jc,2864,3057,362-128-927-693,22.0,1280,720,train
KrsQLNWK9Jc,3057,3240,482-138-1025-681,22.0,1280,720,train
KrsQLNWK9Jc,3258,3455,329-109-903-683,22.0,1280,720,train
KrsQLNWK9Jc,4401,4669,379-153-939-713,22.0,1280,720,train
KrsQLNWK9Jc,4769,5021,321-103-918-700,22.0,1280,720,train
ItJsAxi-vME,5870,6028,239-172-636-569,29.97,1280,720,train
ItJsAxi-vME,7041,7281,375-161-769-555,29.97,1280,720,train
ItJsAxi-vME,8469,8631,703-135-1002-434,29.97,1280,720,train
ItJsAxi-vME,9463,9608,352-41-814-503,29.97,1280,720,train
ItJsAxi-vME,9764,9911,228-64-637-473,29.97,1280,720,train
ItJsAxi-vME,10068,10212,149-91-661-603,29.97,1280,720,train
ItJsAxi-vME,10709,10923,90-161-585-656,29.97,1280,720,train
ItJsAxi-vME,11152,11322,159-157-613-611,29.97,1280,720,train
ItJsAxi-vME,11975,12127,261-126-728-593,29.97,1280,720,train
ItJsAxi-vME,13625,13900,38-72-592-626,29.97,1280,720,train
ItJsAxi-vME,14683,14828,137-133-557-553,29.97,1280,720,train
ItJsAxi-vME,15953,16769,638-139-1160-661,29.97,1280,720,train
ItJsAxi-vME,17286,17440,616-147-1049-580,29.97,1280,720,train
ItJsAxi-vME,18233,18396,178-162-657-641,29.97,1280,720,train
ItJsAxi-vME,19329,19556,315-180-806-671,29.97,1280,720,train
ItJsAxi-vME,19847,20146,370-144-910-684,29.97,1280,720,train
ItJsAxi-vME,20251,20435,571-124-1094-647,29.97,1280,720,train
ItJsAxi-vME,21527,21664,634-153-1036-555,29.97,1280,720,train
ItJsAxi-vME,24016,24192,386-138-888-640,29.97,1280,720,train
ItJsAxi-vME,25569,25723,569-200-894-525,29.97,1280,720,train
ItJsAxi-vME,25924,26119,670-182-1021-533,29.97,1280,720,train
ItJsAxi-vME,26119,26272,605-163-986-544,29.97,1280,720,train
DdscFyAZurI,20,380,125-127-400-402,25.0,640,480,train
DdscFyAZurI,500,648,152-142-459-449,25.0,640,480,train
DdscFyAZurI,648,864,175-175-452-452,25.0,640,480,train
DdscFyAZurI,1999,2159,144-59-550-465,25.0,640,480,train
DdscFyAZurI,4384,4536,196-71-582-457,25.0,640,480,train
DdscFyAZurI,4627,5001,280-106-600-426,25.0,640,480,train
DdscFyAZurI,5004,5184,262-99-581-418,25.0,640,480,train
DdscFyAZurI,5499,5663,153-88-534-469,25.0,640,480,train
O3aNcFLu-98,6102,6322,244-25-770-551,29.97,1280,720,train
O3aNcFLu-98,8088,8228,169-98-696-625,29.97,1280,720,train
O3aNcFLu-98,9710,9877,159-115-616-572,29.97,1280,720,train
O3aNcFLu-98,10465,10632,607-45-1173-611,29.97,1280,720,train
O3aNcFLu-98,11283,11453,127-71-652-596,29.97,1280,720,train
O3aNcFLu-98,11654,11905,161-102-662-603,29.97,1280,720,train
O3aNcFLu-98,12747,12888,349-44-904-599,29.97,1280,720,train
WvpZGirYxi0,299,894,394-217-1161-984,24.0,1920,1080,train
WvpZGirYxi0,957,1087,120-208-897-985,24.0,1920,1080,train
WvpZGirYxi0,1122,1589,285-222-1139-1076,24.0,1920,1080,train
WvpZGirYxi0,1615,2185,94-199-886-991,24.0,1920,1080,train
WvpZGirYxi0,2258,2808,289-166-1152-1029,24.0,1920,1080,train
WvpZGirYxi0,2869,3043,633-231-1402-1000,24.0,1920,1080,train
WvpZGirYxi0,3273,3460,1047-180-1862-995,24.0,1920,1080,train
WvpZGirYxi0,3607,3803,1034-126-1889-981,24.0,1920,1080,train
zHsLRAPJkMM,0,200,826-534-1324-1032,29.97,1920,1080,train
zHsLRAPJkMM,322,617,832-543-1326-1037,29.97,1920,1080,train
zHsLRAPJkMM,5037,5166,992-497-1573-1078,29.97,1920,1080,train
zHsLRAPJkMM,5442,5645,1008-477-1609-1078,29.97,1920,1080,train
zHsLRAPJkMM,6089,6218,959-466-1490-997,29.97,1920,1080,train
zHsLRAPJkMM,8064,8382,696-172-1569-1045,29.97,1920,1080,train
zHsLRAPJkMM,8638,8853,601-337-1199-935,29.97,1920,1080,train
zHsLRAPJkMM,10071,10220,826-496-1377-1047,29.97,1920,1080,train
zHsLRAPJkMM,10896,11027,905-511-1417-1023,29.97,1920,1080,train
zHsLRAPJkMM,12402,12685,939-445-1509-1015,29.97,1920,1080,train
zHsLRAPJkMM,14839,14978,603-468-1081-946,29.97,1920,1080,train
zHsLRAPJkMM,17023,17198,471-536-997-1062,29.97,1920,1080,train
zHsLRAPJkMM,17754,17912,158-463-723-1028,29.97,1920,1080,train
zHsLRAPJkMM,19418,19631,486-520-1003-1037,29.97,1920,1080,train
zHsLRAPJkMM,20948,21279,664-371-1366-1073,29.97,1920,1080,train
zHsLRAPJkMM,22932,23113,1082-460-1673-1051,29.97,1920,1080,train
zHsLRAPJkMM,23113,23307,1032-518-1559-1045,29.97,1920,1080,train
zHsLRAPJkMM,23519,23658,617-451-1243-1077,29.97,1920,1080,train
zHsLRAPJkMM,25274,25419,847-466-1411-1030,29.97,1920,1080,train
zHsLRAPJkMM,25581,25755,708-512-1236-1040,29.97,1920,1080,train
zHsLRAPJkMM,25880,26011,870-474-1476-1080,29.97,1920,1080,train
zHsLRAPJkMM,26291,26430,787-546-1258-1017,29.97,1920,1080,train
zHsLRAPJkMM,26438,26583,832-506-1317-991,29.97,1920,1080,train
zHsLRAPJkMM,26846,27055,1108-477-1544-913,29.97,1920,1080,train
l_faFvmpDrM,366,725,377-35-1044-702,30.0,1280,720,train
xMYVjC4Ip3I,433,1457,156-84-484-412,25.0,640,480,train
xMYVjC4Ip3I,1476,2500,163-89-480-406,25.0,640,480,train
xMYVjC4Ip3I,4829,5142,190-121-469-400,25.0,640,480,train
xMYVjC4Ip3I,5208,5373,182-97-487-402,25.0,640,480,train
xMYVjC4Ip3I,5477,6501,153-65-493-405,25.0,640,480,train
xMYVjC4Ip3I,6501,6931,180-109-474-403,25.0,640,480,train
xMYVjC4Ip3I,6931,7125,184-95-492-403,25.0,640,480,train
xMYVjC4Ip3I,7125,7294,158-78-490-410,25.0,640,480,train
xMYVjC4Ip3I,7294,8318,156-62-496-402,25.0,640,480,train
xMYVjC4Ip3I,8318,8973,168-78-493-403,25.0,640,480,train
42P58QDIgno,87,603,310-119-827-636,25.0,1280,720,train
42P58QDIgno,908,1041,244-153-778-687,25.0,1280,720,train
42P58QDIgno,1042,1187,231-87-826-682,25.0,1280,720,train
42P58QDIgno,1614,1758,330-111-896-677,25.0,1280,720,train
42P58QDIgno,1808,2164,395-94-950-649,25.0,1280,720,train
42P58QDIgno,2364,2529,442-142-912-612,25.0,1280,720,train
42P58QDIgno,2529,2772,468-198-903-633,25.0,1280,720,train
42P58QDIgno,3174,3372,409-145-942-678,25.0,1280,720,train
42P58QDIgno,3372,3564,469-115-1038-684,25.0,1280,720,train
42P58QDIgno,4120,4262,186-74-817-705,25.0,1280,720,train
42P58QDIgno,5174,5345,341-112-905-676,25.0,1280,720,train
42P58QDIgno,5791,5925,330-92-923-685,25.0,1280,720,train
42P58QDIgno,6079,6215,436-108-986-658,25.0,1280,720,train
42P58QDIgno,8471,8646,390-79-1017-706,25.0,1280,720,train
42P58QDIgno,8690,9030,220-15-919-714,25.0,1280,720,train
uCR05ckHiFE,72,1096,719-202-1367-850,29.97,1920,1080,train
uCR05ckHiFE,1275,1916,790-238-1328-776,29.97,1920,1080,train
uCR05ckHiFE,2238,2734,699-216-1274-791,29.97,1920,1080,train
uCR05ckHiFE,2897,3045,673-208-1290-825,29.97,1920,1080,train
uCR05ckHiFE,3267,3428,796-213-1355-772,29.97,1920,1080,train
uCR05ckHiFE,4254,4432,616-209-1198-791,29.97,1920,1080,train
uCR05ckHiFE,4432,4651,638-223-1233-818,29.97,1920,1080,train
uCR05ckHiFE,4659,4842,669-152-1371-854,29.97,1920,1080,train
uCR05ckHiFE,5001,5163,703-207-1380-884,29.97,1920,1080,train
uCR05ckHiFE,5204,5333,681-186-1330-835,29.97,1920,1080,train
uCR05ckHiFE,5606,5751,687-251-1307-871,29.97,1920,1080,train
uCR05ckHiFE,5828,5990,784-227-1365-808,29.97,1920,1080,train
uCR05ckHiFE,6206,6474,768-318-1327-877,29.97,1920,1080,train
uCR05ckHiFE,6906,7176,614-267-1301-954,29.97,1920,1080,train
_64NZbqcISg,0,199,141-101-426-386,25.0,640,480,train
cgcuo2lfdEc,0,163,270-151-780-661,29.97,1280,720,train
cgcuo2lfdEc,163,328,282-123-823-664,29.97,1280,720,train
cgcuo2lfdEc,360,500,236-65-822-651,29.97,1280,720,train
cgcuo2lfdEc,500,733,215-32-818-635,29.97,1280,720,train
cgcuo2lfdEc,774,1020,185-138-733-686,29.97,1280,720,train
cgcuo2lfdEc,1103,1363,295-141-833-679,29.97,1280,720,train
cgcuo2lfdEc,1363,1888,292-115-833-656,29.97,1280,720,train
cgcuo2lfdEc,1978,2250,225-22-876-673,29.97,1280,720,train
cgcuo2lfdEc,2501,2672,407-171-911-675,29.97,1280,720,train
cgcuo2lfdEc,2738,2890,354-114-924-684,29.97,1280,720,train
qBdCNti65Wc,1422,1929,97-43-528-474,29.97,640,480,train
qBdCNti65Wc,1929,2250,122-22-568-468,29.97,640,480,train
qBdCNti65Wc,2432,2700,70-15-527-472,29.97,640,480,train
qBdCNti65Wc,3119,3358,104-34-541-471,29.97,640,480,train
qBdCNti65Wc,3360,3536,108-68-511-471,29.97,640,480,train
qBdCNti65Wc,3895,4063,108-79-497-468,29.97,640,480,train
qBdCNti65Wc,5096,5385,104-57-512-465,29.97,640,480,train
qBdCNti65Wc,5385,6409,93-36-519-462,29.97,640,480,train
qBdCNti65Wc,6409,6778,111-85-489-463,29.97,640,480,train
qBdCNti65Wc,6877,7363,103-77-485-459,29.97,640,480,train
qBdCNti65Wc,7521,8545,110-48-528-466,29.97,640,480,train
qBdCNti65Wc,8667,9016,76-12-524-460,29.97,640,480,train
n1ic2Kxv0lo,600,750,115-71-522-478,30.0,640,480,train
n1ic2Kxv0lo,1650,1800,162-80-528-446,30.0,640,480,train
n1ic2Kxv0lo,1950,2100,178-82-548-452,30.0,640,480,train
n1ic2Kxv0lo,2400,2550,155-89-541-475,30.0,640,480,train
n1ic2Kxv0lo,2700,2850,155-85-534-464,30.0,640,480,train
n1ic2Kxv0lo,3450,3600,145-26-560-441,30.0,640,480,train
n1ic2Kxv0lo,3794,4050,131-37-560-466,30.0,640,480,train
n1ic2Kxv0lo,4502,4650,129-35-571-477,30.0,640,480,train
n1ic2Kxv0lo,4650,4800,103-28-537-462,30.0,640,480,train
n1ic2Kxv0lo,4848,5019,91-1-555-465,30.0,640,480,train
n1ic2Kxv0lo,5400,5597,121-27-569-475,30.0,640,480,train
n1ic2Kxv0lo,7820,7972,122-36-544-458,30.0,640,480,train
n1ic2Kxv0lo,8408,8550,131-66-536-471,30.0,640,480,train
n1ic2Kxv0lo,8700,9150,97-23-546-472,30.0,640,480,train
LfBbfOEVV3c,29,282,626-411-1153-938,25.0,1920,1080,train
LfBbfOEVV3c,593,746,530-399-1121-990,25.0,1920,1080,train
LfBbfOEVV3c,841,1175,616-431-1162-977,25.0,1920,1080,train
LfBbfOEVV3c,3916,4071,618-474-1138-994,25.0,1920,1080,train
LfBbfOEVV3c,4275,4429,624-482-1106-964,25.0,1920,1080,train
HOsiZya4deQ,3227,3396,98-1-559-462,25.0,640,480,train
HOsiZya4deQ,8561,8691,84-1-562-479,25.0,640,480,train
HOsiZya4deQ,8796,8924,96-5-543-452,25.0,640,480,train
e4VIw41R-PU,274,680,364-50-972-658,29.97,1280,720,train
e4VIw41R-PU,905,1121,330-93-946-709,29.97,1280,720,train
e4VIw41R-PU,1121,1433,267-57-887-677,29.97,1280,720,train
e4VIw41R-PU,1819,1969,225-64-867-706,29.97,1280,720,train
e4VIw41R-PU,2127,2262,155-78-794-717,29.97,1280,720,train
e4VIw41R-PU,2262,2508,282-49-897-664,29.97,1280,720,train
e4VIw41R-PU,2508,2701,209-101-807-699,29.97,1280,720,train
e4VIw41R-PU,2987,3140,203-55-834-686,29.97,1280,720,train
e4VIw41R-PU,5155,5286,364-69-962-667,29.97,1280,720,train
e4VIw41R-PU,5499,6211,355-50-1000-695,29.97,1280,720,train
e4VIw41R-PU,6225,6474,239-79-815-655,29.97,1280,720,train
e4VIw41R-PU,6602,7020,11-20-632-641,29.97,1280,720,train
e4VIw41R-PU,7194,7385,40-17-625-602,29.97,1280,720,train
e4VIw41R-PU,8660,8877,348-47-1004-703,29.97,1280,720,train
e4VIw41R-PU,9338,9537,302-102-854-654,29.97,1280,720,train
e4VIw41R-PU,9537,9785,390-127-921-658,29.97,1280,720,train
e4VIw41R-PU,9785,10060,477-118-1017-658,29.97,1280,720,train
e4VIw41R-PU,10085,10243,347-63-935-651,29.97,1280,720,train
j_UJ-M6KnLA,576,762,115-41-521-447,30.0,640,480,train
j_UJ-M6KnLA,1602,1755,85-56-481-452,30.0,640,480,train
j_UJ-M6KnLA,1779,1995,143-58-530-445,30.0,640,480,train
j_UJ-M6KnLA,2897,3026,183-40-590-447,30.0,640,480,train
j_UJ-M6KnLA,3273,3434,118-56-505-443,30.0,640,480,train
j_UJ-M6KnLA,3994,4201,149-84-500-435,30.0,640,480,train
j_UJ-M6KnLA,4647,4805,189-96-538-445,30.0,640,480,train
j_UJ-M6KnLA,9125,9276,122-90-455-423,30.0,640,480,train
j_UJ-M6KnLA,12123,12348,192-80-529-417,30.0,640,480,train
j_UJ-M6KnLA,12706,12892,167-87-507-427,30.0,640,480,train
uXjfq4otSPg,108,318,102-59-492-449,29.97,640,480,train
Z3pAsUWV5d8,669,1049,137-64-520-447,29.97,720,480,train
Z3pAsUWV5d8,1049,1215,86-54-473-441,29.97,720,480,train
Z3pAsUWV5d8,1215,1400,178-69-565-456,29.97,720,480,train
Z3pAsUWV5d8,1400,1738,129-48-536-455,29.97,720,480,train
Z3pAsUWV5d8,1738,2240,126-25-568-467,29.97,720,480,train
Z3pAsUWV5d8,2240,2403,180-68-571-459,29.97,720,480,train
Z3pAsUWV5d8,2403,2790,202-46-605-449,29.97,720,480,train
Z3pAsUWV5d8,3118,4142,115-50-528-463,29.97,720,480,train
Z3pAsUWV5d8,4142,4281,178-56-570-448,29.97,720,480,train
Z3pAsUWV5d8,4281,4414,185-35-607-457,29.97,720,480,train
kgx5w20u0k4,385,957,362-96-983-717,25.0,1280,720,train
kgx5w20u0k4,957,1204,324-99-943-718,25.0,1280,720,train
kgx5w20u0k4,1803,2117,338-92-962-716,25.0,1280,720,train
kgx5w20u0k4,3594,3778,346-95-954-703,25.0,1280,720,train
ZAycgaoKipI,107,496,152-9-623-480,30.0,640,480,train
ZAycgaoKipI,3778,3967,206-41-637-472,30.0,640,480,train
ZAycgaoKipI,5284,5413,62-63-478-479,30.0,640,480,train
m4ccN_yYKlA,3039,3220,396-112-990-706,29.97,1280,720,train
m4ccN_yYKlA,6281,7305,338-30-1021-713,29.97,1280,720,train
m4ccN_yYKlA,7393,8417,339-22-1027-710,29.97,1280,720,train
m4ccN_yYKlA,8417,9143,347-18-1041-712,29.97,1280,720,train
m4ccN_yYKlA,9143,9753,416-25-1107-716,29.97,1280,720,train
m4ccN_yYKlA,12409,13433,326-16-1028-718,29.97,1280,720,train
m4ccN_yYKlA,13433,13814,316-13-1015-712,29.97,1280,720,train
m4ccN_yYKlA,13860,14884,316-31-999-714,29.97,1280,720,train
m4ccN_yYKlA,15047,15483,246-30-932-716,29.97,1280,720,train
m4ccN_yYKlA,15528,16552,331-29-1010-708,29.97,1280,720,train
m4ccN_yYKlA,16552,17524,375-57-1016-698,29.97,1280,720,train
m4ccN_yYKlA,17524,18548,328-24-1013-709,29.97,1280,720,train
m4ccN_yYKlA,18548,18718,376-98-980-702,29.97,1280,720,train
m4ccN_yYKlA,18743,19202,353-32-1030-709,29.97,1280,720,train
KYdyIdusD0g,426,876,150-70-541-461,25.0,640,480,train
KYdyIdusD0g,876,1641,143-69-535-461,25.0,640,480,train
KYdyIdusD0g,2665,3001,77-56-497-476,25.0,640,480,train
KYdyIdusD0g,3126,3282,145-83-518-456,25.0,640,480,train
KYdyIdusD0g,3322,3841,109-64-509-464,25.0,640,480,train
KYdyIdusD0g,3925,4124,213-65-618-470,25.0,640,480,train
KYdyIdusD0g,4124,4626,109-53-523-467,25.0,640,480,train
KYdyIdusD0g,4728,4931,223-45-629-451,25.0,640,480,train
KYdyIdusD0g,4931,5402,224-49-610-435,25.0,640,480,train
KYdyIdusD0g,5530,5676,172-35-567-430,25.0,640,480,train
kgFEyCiX1To,0,1024,76-41-505-470,29.97,640,480,train
kgFEyCiX1To,1094,1238,59-45-494-480,29.97,640,480,train
kgFEyCiX1To,6720,7041,86-11-523-448,29.97,640,480,train
kgFEyCiX1To,8330,8458,107-0-574-467,29.97,640,480,train
kgFEyCiX1To,9911,10056,134-51-548-465,29.97,640,480,train
-nRYJnnnTuk,523,688,744-292-1364-912,29.97,1440,1080,train
-nRYJnnnTuk,3891,4024,743-423-1239-919,29.97,1440,1080,train
-nRYJnnnTuk,4025,4229,726-408-1230-912,29.97,1440,1080,train
-nRYJnnnTuk,5368,5543,566-340-1140-914,29.97,1440,1080,train
-nRYJnnnTuk,6217,6377,702-438-1191-927,29.97,1440,1080,train
-nRYJnnnTuk,6411,6621,678-421-1196-939,29.97,1440,1080,train
-nRYJnnnTuk,6957,7093,723-315-1328-920,29.97,1440,1080,train
KtVCCLlkcKg,72,1096,587-93-1444-950,23.97,1920,1080,train
KtVCCLlkcKg,1096,2120,577-90-1412-925,23.97,1920,1080,train
KtVCCLlkcKg,2120,2393,570-83-1419-932,23.97,1920,1080,train
KtVCCLlkcKg,2399,3423,566-80-1413-927,23.97,1920,1080,train
KtVCCLlkcKg,3423,4115,576-110-1395-929,23.97,1920,1080,train
KtVCCLlkcKg,4115,4472,564-49-1469-954,23.97,1920,1080,train
KtVCCLlkcKg,4472,5496,550-3-1510-963,23.97,1920,1080,train
KtVCCLlkcKg,5496,5754,610-123-1434-947,23.97,1920,1080,train
a6qZnwdir0c,60,502,141-363-788-1010,30.0,1920,1080,train
a6qZnwdir0c,502,875,192-332-854-994,30.0,1920,1080,train
a6qZnwdir0c,1106,1280,186-239-832-885,30.0,1920,1080,train
a6qZnwdir0c,1572,1709,288-248-851-811,30.0,1920,1080,train
a6qZnwdir0c,2559,2892,85-299-785-999,30.0,1920,1080,train
a6qZnwdir0c,2892,3074,207-351-844-988,30.0,1920,1080,train
a6qZnwdir0c,3468,3731,471-292-1175-996,30.0,1920,1080,train
a6qZnwdir0c,4830,5021,790-369-1472-1051,30.0,1920,1080,train
a6qZnwdir0c,5326,5472,877-292-1638-1053,30.0,1920,1080,train
kgvcI9oe3NI,386,520,160-35-592-467,25.0,640,480,test
kgvcI9oe3NI,1578,1763,133-29-556-452,25.0,640,480,test
kgvcI9oe3NI,1818,2842,102-5-571-474,25.0,640,480,test
kgvcI9oe3NI,2890,3413,60-27-507-474,25.0,640,480,test
Ppk7BAngN_A,141,315,219-53-616-450,29.97,640,480,train
Ppk7BAngN_A,4433,4569,150-93-481-424,29.97,640,480,train
Ppk7BAngN_A,9338,9492,194-56-559-421,29.97,640,480,train
OgChhgaq8Zw,1441,1695,288-26-952-690,29.97,1280,720,train
OgChhgaq8Zw,2192,2648,251-15-913-677,29.97,1280,720,train
OgChhgaq8Zw,3125,3308,116-71-736-691,29.97,1280,720,train
OgChhgaq8Zw,5529,6019,299-9-990-700,29.97,1280,720,train
OgChhgaq8Zw,6019,6162,3-8-687-692,29.97,1280,720,train
OgChhgaq8Zw,6749,6960,60-38-732-710,29.97,1280,720,train
OgChhgaq8Zw,7304,8328,288-1-988-701,29.97,1280,720,train
2aDZU_WgtoY,0,395,126-143-401-418,25.0,640,480,train
2aDZU_WgtoY,6225,6498,175-98-462-385,25.0,640,480,train
MEtdtJwdfwg,127,704,350-86-976-712,25.0,1280,720,train
MEtdtJwdfwg,2795,3497,430-104-1041-715,25.0,1280,720,train
4h845uDRDR8,481,1205,620-113-1570-1063,29.97,1920,1080,train
4h845uDRDR8,1205,2229,887-174-1792-1079,29.97,1920,1080,train
4h845uDRDR8,2229,2362,831-202-1669-1040,29.97,1920,1080,train
4h845uDRDR8,2362,2579,949-183-1811-1045,29.97,1920,1080,train
4h845uDRDR8,2579,2809,746-183-1578-1015,29.97,1920,1080,train
4h845uDRDR8,3913,4552,507-152-1431-1076,29.97,1920,1080,train
4h845uDRDR8,6488,6831,528-141-1444-1057,29.97,1920,1080,train
4h845uDRDR8,7549,8104,409-77-1400-1068,29.97,1920,1080,train
4h845uDRDR8,8105,8313,354-121-1245-1012,29.97,1920,1080,train
4h845uDRDR8,8418,8720,608-126-1542-1060,29.97,1920,1080,train
4h845uDRDR8,8800,9824,457-124-1413-1080,29.97,1920,1080,train
4h845uDRDR8,9857,10554,541-178-1404-1041,29.97,1920,1080,train
4h845uDRDR8,10743,11552,180-38-1209-1067,29.97,1920,1080,train
4h845uDRDR8,11659,12669,480-106-1443-1069,29.97,1920,1080,train
4h845uDRDR8,12669,12942,245-124-1153-1032,29.97,1920,1080,train
4h845uDRDR8,13287,13586,440-9-1485-1054,29.97,1920,1080,train
qgWnTgmgi0Q,274,630,126-48-510-432,25.0,640,480,train
qgWnTgmgi0Q,630,818,155-90-496-431,25.0,640,480,train
qgWnTgmgi0Q,829,1006,98-77-448-427,25.0,640,480,train
qgWnTgmgi0Q,2700,2988,119-89-451-421,25.0,640,480,train
qgWnTgmgi0Q,2988,3132,133-96-451-414,25.0,640,480,train
qgWnTgmgi0Q,3923,4080,195-91-531-427,25.0,640,480,train
qgWnTgmgi0Q,4889,5039,178-79-517-418,25.0,640,480,train
qgWnTgmgi0Q,6132,6427,231-87-574-430,25.0,640,480,train
qgWnTgmgi0Q,6562,6706,165-65-530-430,25.0,640,480,train
qgWnTgmgi0Q,10358,10496,132-78-458-404,25.0,640,480,train
VMSqvTE90hk,165,530,100-85-454-439,29.97,640,480,test
VMSqvTE90hk,743,887,114-89-467-442,29.97,640,480,test
VMSqvTE90hk,2955,3097,181-71-559-449,29.97,640,480,test
VMSqvTE90hk,3198,3327,200-76-552-428,29.97,640,480,test
VMSqvTE90hk,3327,3476,157-54-524-421,29.97,640,480,test
VMSqvTE90hk,4248,4621,150-66-533-449,29.97,640,480,test
VMSqvTE90hk,6598,6749,78-91-414-427,29.97,640,480,test
VMSqvTE90hk,7168,7312,77-46-482-451,29.97,640,480,test
LHoIPFDYBCc,3922,4349,230-106-834-710,29.97,1280,720,train
LHoIPFDYBCc,7529,7681,458-51-1110-703,29.97,1280,720,train
LHoIPFDYBCc,7681,7892,424-17-1107-700,29.97,1280,720,train
LHoIPFDYBCc,7893,8187,343-62-985-704,29.97,1280,720,train
LHoIPFDYBCc,11054,11260,535-11-1244-720,29.97,1280,720,train
LHoIPFDYBCc,19928,20078,372-27-1014-669,29.97,1280,720,train
Tlou0HOrOE4,227,1042,179-77-507-405,29.97,640,480,train
Tlou0HOrOE4,1306,1504,191-52-562-423,29.97,640,480,train
Tlou0HOrOE4,2613,2755,193-124-457-388,29.97,640,480,train
Tlou0HOrOE4,4709,4862,214-105-501-392,29.97,640,480,train
Tlou0HOrOE4,5273,5506,213-104-480-371,29.97,640,480,train
Tlou0HOrOE4,5554,5700,243-82-525-364,29.97,640,480,train
Tlou0HOrOE4,6157,6335,218-122-486-390,29.97,640,480,train
Tlou0HOrOE4,6423,6603,182-102-470-390,29.97,640,480,train
Tlou0HOrOE4,6905,7118,190-62-524-396,29.97,640,480,train
Tlou0HOrOE4,8654,8811,224-122-491-389,29.97,640,480,train
Tlou0HOrOE4,9114,9252,117-107-431-421,29.97,640,480,train
rfXnvX5eTAM,2,621,469-28-1374-933,25.0,1920,1080,train
rfXnvX5eTAM,809,1162,484-75-1481-1072,25.0,1920,1080,train
rfXnvX5eTAM,1285,1440,584-68-1532-1016,25.0,1920,1080,train
rfXnvX5eTAM,1622,1853,512-48-1505-1041,25.0,1920,1080,train
rfXnvX5eTAM,1882,2027,621-130-1523-1032,25.0,1920,1080,train
rfXnvX5eTAM,3124,3336,319-62-1292-1035,25.0,1920,1080,train
rfXnvX5eTAM,3946,4085,325-68-1336-1079,25.0,1920,1080,train
eD0O4ZrSjjQ,199,1223,270-60-597-387,25.0,854,480,train
eD0O4ZrSjjQ,1223,1418,319-73-628-382,25.0,854,480,train
eD0O4ZrSjjQ,1418,1797,294-70-622-398,25.0,854,480,train
eD0O4ZrSjjQ,1802,1940,343-71-647-375,25.0,854,480,train
eD0O4ZrSjjQ,1942,2315,303-85-595-377,25.0,854,480,train
eD0O4ZrSjjQ,2315,3140,302-70-613-381,25.0,854,480,train
eD0O4ZrSjjQ,3140,3830,220-76-523-379,25.0,854,480,train
eD0O4ZrSjjQ,3870,4469,143-76-457-390,25.0,854,480,train
eD0O4ZrSjjQ,4628,4758,295-83-602-390,25.0,854,480,train
eD0O4ZrSjjQ,4935,5125,255-82-578-405,25.0,854,480,train
eD0O4ZrSjjQ,5125,5779,308-66-647-405,25.0,854,480,train
eD0O4ZrSjjQ,5877,6901,201-65-528-392,25.0,854,480,train
eD0O4ZrSjjQ,6901,7386,234-80-529-375,25.0,854,480,train
eD0O4ZrSjjQ,7387,7548,278-84-574-380,25.0,854,480,train
eD0O4ZrSjjQ,7548,7696,201-83-490-372,25.0,854,480,train
eD0O4ZrSjjQ,7702,7917,240-94-522-376,25.0,854,480,train
eD0O4ZrSjjQ,7943,8180,265-93-542-370,25.0,854,480,train
eD0O4ZrSjjQ,8240,8451,311-86-610-385,25.0,854,480,train
eD0O4ZrSjjQ,8451,9475,294-69-614-389,25.0,854,480,train
eD0O4ZrSjjQ,9560,9988,315-79-601-365,25.0,854,480,train
eD0O4ZrSjjQ,10002,10312,257-48-579-370,25.0,854,480,train
eD0O4ZrSjjQ,10313,10553,287-95-559-367,25.0,854,480,train
X7Q04MoQxXo,51,272,273-162-535-424,29.97,854,480,train
X7Q04MoQxXo,440,577,268-170-553-455,29.97,854,480,train
X7Q04MoQxXo,661,791,211-183-485-457,29.97,854,480,train
X7Q04MoQxXo,834,985,217-174-496-453,29.97,854,480,train
X7Q04MoQxXo,1379,1606,287-132-563-408,29.97,854,480,train
X7Q04MoQxXo,4037,4187,327-161-590-424,29.97,854,480,train
X7Q04MoQxXo,4480,4689,298-152-568-422,29.97,854,480,train
X7Q04MoQxXo,6739,6869,276-110-552-386,29.97,854,480,train
JHaOu5Z2ScI,1302,1530,344-103-714-473,29.97,854,480,train
JHaOu5Z2ScI,4591,4752,263-62-680-479,29.97,854,480,train
JHaOu5Z2ScI,5431,5562,280-70-677-467,29.97,854,480,train
JHaOu5Z2ScI,6634,6769,212-70-617-475,29.97,854,480,train
R108l6J4N1o,634,767,381-189-1108-916,30.0,1920,1080,train
R108l6J4N1o,1547,1727,378-41-1183-846,30.0,1920,1080,train
R108l6J4N1o,3244,3387,398-23-1192-817,30.0,1920,1080,train
R108l6J4N1o,9079,9210,1484-138-1904-558,30.0,1920,1080,train
R108l6J4N1o,9666,10014,510-105-1314-909,30.0,1920,1080,train
R108l6J4N1o,10596,10732,1333-82-1760-509,30.0,1920,1080,train
R108l6J4N1o,10742,10968,1422-121-1851-550,30.0,1920,1080,train
wbwUCsr9SR8,183,347,316-91-887-662,29.97,1280,720,train
wbwUCsr9SR8,3634,3857,432-97-976-641,29.97,1280,720,train
wbwUCsr9SR8,3896,4104,424-188-840-604,29.97,1280,720,train
KjMxdYJOwqI,0,470,31-19-652-640,25.0,1280,720,train
KjMxdYJOwqI,543,747,121-28-695-602,25.0,1280,720,train
KjMxdYJOwqI,1240,1599,307-1-962-656,25.0,1280,720,train
KjMxdYJOwqI,1599,2068,391-13-1070-692,25.0,1280,720,train
KjMxdYJOwqI,2687,2970,239-23-902-686,25.0,1280,720,train
KjMxdYJOwqI,3782,4050,57-38-662-643,25.0,1280,720,train
KjMxdYJOwqI,4050,4644,16-10-624-618,25.0,1280,720,train
KjMxdYJOwqI,4866,5084,272-36-832-596,25.0,1280,720,train
s3b6B6Vw2ZQ,494,858,184-64-661-541,29.97,1280,720,train
s3b6B6Vw2ZQ,2285,2468,438-93-888-543,29.97,1280,720,train
s3b6B6Vw2ZQ,3262,3440,379-77-851-549,29.97,1280,720,train
s3b6B6Vw2ZQ,3498,3808,292-96-749-553,29.97,1280,720,train
s3b6B6Vw2ZQ,3876,4009,202-82-672-552,29.97,1280,720,train
s3b6B6Vw2ZQ,4146,4371,292-110-726-544,29.97,1280,720,train
s3b6B6Vw2ZQ,4407,4562,275-98-715-538,29.97,1280,720,train
s3b6B6Vw2ZQ,4635,4943,286-108-723-545,29.97,1280,720,train
s3b6B6Vw2ZQ,4943,5075,357-88-796-527,29.97,1280,720,train
s3b6B6Vw2ZQ,5320,5573,290-79-751-540,29.97,1280,720,train
s3b6B6Vw2ZQ,6256,6458,410-95-851-536,29.97,1280,720,train
s3b6B6Vw2ZQ,6458,6604,498-88-938-528,29.97,1280,720,train
s3b6B6Vw2ZQ,7023,7281,497-87-939-529,29.97,1280,720,train
s3b6B6Vw2ZQ,7731,7916,551-79-1006-534,29.97,1280,720,train
s3b6B6Vw2ZQ,7943,8160,612-57-1077-522,29.97,1280,720,train
s3b6B6Vw2ZQ,8459,8640,278-31-827-580,29.97,1280,720,train
s3b6B6Vw2ZQ,9087,9262,86-62-628-604,29.97,1280,720,train
s3b6B6Vw2ZQ,9364,9500,185-99-664-578,29.97,1280,720,train
s3b6B6Vw2ZQ,9846,9982,134-110-592-568,29.97,1280,720,train
s3b6B6Vw2ZQ,10339,10639,327-113-791-577,29.97,1280,720,train
s3b6B6Vw2ZQ,10913,11278,287-67-791-571,29.97,1280,720,train
36SpweR9O3s,8618,8748,98-139-380-421,25.0,600,480,train
nAQEOC1Z10M,7750,7956,569-105-1130-666,59.94,1280,720,test
nAQEOC1Z10M,7999,8438,414-89-997-672,59.94,1280,720,test
nAQEOC1Z10M,8438,8572,339-61-925-647,59.94,1280,720,test
nAQEOC1Z10M,8572,8848,411-64-998-651,59.94,1280,720,test
nAQEOC1Z10M,8848,9055,445-36-1052-643,59.94,1280,720,test
nAQEOC1Z10M,9055,9434,370-96-919-645,59.94,1280,720,test
nAQEOC1Z10M,9434,9587,251-92-805-646,59.94,1280,720,test
nAQEOC1Z10M,10446,10614,309-92-868-651,59.94,1280,720,test
nAQEOC1Z10M,10776,10955,542-102-1085-645,59.94,1280,720,test
nAQEOC1Z10M,11006,11200,712-115-1258-661,59.94,1280,720,test
nAQEOC1Z10M,11244,11869,363-118-916-671,59.94,1280,720,test
nAQEOC1Z10M,11869,12265,259-123-784-648,59.94,1280,720,test
nAQEOC1Z10M,12265,12835,330-101-905-676,59.94,1280,720,test
nAQEOC1Z10M,12926,13159,315-112-852-649,59.94,1280,720,test
nAQEOC1Z10M,13257,13665,359-102-921-664,59.94,1280,720,test
nAQEOC1Z10M,13665,13832,215-102-770-657,59.94,1280,720,test
nAQEOC1Z10M,13891,14101,151-95-714-658,59.94,1280,720,test
nAQEOC1Z10M,14101,14461,48-104-605-661,59.94,1280,720,test
nAQEOC1Z10M,14730,15436,88-98-631-641,59.94,1280,720,test
nAQEOC1Z10M,15442,15583,19-108-522-611,59.94,1280,720,test
nAQEOC1Z10M,15624,15783,94-120-570-596,59.94,1280,720,test
nAQEOC1Z10M,16313,16524,266-151-761-646,59.94,1280,720,test
nAQEOC1Z10M,16558,16877,370-104-882-616,59.94,1280,720,test
nAQEOC1Z10M,17094,17364,594-177-1029-612,59.94,1280,720,test
nAQEOC1Z10M,17670,18082,419-131-931-643,59.94,1280,720,test
nAQEOC1Z10M,18236,18704,655-125-1192-662,59.94,1280,720,test
nAQEOC1Z10M,18798,19102,610-130-1136-656,59.94,1280,720,test
nAQEOC1Z10M,19102,19658,513-135-1050-672,59.94,1280,720,test
nAQEOC1Z10M,19658,19817,411-133-930-652,59.94,1280,720,test
nAQEOC1Z10M,19858,20177,556-141-1073-658,59.94,1280,720,test
nAQEOC1Z10M,20177,20600,492-115-1038-661,59.94,1280,720,test
nAQEOC1Z10M,20600,20777,557-116-1128-687,59.94,1280,720,test
5SRTl6JcQ8g,42,808,229-101-787-659,30.0,960,720,train
5SRTl6JcQ8g,927,1081,307-156-750-599,30.0,960,720,train
5SRTl6JcQ8g,2322,2464,180-143-679-642,30.0,960,720,train
5SRTl6JcQ8g,2730,2859,301-139-793-631,30.0,960,720,train
5SRTl6JcQ8g,5958,6251,219-80-785-646,30.0,960,720,train
5SRTl6JcQ8g,8002,8158,205-112-768-675,30.0,960,720,train
5SRTl6JcQ8g,9419,9551,227-117-768-658,30.0,960,720,train
5SRTl6JcQ8g,9661,9828,176-46-779-649,30.0,960,720,train
vNfhp02w9s0,0,275,92-30-521-459,25.0,640,480,train
vNfhp02w9s0,275,473,99-9-558-468,25.0,640,480,train
vNfhp02w9s0,526,957,136-16-580-460,25.0,640,480,train
vNfhp02w9s0,1115,1296,149-21-586-458,25.0,640,480,train
vNfhp02w9s0,1303,1586,165-13-626-474,25.0,640,480,train
vNfhp02w9s0,1676,1905,129-10-586-467,25.0,640,480,train
vNfhp02w9s0,2087,2349,113-9-571-467,25.0,640,480,train
vNfhp02w9s0,2452,2825,128-23-559-454,25.0,640,480,train
vNfhp02w9s0,3382,3925,54-49-454-449,25.0,640,480,train
vNfhp02w9s0,4066,4442,70-67-462-459,25.0,640,480,train
vNfhp02w9s0,4648,5130,87-29-514-456,25.0,640,480,train
vNfhp02w9s0,5130,5331,115-61-510-456,25.0,640,480,train
vNfhp02w9s0,5415,5670,121-11-579-469,25.0,640,480,train
vNfhp02w9s0,5670,5852,89-16-528-455,25.0,640,480,train
vNfhp02w9s0,5965,6412,137-17-585-465,25.0,640,480,train
vNfhp02w9s0,6732,6866,88-38-512-462,25.0,640,480,train
vNfhp02w9s0,6866,7091,138-14-578-454,25.0,640,480,train
vNfhp02w9s0,7133,7426,127-0-597-469,25.0,640,480,train
EaPwYQC-5pE,989,1191,377-57-985-665,29.97,1280,720,train
EaPwYQC-5pE,1191,1328,357-62-990-695,29.97,1280,720,train
EaPwYQC-5pE,1328,2300,497-86-1105-694,29.97,1280,720,train
EaPwYQC-5pE,2322,3346,370-117-874-621,29.97,1280,720,train
EaPwYQC-5pE,3677,3928,333-63-939-669,29.97,1280,720,train
EaPwYQC-5pE,3939,4526,292-58-887-653,29.97,1280,720,train
EaPwYQC-5pE,4562,4692,282-73-875-666,29.97,1280,720,train
EaPwYQC-5pE,4692,4849,445-75-1029-659,29.97,1280,720,train
EaPwYQC-5pE,4870,5075,385-77-968-660,29.97,1280,720,train
EaPwYQC-5pE,5282,5592,489-135-1014-660,29.97,1280,720,train
EaPwYQC-5pE,5602,6151,420-71-1017-668,29.97,1280,720,train
EaPwYQC-5pE,6238,6601,447-126-970-649,29.97,1280,720,train
EaPwYQC-5pE,6631,7182,479-107-1039-667,29.97,1280,720,train
EaPwYQC-5pE,7251,7407,398-60-996-658,29.97,1280,720,train
irQNFGmGRQQ,1350,1533,376-105-657-386,25.0,854,480,train
irQNFGmGRQQ,1559,1918,345-106-639-400,25.0,854,480,train
irQNFGmGRQQ,1918,2100,359-91-665-397,25.0,854,480,train
irQNFGmGRQQ,2184,2348,315-95-623-403,25.0,854,480,train
irQNFGmGRQQ,2379,2525,376-105-662-391,25.0,854,480,train
irQNFGmGRQQ,2662,2790,365-108-623-366,25.0,854,480,train
irQNFGmGRQQ,2819,2956,418-84-707-373,25.0,854,480,train
irQNFGmGRQQ,3122,3324,434-88-709-363,25.0,854,480,train
irQNFGmGRQQ,3818,4112,195-78-495-378,25.0,854,480,train
irQNFGmGRQQ,4422,4633,343-127-600-384,25.0,854,480,train
irQNFGmGRQQ,4667,5691,299-87-600-388,25.0,854,480,train
irQNFGmGRQQ,5990,6150,338-114-603-379,25.0,854,480,train
irQNFGmGRQQ,6986,7123,403-105-669-371,25.0,854,480,train
irQNFGmGRQQ,8158,8325,422-40-744-362,25.0,854,480,train
irQNFGmGRQQ,8536,8757,478-88-749-359,25.0,854,480,train
irQNFGmGRQQ,8776,8913,495-53-794-352,25.0,854,480,train
irQNFGmGRQQ,8916,9099,497-74-771-348,25.0,854,480,train
irQNFGmGRQQ,9320,9546,332-53-658-379,25.0,854,480,train
irQNFGmGRQQ,10512,10767,168-73-515-420,25.0,854,480,train
irQNFGmGRQQ,10877,11167,114-53-470-409,25.0,854,480,train
irQNFGmGRQQ,11405,11767,274-90-603-419,25.0,854,480,train
irQNFGmGRQQ,11887,12038,301-96-614-409,25.0,854,480,train
irQNFGmGRQQ,12068,12345,253-64-597-408,25.0,854,480,train
MGYF1aDwUKg,90,294,142-122-459-439,25.0,640,480,train
xlHGjYHyjmM,3102,3428,244-12-901-669,30.0,1280,720,train
xlHGjYHyjmM,3430,3580,389-58-1037-706,30.0,1280,720,train
xlHGjYHyjmM,3638,3771,328-42-972-686,30.0,1280,720,train
xlHGjYHyjmM,3771,4079,309-9-977-677,30.0,1280,720,train
xlHGjYHyjmM,4103,4242,403-9-1081-687,30.0,1280,720,train
xlHGjYHyjmM,4279,4496,326-33-974-681,30.0,1280,720,train
xlHGjYHyjmM,4719,5353,330-36-980-686,30.0,1280,720,train
xlHGjYHyjmM,5640,6064,295-17-966-688,30.0,1280,720,train
xlHGjYHyjmM,6321,6456,298-35-959-696,30.0,1280,720,train
xlHGjYHyjmM,7579,7762,317-23-983-689,30.0,1280,720,train
xlHGjYHyjmM,7762,7956,268-30-958-720,30.0,1280,720,train
xlHGjYHyjmM,8604,9595,339-15-1008-684,30.0,1280,720,train
xlHGjYHyjmM,11581,11725,321-26-999-704,30.0,1280,720,train
lybYf6hakUs,2593,2722,227-27-897-697,25.0,1280,720,train
lybYf6hakUs,4230,4438,250-8-932-690,25.0,1280,720,train
aAwbJ9MO91I,1200,2224,400-177-830-607,29.97,1280,720,train
aAwbJ9MO91I,2224,2711,402-178-826-602,29.97,1280,720,train
aAwbJ9MO91I,2804,2953,387-179-823-615,29.97,1280,720,train
aAwbJ9MO91I,3061,3208,391-182-821-612,29.97,1280,720,train
aAwbJ9MO91I,3318,3486,392-185-822-615,29.97,1280,720,train
aAwbJ9MO91I,3569,4029,385-180-826-621,29.97,1280,720,train
aAwbJ9MO91I,4770,4990,398-178-822-602,29.97,1280,720,train
aAwbJ9MO91I,5137,5465,384-173-824-613,29.97,1280,720,train
aAwbJ9MO91I,5508,5662,390-172-831-613,29.97,1280,720,train
aAwbJ9MO91I,5920,6137,405-188-818-601,29.97,1280,720,train
aAwbJ9MO91I,6240,6400,498-256-826-584,29.97,1280,720,train
aAwbJ9MO91I,6453,6812,473-213-849-589,29.97,1280,720,train
aAwbJ9MO91I,6812,6974,461-234-841-614,29.97,1280,720,train
aAwbJ9MO91I,7044,7230,473-242-817-586,29.97,1280,720,train
aAwbJ9MO91I,7287,7466,469-231-834-596,29.97,1280,720,train
aAwbJ9MO91I,7529,7674,476-241-822-587,29.97,1280,720,train
aAwbJ9MO91I,7790,8065,477-233-833-589,29.97,1280,720,train
aAwbJ9MO91I,8440,8607,480-261-808-589,29.97,1280,720,train
aAwbJ9MO91I,8899,9160,471-234-828-591,29.97,1280,720,train
aAwbJ9MO91I,9201,9423,453-230-830-607,29.97,1280,720,train
aAwbJ9MO91I,9458,10482,380-133-850-603,29.97,1280,720,train
aAwbJ9MO91I,10482,10993,400-184-824-608,29.97,1280,720,train
aAwbJ9MO91I,11043,11203,386-181-812-607,29.97,1280,720,train
aAwbJ9MO91I,11253,11381,397-180-818-601,29.97,1280,720,train
aAwbJ9MO91I,11443,11941,375-127-855-607,29.97,1280,720,train
aAwbJ9MO91I,11943,12093,361-127-834-600,29.97,1280,720,train
aAwbJ9MO91I,12147,12279,368-124-860-616,29.97,1280,720,train
aAwbJ9MO91I,13619,13771,452-238-802-588,29.97,1280,720,train
aAwbJ9MO91I,13785,13917,429-251-764-586,29.97,1280,720,train
aAwbJ9MO91I,14197,14338,415-237-767-589,29.97,1280,720,train
aAwbJ9MO91I,14498,14720,456-260-784-588,29.97,1280,720,train
aAwbJ9MO91I,14720,14925,494-257-826-589,29.97,1280,720,train
aAwbJ9MO91I,15040,15199,457-260-781-584,29.97,1280,720,train
aAwbJ9MO91I,15574,15767,500-263-822-585,29.97,1280,720,train
aAwbJ9MO91I,15795,16046,455-256-785-586,29.97,1280,720,train
aAwbJ9MO91I,16195,16490,491-260-818-587,29.97,1280,720,train
aAwbJ9MO91I,16490,16679,490-256-821-587,29.97,1280,720,train
aAwbJ9MO91I,16740,16950,460-256-787-583,29.97,1280,720,train
aAwbJ9MO91I,16951,17234,471-255-801-585,29.97,1280,720,train
aAwbJ9MO91I,18514,18665,401-163-835-597,29.97,1280,720,train
aAwbJ9MO91I,20234,20480,409-174-874-639,29.97,1280,720,train
aAwbJ9MO91I,21511,21660,481-255-833-607,29.97,1280,720,train
aAwbJ9MO91I,21788,21958,507-259-837-589,29.97,1280,720,train
aAwbJ9MO91I,23001,23143,482-255-834-607,29.97,1280,720,train
aAwbJ9MO91I,24614,24768,401-190-812-601,29.97,1280,720,train
aAwbJ9MO91I,24768,25270,388-169-818-599,29.97,1280,720,train
aAwbJ9MO91I,25271,25439,405-177-827-599,29.97,1280,720,train
aAwbJ9MO91I,28293,28430,478-257-803-582,29.97,1280,720,train
aAwbJ9MO91I,29027,29482,493-255-826-588,29.97,1280,720,train
aAwbJ9MO91I,29640,29779,460-248-810-598,29.97,1280,720,train
aAwbJ9MO91I,30757,30967,473-249-811-587,29.97,1280,720,train
aAwbJ9MO91I,31022,31562,476-251-810-585,29.97,1280,720,train
aAwbJ9MO91I,31613,31879,395-188-804-597,29.97,1280,720,train
aAwbJ9MO91I,32005,32251,397-183-809-595,29.97,1280,720,train
aAwbJ9MO91I,32252,33024,396-190-804-598,29.97,1280,720,train
aAwbJ9MO91I,33215,33410,401-183-812-594,29.97,1280,720,train
aAwbJ9MO91I,33432,34082,401-183-808-590,29.97,1280,720,train
aAwbJ9MO91I,34083,34548,402-182-807-587,29.97,1280,720,train
aAwbJ9MO91I,35071,35261,402-187-811-596,29.97,1280,720,train
aAwbJ9MO91I,35327,36351,405-182-822-599,29.97,1280,720,train
aAwbJ9MO91I,36351,36772,400-177-820-597,29.97,1280,720,train
aAwbJ9MO91I,39234,39398,407-180-816-589,29.97,1280,720,train
aAwbJ9MO91I,39966,40163,404-178-817-591,29.97,1280,720,train
aAwbJ9MO91I,40340,40640,406-179-817-590,29.97,1280,720,train
aAwbJ9MO91I,40664,40934,404-178-819-593,29.97,1280,720,train
aAwbJ9MO91I,40972,41876,403-178-820-595,29.97,1280,720,train
3M5VGsUtw_Q,1600,1750,244-55-896-707,29.97,1280,720,train
3M5VGsUtw_Q,2100,2250,354-54-1002-702,29.97,1280,720,train
3M5VGsUtw_Q,2522,2650,415-58-1075-718,29.97,1280,720,train
3M5VGsUtw_Q,2650,2841,328-55-988-715,29.97,1280,720,train
3M5VGsUtw_Q,8100,8240,420-135-996-711,29.97,1280,720,train
3M5VGsUtw_Q,11044,11220,484-191-1009-716,29.97,1280,720,train
3M5VGsUtw_Q,12038,12175,556-177-1083-704,29.97,1280,720,train
3M5VGsUtw_Q,12625,12784,308-193-831-716,29.97,1280,720,train
w8YcIAuUIys,613,844,363-112-899-648,25.0,1280,720,train
w8YcIAuUIys,844,1234,298-113-860-675,25.0,1280,720,train
4SgduoCb2_8,151,1175,491-117-1220-846,29.97,1920,1080,train
4SgduoCb2_8,1426,1565,532-186-1190-844,29.97,1920,1080,train
4SgduoCb2_8,1734,1894,553-181-1269-897,29.97,1920,1080,train
4SgduoCb2_8,2110,2466,515-204-1144-833,29.97,1920,1080,train
4SgduoCb2_8,2986,3737,519-156-1235-872,29.97,1920,1080,train
4SgduoCb2_8,4154,4302,508-190-1208-890,29.97,1920,1080,train
4SgduoCb2_8,4302,4480,564-148-1256-840,29.97,1920,1080,train
4SgduoCb2_8,4481,4916,513-191-1154-832,29.97,1920,1080,train
4SgduoCb2_8,5530,5834,518-145-1226-853,29.97,1920,1080,train
4SgduoCb2_8,5834,6016,439-135-1156-852,29.97,1920,1080,train
yKYjtfmyVGU,228,360,556-135-1425-1004,30.0,1920,1080,train
yKYjtfmyVGU,360,625,544-131-1413-1000,30.0,1920,1080,train
yKYjtfmyVGU,817,961,522-135-1405-1018,30.0,1920,1080,train
yKYjtfmyVGU,973,1105,463-118-1334-989,30.0,1920,1080,train
yKYjtfmyVGU,1429,1982,478-125-1377-1024,30.0,1920,1080,train
yKYjtfmyVGU,2097,2246,496-100-1412-1016,30.0,1920,1080,train
yKYjtfmyVGU,2258,2423,508-131-1374-997,30.0,1920,1080,train
yKYjtfmyVGU,2423,2943,614-107-1497-990,30.0,1920,1080,train
yKYjtfmyVGU,3063,3229,561-120-1466-1025,30.0,1920,1080,train
yKYjtfmyVGU,3351,3603,561-105-1441-985,30.0,1920,1080,train
yKYjtfmyVGU,3603,3749,493-138-1358-1003,30.0,1920,1080,train
yKYjtfmyVGU,3798,4072,653-80-1556-983,30.0,1920,1080,train
yKYjtfmyVGU,4264,4655,708-132-1522-946,30.0,1920,1080,train
yKYjtfmyVGU,4685,4865,638-107-1489-958,30.0,1920,1080,train
yKYjtfmyVGU,4973,5946,546-118-1382-954,30.0,1920,1080,train
yKYjtfmyVGU,6466,6606,658-108-1474-924,30.0,1920,1080,train
yKYjtfmyVGU,6727,6915,468-149-1257-938,30.0,1920,1080,train
yKYjtfmyVGU,6915,7327,628-100-1461-933,30.0,1920,1080,train
yKYjtfmyVGU,7447,7695,572-133-1375-936,30.0,1920,1080,train
yKYjtfmyVGU,7808,7988,635-131-1419-915,30.0,1920,1080,train
yKYjtfmyVGU,7988,8156,613-134-1419-940,30.0,1920,1080,train
yKYjtfmyVGU,8156,8348,574-107-1419-952,30.0,1920,1080,train
yKYjtfmyVGU,8468,8695,539-117-1364-942,30.0,1920,1080,train
yKYjtfmyVGU,8695,9033,716-111-1554-949,30.0,1920,1080,train
yKYjtfmyVGU,9405,9630,610-111-1419-920,30.0,1920,1080,train
yKYjtfmyVGU,9638,9790,485-123-1296-934,30.0,1920,1080,train
yKYjtfmyVGU,9790,9970,510-134-1298-922,30.0,1920,1080,train
yKYjtfmyVGU,10270,10450,568-121-1376-929,30.0,1920,1080,train
yKYjtfmyVGU,11167,11331,523-158-1338-973,30.0,1920,1080,train
yKYjtfmyVGU,11471,11712,504-140-1325-961,30.0,1920,1080,train
yKYjtfmyVGU,11789,12012,436-144-1268-976,30.0,1920,1080,train
yKYjtfmyVGU,12012,12142,617-152-1431-966,30.0,1920,1080,train
yKYjtfmyVGU,12145,12560,635-171-1413-949,30.0,1920,1080,train
yKYjtfmyVGU,12560,12718,739-132-1558-951,30.0,1920,1080,train
yKYjtfmyVGU,12979,13144,537-126-1352-941,30.0,1920,1080,train
yKYjtfmyVGU,13861,14510,647-87-1590-1030,30.0,1920,1080,train
yKYjtfmyVGU,14522,14943,648-142-1480-974,30.0,1920,1080,train
yKYjtfmyVGU,14955,15123,685-131-1524-970,30.0,1920,1080,train
yKYjtfmyVGU,15171,15314,666-114-1512-960,30.0,1920,1080,train
yKYjtfmyVGU,15533,15706,640-152-1439-951,30.0,1920,1080,train
yKYjtfmyVGU,16577,16745,628-128-1485-985,30.0,1920,1080,train
yKYjtfmyVGU,16997,17360,648-155-1436-943,30.0,1920,1080,train
yKYjtfmyVGU,17537,17838,545-117-1380-952,30.0,1920,1080,train
xmwGBXYofEE,705,960,259-114-859-714,29.97,1280,720,train
xmwGBXYofEE,960,1120,294-123-884-713,29.97,1280,720,train
xmwGBXYofEE,1180,1384,294-136-858-700,29.97,1280,720,train
xmwGBXYofEE,1920,2080,342-136-904-698,29.97,1280,720,train
xmwGBXYofEE,2162,2400,305-128-892-715,29.97,1280,720,train
xmwGBXYofEE,2560,2720,424-168-963-707,29.97,1280,720,train
xmwGBXYofEE,2720,2867,419-194-905-680,29.97,1280,720,train
xmwGBXYofEE,3040,3198,421-187-938-704,29.97,1280,720,train
xmwGBXYofEE,3384,3520,422-182-939-699,29.97,1280,720,train
xmwGBXYofEE,4640,4791,441-225-908-692,29.97,1280,720,train
xmwGBXYofEE,6497,6715,213-161-758-706,29.97,1280,720,train
xmwGBXYofEE,7313,7459,282-154-826-698,29.97,1280,720,train
xmwGBXYofEE,7459,7680,333-127-897-691,29.97,1280,720,train
xmwGBXYofEE,7680,8160,302-132-879-709,29.97,1280,720,train
xmwGBXYofEE,9445,9618,411-157-967-713,29.97,1280,720,train
xmwGBXYofEE,10405,10575,544-265-966-687,29.97,1280,720,train
xmwGBXYofEE,12164,12341,415-200-928-713,29.97,1280,720,train
xmwGBXYofEE,12820,12960,445-159-1002-716,29.97,1280,720,train
xmwGBXYofEE,13096,13264,334-140-895-701,29.97,1280,720,train
xmwGBXYofEE,13381,13631,214-163-761-710,29.97,1280,720,train
xmwGBXYofEE,13760,13920,231-66-856-691,29.97,1280,720,train
xmwGBXYofEE,13920,14056,228-105-816-693,29.97,1280,720,train
xmwGBXYofEE,14992,15188,316-159-870-713,29.97,1280,720,train
xmwGBXYofEE,15761,15942,392-136-942-686,29.97,1280,720,train
xmwGBXYofEE,15942,16144,421-162-938-679,29.97,1280,720,train
xmwGBXYofEE,16455,16676,400-209-877-686,29.97,1280,720,train
xmwGBXYofEE,16703,16880,498-185-998-685,29.97,1280,720,train
xmwGBXYofEE,17034,17280,541-231-982-672,29.97,1280,720,train
xmwGBXYofEE,17280,17423,591-212-1037-658,29.97,1280,720,train
xmwGBXYofEE,19640,19840,446-115-1025-694,29.97,1280,720,train
xmwGBXYofEE,20042,20205,501-201-973-673,29.97,1280,720,train
xmwGBXYofEE,20507,20674,445-189-969-713,29.97,1280,720,train
xmwGBXYofEE,20986,21170,446-168-998-720,29.97,1280,720,train
xmwGBXYofEE,21646,21806,271-153-832-714,29.97,1280,720,train
xmwGBXYofEE,21806,21945,306-125-885-704,29.97,1280,720,train
0JKfDKo-3DM,0,1024,376-188-861-673,29.97,1280,720,train
0JKfDKo-3DM,1024,2048,373-203-840-670,29.97,1280,720,train
0JKfDKo-3DM,2048,3072,332-194-807-669,29.97,1280,720,train
0JKfDKo-3DM,3072,4096,352-211-819-678,29.97,1280,720,train
0JKfDKo-3DM,4096,5120,357-209-823-675,29.97,1280,720,train
0JKfDKo-3DM,5120,6144,353-206-820-673,29.97,1280,720,train
0JKfDKo-3DM,6144,6500,359-205-823-669,29.97,1280,720,train
0JKfDKo-3DM,6500,7028,265-217-729-681,29.97,1280,720,train
0JKfDKo-3DM,7028,7522,351-202-826-677,29.97,1280,720,train
0JKfDKo-3DM,7522,8546,241-200-724-683,29.97,1280,720,train
0JKfDKo-3DM,8608,8862,236-206-710-680,29.97,1280,720,train
0JKfDKo-3DM,8862,9089,318-214-789-685,29.97,1280,720,train
0JKfDKo-3DM,9089,9631,186-221-647-682,29.97,1280,720,train
0JKfDKo-3DM,9631,10567,68-222-543-697,29.97,1280,720,train
0JKfDKo-3DM,10567,10874,202-228-655-681,29.97,1280,720,train
0JKfDKo-3DM,10874,11515,316-206-780-670,29.97,1280,720,train
0JKfDKo-3DM,11537,12300,349-211-812-674,29.97,1280,720,train
0JKfDKo-3DM,12302,12473,362-211-819-668,29.97,1280,720,train
0JKfDKo-3DM,12473,13497,222-217-680-675,29.97,1280,720,train
0JKfDKo-3DM,13654,14029,337-218-786-667,29.97,1280,720,train
0JKfDKo-3DM,14143,14588,208-224-650-666,29.97,1280,720,train
0JKfDKo-3DM,14627,15338,352-233-779-660,29.97,1280,720,train
0JKfDKo-3DM,15338,15549,276-236-705-665,29.97,1280,720,train
0JKfDKo-3DM,15682,16706,350-227-781-658,29.97,1280,720,train
0JKfDKo-3DM,16782,17147,300-232-745-677,29.97,1280,720,train
0JKfDKo-3DM,17147,18170,225-239-661-675,29.97,1280,720,train
0JKfDKo-3DM,18170,19101,291-223-744-676,29.97,1280,720,train
0JKfDKo-3DM,19101,20125,204-232-649-677,29.97,1280,720,train
0JKfDKo-3DM,20125,20374,225-229-665-669,29.97,1280,720,train
rKilyW_awUo,1458,1774,435-162-1349-1076,29.97,1920,1080,train
rKilyW_awUo,1780,1949,515-163-1395-1043,29.97,1920,1080,train
rKilyW_awUo,2228,2389,439-93-1314-968,29.97,1920,1080,train
rKilyW_awUo,2440,2823,585-108-1547-1070,29.97,1920,1080,train
rKilyW_awUo,2823,3063,421-149-1294-1022,29.97,1920,1080,train
rKilyW_awUo,3121,3381,422-134-1341-1053,29.97,1920,1080,train
rKilyW_awUo,3802,4043,464-132-1368-1036,29.97,1920,1080,train
rKilyW_awUo,4302,4673,471-127-1417-1073,29.97,1920,1080,train
rKilyW_awUo,6925,7605,467-4-1539-1076,29.97,1920,1080,train
rKilyW_awUo,7622,7778,467-85-1458-1076,29.97,1920,1080,train
rKilyW_awUo,7849,8024,513-126-1455-1068,29.97,1920,1080,train
rKilyW_awUo,8024,8209,350-157-1229-1036,29.97,1920,1080,train
rKilyW_awUo,8483,8795,475-135-1390-1050,29.97,1920,1080,train
rKilyW_awUo,9031,9180,370-80-1319-1029,29.97,1920,1080,train
rKilyW_awUo,9832,9968,524-167-1393-1036,29.97,1920,1080,train
rKilyW_awUo,10043,10191,359-157-1263-1061,29.97,1920,1080,train
rKilyW_awUo,10853,11314,596-122-1548-1074,29.97,1920,1080,train
jvwHcYbcyEU,16862,17082,458-107-1417-1066,29.97,1920,1080,train
ZjN0kL_SVJw,484,1026,486-99-1448-1061,29.97,1920,1080,train
ZjN0kL_SVJw,1430,1791,499-105-1453-1059,29.97,1920,1080,train
ZjN0kL_SVJw,1854,2092,496-87-1441-1032,29.97,1920,1080,train
ZjN0kL_SVJw,2608,2902,483-138-1423-1078,29.97,1920,1080,train
ZjN0kL_SVJw,4107,4453,501-116-1428-1043,29.97,1920,1080,train
ZjN0kL_SVJw,4640,4787,592-132-1446-986,29.97,1920,1080,train
ZjN0kL_SVJw,5007,5400,580-104-1516-1040,29.97,1920,1080,train
ZjN0kL_SVJw,5504,5765,625-139-1489-1003,29.97,1920,1080,train
ZjN0kL_SVJw,6068,6560,555-110-1460-1015,29.97,1920,1080,train
ZjN0kL_SVJw,6560,6708,557-64-1496-1003,29.97,1920,1080,train
ZjN0kL_SVJw,6978,7219,409-64-1398-1053,29.97,1920,1080,train
ZjN0kL_SVJw,7726,7867,428-169-1252-993,29.97,1920,1080,train
ZjN0kL_SVJw,8080,8216,521-166-1345-990,29.97,1920,1080,train
ZjN0kL_SVJw,8216,8506,586-123-1450-987,29.97,1920,1080,train
ZjN0kL_SVJw,9341,10027,523-128-1419-1024,29.97,1920,1080,train
ZjN0kL_SVJw,10645,10851,653-132-1555-1034,29.97,1920,1080,train
ZjN0kL_SVJw,11510,11645,406-135-1307-1036,29.97,1920,1080,train
ZjN0kL_SVJw,11818,12033,498-108-1365-975,29.97,1920,1080,train
ZjN0kL_SVJw,12558,12813,618-121-1502-1005,29.97,1920,1080,train
ZjN0kL_SVJw,13887,14539,466-102-1400-1036,29.97,1920,1080,train
ZjN0kL_SVJw,14632,14877,509-69-1478-1038,29.97,1920,1080,train
ZjN0kL_SVJw,15009,15188,467-112-1329-974,29.97,1920,1080,train
ZjN0kL_SVJw,15790,16165,488-52-1488-1052,29.97,1920,1080,train
ZjN0kL_SVJw,16515,16797,575-88-1481-994,29.97,1920,1080,train
ZjN0kL_SVJw,16918,17090,481-109-1382-1010,29.97,1920,1080,train
ZjN0kL_SVJw,17706,18370,477-109-1388-1020,29.97,1920,1080,train
ZjN0kL_SVJw,18864,19106,628-182-1450-1004,29.97,1920,1080,train
ZjN0kL_SVJw,19248,19483,626-187-1431-992,29.97,1920,1080,train
ZjN0kL_SVJw,19574,19705,700-154-1523-977,29.97,1920,1080,train
ZjN0kL_SVJw,19995,20148,613-200-1412-999,29.97,1920,1080,train
ZjN0kL_SVJw,20148,20438,596-214-1423-1041,29.97,1920,1080,train
ZjN0kL_SVJw,20754,21251,526-182-1375-1031,29.97,1920,1080,train
ZjN0kL_SVJw,21463,21675,575-203-1396-1024,29.97,1920,1080,train
ZjN0kL_SVJw,21978,22118,565-206-1431-1072,29.97,1920,1080,train
ZjN0kL_SVJw,22364,22549,564-144-1419-999,29.97,1920,1080,train
ZjN0kL_SVJw,22627,22805,430-123-1344-1037,29.97,1920,1080,train
ZjN0kL_SVJw,23025,23480,440-94-1351-1005,29.97,1920,1080,train
ZjN0kL_SVJw,23672,24011,490-60-1457-1027,29.97,1920,1080,train
ZjN0kL_SVJw,24369,24544,500-150-1382-1032,29.97,1920,1080,train
ZjN0kL_SVJw,25051,25218,498-149-1376-1027,29.97,1920,1080,train
ZjN0kL_SVJw,26621,26807,473-111-1367-1005,29.97,1920,1080,train
ZjN0kL_SVJw,27127,27435,347-60-1277-990,29.97,1920,1080,train
ZjN0kL_SVJw,27740,28028,574-84-1531-1041,29.97,1920,1080,train
ZjN0kL_SVJw,28375,28601,423-77-1311-965,29.97,1920,1080,train
ZjN0kL_SVJw,28832,28963,319-64-1310-1055,29.97,1920,1080,train
ZjN0kL_SVJw,29329,29545,371-83-1337-1049,29.97,1920,1080,train
ZjN0kL_SVJw,29652,29809,543-75-1518-1050,29.97,1920,1080,train
ZjN0kL_SVJw,30249,30753,469-75-1428-1034,29.97,1920,1080,train
ZjN0kL_SVJw,31021,31151,551-84-1470-1003,29.97,1920,1080,train
ZjN0kL_SVJw,31176,31444,449-60-1400-1011,29.97,1920,1080,train
ZjN0kL_SVJw,31616,31947,386-94-1339-1047,29.97,1920,1080,train
ZjN0kL_SVJw,31977,32248,671-75-1618-1022,29.97,1920,1080,train
ZjN0kL_SVJw,32391,32575,485-140-1359-1014,29.97,1920,1080,train
ZjN0kL_SVJw,32575,32830,468-142-1383-1057,29.97,1920,1080,train
ZjN0kL_SVJw,32830,33120,480-99-1405-1024,29.97,1920,1080,train
ZjN0kL_SVJw,33497,33680,414-102-1315-1003,29.97,1920,1080,train
ZjN0kL_SVJw,33975,34175,571-177-1418-1024,29.97,1920,1080,train
ZjN0kL_SVJw,34260,34450,461-172-1345-1056,29.97,1920,1080,train
ZjN0kL_SVJw,34592,35099,470-96-1401-1027,29.97,1920,1080,train
ZjN0kL_SVJw,35586,35735,436-93-1387-1044,29.97,1920,1080,train
ZjN0kL_SVJw,35735,35919,655-156-1533-1034,29.97,1920,1080,train
ZjN0kL_SVJw,36098,36243,569-177-1425-1033,29.97,1920,1080,train
ZjN0kL_SVJw,36631,36898,426-109-1392-1075,29.97,1920,1080,train
ZjN0kL_SVJw,37391,37543,407-86-1373-1052,29.97,1920,1080,train
ZjN0kL_SVJw,37842,38109,464-103-1420-1059,29.97,1920,1080,train
ZjN0kL_SVJw,38109,38345,416-59-1369-1012,29.97,1920,1080,train
ZjN0kL_SVJw,39026,39156,540-174-1410-1044,29.97,1920,1080,train
ZjN0kL_SVJw,39519,39951,511-160-1351-1000,29.97,1920,1080,train
ZjN0kL_SVJw,40298,40634,500-155-1339-994,29.97,1920,1080,train
ZjN0kL_SVJw,40681,40819,525-129-1408-1012,29.97,1920,1080,train
ZjN0kL_SVJw,41084,41399,600-69-1536-1005,29.97,1920,1080,train
ZjN0kL_SVJw,42242,42392,550-143-1439-1032,29.97,1920,1080,train
ZjN0kL_SVJw,42392,42947,437-101-1348-1012,29.97,1920,1080,train
ZjN0kL_SVJw,42947,43160,464-122-1405-1063,29.97,1920,1080,train
ZjN0kL_SVJw,43560,43764,499-131-1394-1026,29.97,1920,1080,train
ZjN0kL_SVJw,44320,44604,446-65-1420-1039,29.97,1920,1080,train
ZjN0kL_SVJw,44822,44998,441-106-1380-1045,29.97,1920,1080,train
ZjN0kL_SVJw,45217,45352,474-25-1468-1019,29.97,1920,1080,train
ZjN0kL_SVJw,45463,45647,470-74-1425-1029,29.97,1920,1080,train
ZjN0kL_SVJw,45647,46118,516-27-1507-1018,29.97,1920,1080,train
ZjN0kL_SVJw,47084,47212,459-116-1422-1079,29.97,1920,1080,train
ZjN0kL_SVJw,47552,47970,411-59-1408-1056,29.97,1920,1080,train
ZjN0kL_SVJw,48147,48725,436-30-1445-1039,29.97,1920,1080,train
ZjN0kL_SVJw,48725,49050,682-81-1606-1005,29.97,1920,1080,train
ZjN0kL_SVJw,49753,49894,488-103-1403-1018,29.97,1920,1080,train
ZjN0kL_SVJw,49910,50138,467-56-1464-1053,29.97,1920,1080,train
ZjN0kL_SVJw,50507,50801,579-253-1280-954,29.97,1920,1080,train
ZjN0kL_SVJw,51795,52079,489-79-1412-1002,29.97,1920,1080,train
ZjN0kL_SVJw,52313,52812,478-177-1317-1016,29.97,1920,1080,train
ZjN0kL_SVJw,52968,53141,496-127-1334-965,29.97,1920,1080,train
ZjN0kL_SVJw,54177,54583,440-51-1442-1053,29.97,1920,1080,train
ZjN0kL_SVJw,54984,55128,543-97-1415-969,29.97,1920,1080,train
ZjN0kL_SVJw,55256,55425,520-190-1311-981,29.97,1920,1080,train
ZjN0kL_SVJw,56476,57029,471-56-1425-1010,29.97,1920,1080,train
ZjN0kL_SVJw,57533,57678,667-70-1622-1025,29.97,1920,1080,train
ZjN0kL_SVJw,57794,58094,500-63-1455-1018,29.97,1920,1080,train
ZjN0kL_SVJw,59433,59619,473-90-1394-1011,29.97,1920,1080,train
ZjN0kL_SVJw,60005,60236,445-41-1407-1003,29.97,1920,1080,train
ZjN0kL_SVJw,60236,60964,477-116-1411-1050,29.97,1920,1080,train
ZjN0kL_SVJw,61106,61308,558-107-1459-1008,29.97,1920,1080,train
ZjN0kL_SVJw,62100,62696,440-35-1476-1071,29.97,1920,1080,train
ZjN0kL_SVJw,63604,63847,534-125-1319-910,29.97,1920,1080,train
ZjN0kL_SVJw,64809,65833,483-70-1452-1039,29.97,1920,1080,train
ZjN0kL_SVJw,66046,66329,551-136-1383-968,29.97,1920,1080,train
ZjN0kL_SVJw,66965,67124,595-118-1481-1004,29.97,1920,1080,train
ZjN0kL_SVJw,67155,68081,526-117-1420-1011,29.97,1920,1080,train
ZjN0kL_SVJw,68179,68369,525-112-1376-963,29.97,1920,1080,train
ZjN0kL_SVJw,68494,68671,446-39-1445-1038,29.97,1920,1080,train
ZjN0kL_SVJw,68930,69343,434-46-1436-1048,29.97,1920,1080,train
ZjN0kL_SVJw,69642,69859,535-127-1446-1038,29.97,1920,1080,train
ZjN0kL_SVJw,70223,70396,640-199-1425-984,29.97,1920,1080,train
ZjN0kL_SVJw,72195,72374,598-186-1369-957,29.97,1920,1080,train
ZjN0kL_SVJw,72374,72640,589-146-1409-966,29.97,1920,1080,train
ZjN0kL_SVJw,73008,73137,526-212-1273-959,29.97,1920,1080,train
ZjN0kL_SVJw,73240,73380,673-267-1359-953,29.97,1920,1080,train
ZjN0kL_SVJw,73644,73779,556-164-1354-962,29.97,1920,1080,train
ZjN0kL_SVJw,74163,74487,502-156-1353-1007,29.97,1920,1080,train
ZjN0kL_SVJw,74693,74823,472-98-1355-981,29.97,1920,1080,train
ZjN0kL_SVJw,77783,78105,293-184-1024-915,29.97,1920,1080,train
ZjN0kL_SVJw,84420,84673,435-196-1163-924,29.97,1920,1080,train
ZjN0kL_SVJw,84901,85161,470-71-1437-1038,29.97,1920,1080,train
ZjN0kL_SVJw,85253,85513,423-19-1467-1063,29.97,1920,1080,train
ZjN0kL_SVJw,87050,88074,492-82-1417-1007,29.97,1920,1080,train
ZjN0kL_SVJw,88509,88751,529-161-1366-998,29.97,1920,1080,train
ZjN0kL_SVJw,88883,89056,579-176-1404-1001,29.97,1920,1080,train
ZjN0kL_SVJw,89056,89290,569-132-1437-1000,29.97,1920,1080,train
ZjN0kL_SVJw,89290,89565,537-177-1399-1039,29.97,1920,1080,train
ZjN0kL_SVJw,89567,89891,527-123-1433-1029,29.97,1920,1080,train
ZjN0kL_SVJw,90851,91195,570-178-1396-1004,29.97,1920,1080,train
ZjN0kL_SVJw,91442,91871,472-146-1326-1000,29.97,1920,1080,train
ZjN0kL_SVJw,92039,92215,581-120-1489-1028,29.97,1920,1080,train
ZjN0kL_SVJw,92223,92364,481-31-1450-1000,29.97,1920,1080,train
ZjN0kL_SVJw,93338,93652,464-52-1467-1055,29.97,1920,1080,train
ZjN0kL_SVJw,93653,93893,565-98-1479-1012,29.97,1920,1080,train
ZjN0kL_SVJw,93935,94135,468-109-1365-1006,29.97,1920,1080,train
ZjN0kL_SVJw,94183,94754,381-46-1352-1017,29.97,1920,1080,train
ZjN0kL_SVJw,94967,95169,468-101-1371-1004,29.97,1920,1080,train
ZjN0kL_SVJw,95169,95467,477-55-1446-1024,29.97,1920,1080,train
ZjN0kL_SVJw,95854,96270,481-82-1439-1040,29.97,1920,1080,train
ZjN0kL_SVJw,96581,97075,493-78-1456-1041,29.97,1920,1080,train
ZjN0kL_SVJw,97442,97937,457-67-1459-1069,29.97,1920,1080,train
ZjN0kL_SVJw,98039,98628,418-92-1362-1036,29.97,1920,1080,train
FBuF0xOal9M,2445,2573,381-299-1150-1068,59.94,1920,1080,test
FBuF0xOal9M,2697,2840,655-362-1362-1069,59.94,1920,1080,test
FBuF0xOal9M,5168,5451,549-253-1357-1061,59.94,1920,1080,test
FBuF0xOal9M,6989,7146,565-239-1404-1078,59.94,1920,1080,test
FBuF0xOal9M,8657,8880,497-321-1251-1075,59.94,1920,1080,test
FBuF0xOal9M,11184,11359,632-253-1452-1073,59.94,1920,1080,test
FBuF0xOal9M,12781,12914,569-338-1303-1072,59.94,1920,1080,test
FBuF0xOal9M,12914,13183,664-320-1399-1055,59.94,1920,1080,test
FBuF0xOal9M,13311,13440,584-363-1290-1069,59.94,1920,1080,test
FBuF0xOal9M,13521,13680,536-275-1333-1072,59.94,1920,1080,test
FBuF0xOal9M,14632,14977,459-87-1441-1069,59.94,1920,1080,test
FBuF0xOal9M,15166,15296,761-317-1507-1063,59.94,1920,1080,test
FBuF0xOal9M,16204,16425,614-198-1423-1007,59.94,1920,1080,test
FBuF0xOal9M,16845,17032,467-213-1255-1001,59.94,1920,1080,test
FBuF0xOal9M,18334,18480,510-240-1262-992,59.94,1920,1080,test
FBuF0xOal9M,18515,18662,643-279-1341-977,59.94,1920,1080,test
FBuF0xOal9M,18892,19332,476-208-1280-1012,59.94,1920,1080,test
FBuF0xOal9M,19516,19645,585-268-1347-1030,59.94,1920,1080,test
FBuF0xOal9M,19762,19920,494-242-1258-1006,59.94,1920,1080,test
FBuF0xOal9M,20546,20880,531-180-1359-1008,59.94,1920,1080,test
FBuF0xOal9M,21432,21717,629-231-1424-1026,59.94,1920,1080,test
FBuF0xOal9M,22427,22560,692-223-1518-1049,59.94,1920,1080,test
FBuF0xOal9M,23027,23171,617-250-1371-1004,59.94,1920,1080,test
FBuF0xOal9M,23520,23680,379-157-1268-1046,59.94,1920,1080,test
FBuF0xOal9M,25129,25327,427-112-1360-1045,59.94,1920,1080,test
FBuF0xOal9M,25690,25859,429-235-1223-1029,59.94,1920,1080,test
FBuF0xOal9M,25920,26069,397-237-1181-1021,59.94,1920,1080,test
FBuF0xOal9M,26990,27198,599-219-1436-1056,59.94,1920,1080,test
FBuF0xOal9M,27360,27641,466-353-1154-1041,59.94,1920,1080,test
FBuF0xOal9M,27676,27831,299-279-1063-1043,59.94,1920,1080,test
FBuF0xOal9M,27831,27985,525-314-1259-1048,59.94,1920,1080,test
FBuF0xOal9M,28148,28335,557-284-1309-1036,59.94,1920,1080,test
FBuF0xOal9M,28446,28683,597-311-1339-1053,59.94,1920,1080,test
FBuF0xOal9M,28903,29040,632-213-1490-1071,59.94,1920,1080,test
FBuF0xOal9M,29146,29407,515-252-1342-1079,59.94,1920,1080,test
FBuF0xOal9M,29520,29741,574-230-1357-1013,59.94,1920,1080,test
FBuF0xOal9M,30073,30214,458-228-1252-1022,59.94,1920,1080,test
FBuF0xOal9M,30241,30452,560-267-1307-1014,59.94,1920,1080,test
FBuF0xOal9M,30639,30929,443-244-1243-1044,59.94,1920,1080,test
FBuF0xOal9M,30929,31220,588-244-1358-1014,59.94,1920,1080,test
FBuF0xOal9M,31760,31920,535-127-1418-1010,59.94,1920,1080,test
FBuF0xOal9M,31920,32073,478-277-1209-1008,59.94,1920,1080,test
FBuF0xOal9M,32312,32523,609-299-1316-1006,59.94,1920,1080,test
FBuF0xOal9M,32611,32740,599-234-1371-1006,59.94,1920,1080,test
FBuF0xOal9M,32744,32946,469-235-1220-986,59.94,1920,1080,test
FBuF0xOal9M,33424,33581,680-241-1437-998,59.94,1920,1080,test
FBuF0xOal9M,33930,34077,919-208-1703-992,59.94,1920,1080,test
FBuF0xOal9M,37437,37599,560-209-1356-1005,59.94,1920,1080,test
FBuF0xOal9M,37737,37992,511-277-1244-1010,59.94,1920,1080,test
FBuF0xOal9M,38269,38400,540-234-1313-1007,59.94,1920,1080,test
FBuF0xOal9M,40260,40473,568-294-1284-1010,59.94,1920,1080,test
FBuF0xOal9M,42017,42216,462-132-1370-1040,59.94,1920,1080,test
FBuF0xOal9M,42959,43131,666-256-1430-1020,59.94,1920,1080,test
FBuF0xOal9M,43327,43575,529-151-1410-1032,59.94,1920,1080,test
FBuF0xOal9M,44165,44384,553-205-1388-1040,59.94,1920,1080,test
FBuF0xOal9M,45663,46051,487-178-1294-985,59.94,1920,1080,test
FBuF0xOal9M,46320,46458,620-191-1453-1024,59.94,1920,1080,test
FBuF0xOal9M,46555,46733,558-217-1340-999,59.94,1920,1080,test
FBuF0xOal9M,46824,47542,509-108-1421-1020,59.94,1920,1080,test
================================================
FILE: data/taichi256.csv
================================================
distance,source,driving,frame
3.54437869822485,ab28GAufK8o#000261#000596.mp4,aDyyTMUBoLE#000164#000351.mp4,0
2.8639053254437887,DMEaUoA8EPE#000028#000354.mp4,0Q914by5A98#010440#010764.mp4,0
2.153846153846153,L82WHgYRq6I#000021#000479.mp4,0Q914by5A98#010440#010764.mp4,0
2.8994082840236666,oNkBx4CZuEg#000000#001024.mp4,DMEaUoA8EPE#000028#000354.mp4,0
3.3905325443786998,ab28GAufK8o#000261#000596.mp4,uEqWZ9S_-Lw#000089#000581.mp4,0
3.266272189349112,0Q914by5A98#010440#010764.mp4,ab28GAufK8o#000261#000596.mp4,0
2.7514792899408294,WlDYrq8K6nk#008186#008512.mp4,OiblkvkAHWM#014331#014459.mp4,0
3.0177514792899407,oNkBx4CZuEg#001024#002048.mp4,aDyyTMUBoLE#000375#000518.mp4,0
3.4792899408284064,aDyyTMUBoLE#000164#000351.mp4,w2awOCDRtrc#001729#002009.mp4,0
2.769230769230769,oNkBx4CZuEg#000000#001024.mp4,L82WHgYRq6I#000021#000479.mp4,0
3.8047337278106514,ab28GAufK8o#000261#000596.mp4,w2awOCDRtrc#001729#002009.mp4,0
3.4260355029585763,w2awOCDRtrc#001729#002009.mp4,oNkBx4CZuEg#000000#001024.mp4,0
3.313609467455621,DMEaUoA8EPE#000028#000354.mp4,WlDYrq8K6nk#005943#006135.mp4,0
3.8402366863905333,oNkBx4CZuEg#001024#002048.mp4,ab28GAufK8o#000261#000596.mp4,0
3.3254437869822504,aDyyTMUBoLE#000164#000351.mp4,oNkBx4CZuEg#000000#001024.mp4,0
1.2485207100591724,0Q914by5A98#010440#010764.mp4,aDyyTMUBoLE#000164#000351.mp4,0
3.804733727810652,OiblkvkAHWM#006251#006533.mp4,aDyyTMUBoLE#000375#000518.mp4,0
3.662721893491124,uEqWZ9S_-Lw#000089#000581.mp4,DMEaUoA8EPE#000028#000354.mp4,0
3.230769230769233,A3ZmT97hAWU#000095#000678.mp4,ab28GAufK8o#000261#000596.mp4,0
3.3668639053254434,w81Tr0Dp1K8#015329#015485.mp4,WlDYrq8K6nk#008186#008512.mp4,0
3.313609467455621,WlDYrq8K6nk#005943#006135.mp4,DMEaUoA8EPE#000028#000354.mp4,0
2.7514792899408294,OiblkvkAHWM#014331#014459.mp4,WlDYrq8K6nk#008186#008512.mp4,0
1.964497041420118,L82WHgYRq6I#000021#000479.mp4,DMEaUoA8EPE#000028#000354.mp4,0
3.78698224852071,FBuF0xOal9M#046824#047542.mp4,lCb5w6n8kPs#011879#012014.mp4,0
3.92307692307692,ab28GAufK8o#000261#000596.mp4,L82WHgYRq6I#000021#000479.mp4,0
3.8402366863905333,ab28GAufK8o#000261#000596.mp4,oNkBx4CZuEg#001024#002048.mp4,0
3.828402366863905,ab28GAufK8o#000261#000596.mp4,OiblkvkAHWM#006251#006533.mp4,0
2.041420118343196,L82WHgYRq6I#000021#000479.mp4,aDyyTMUBoLE#000164#000351.mp4,0
3.2485207100591724,0Q914by5A98#010440#010764.mp4,w2awOCDRtrc#001729#002009.mp4,0
3.2485207100591746,oNkBx4CZuEg#000000#001024.mp4,0Q914by5A98#010440#010764.mp4,0
1.964497041420118,DMEaUoA8EPE#000028#000354.mp4,L82WHgYRq6I#000021#000479.mp4,0
3.5266272189349115,kgvcI9oe3NI#001578#001763.mp4,lCb5w6n8kPs#004451#004631.mp4,0
3.005917159763317,A3ZmT97hAWU#000095#000678.mp4,0Q914by5A98#010440#010764.mp4,0
3.230769230769233,ab28GAufK8o#000261#000596.mp4,A3ZmT97hAWU#000095#000678.mp4,0
3.5266272189349115,lCb5w6n8kPs#004451#004631.mp4,kgvcI9oe3NI#001578#001763.mp4,0
2.769230769230769,L82WHgYRq6I#000021#000479.mp4,oNkBx4CZuEg#000000#001024.mp4,0
3.165680473372782,WlDYrq8K6nk#005943#006135.mp4,w81Tr0Dp1K8#001375#001516.mp4,0
2.8994082840236666,DMEaUoA8EPE#000028#000354.mp4,oNkBx4CZuEg#000000#001024.mp4,0
2.4556213017751523,0Q914by5A98#010440#010764.mp4,mndSqTrxpts#000000#000175.mp4,0
2.201183431952659,A3ZmT97hAWU#000095#000678.mp4,VMSqvTE90hk#007168#007312.mp4,0
3.8047337278106514,w2awOCDRtrc#001729#002009.mp4,ab28GAufK8o#000261#000596.mp4,0
3.769230769230769,uEqWZ9S_-Lw#000089#000581.mp4,0Q914by5A98#010440#010764.mp4,0
3.6568047337278102,A3ZmT97hAWU#000095#000678.mp4,aDyyTMUBoLE#000164#000351.mp4,0
3.7869822485207107,uEqWZ9S_-Lw#000089#000581.mp4,L82WHgYRq6I#000021#000479.mp4,0
3.78698224852071,lCb5w6n8kPs#011879#012014.mp4,FBuF0xOal9M#046824#047542.mp4,0
3.591715976331361,nAQEOC1Z10M#020177#020600.mp4,w81Tr0Dp1K8#004036#004218.mp4,0
3.8757396449704156,uEqWZ9S_-Lw#000089#000581.mp4,aDyyTMUBoLE#000164#000351.mp4,0
2.45562130177515,aDyyTMUBoLE#000164#000351.mp4,DMEaUoA8EPE#000028#000354.mp4,0
3.5502958579881647,uEqWZ9S_-Lw#000089#000581.mp4,OiblkvkAHWM#006251#006533.mp4,0
3.7928994082840224,aDyyTMUBoLE#000375#000518.mp4,ab28GAufK8o#000261#000596.mp4,0
================================================
FILE: demo.ipynb
================================================
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "first-order-model-demo",
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"
",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cdO_RxQZLahB"
},
"source": [
"# Demo for paper \"First Order Motion Model for Image Animation\"\n",
"To try the demo, press the 2 play buttons in order and scroll to the bottom. Note that it may take several minutes to load."
]
},
{
"cell_type": "code",
"metadata": {
"id": "UCMFMJV7K-ag"
},
"source": [
"%%capture\n",
"%pip install ffmpeg-python imageio-ffmpeg\n",
"!git init .\n",
"!git remote add origin https://github.com/AliaksandrSiarohin/first-order-model\n",
"!git pull origin master\n",
"!git clone https://github.com/graphemecluster/first-order-model-demo demo"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Oxi6-riLOgnm"
},
"source": [
"import IPython.display\n",
"import PIL.Image\n",
"import cv2\n",
"import ffmpeg\n",
"import imageio\n",
"import io\n",
"import ipywidgets\n",
"import numpy\n",
"import os.path\n",
"import requests\n",
"import skimage.transform\n",
"import warnings\n",
"from base64 import b64encode\n",
"from demo import load_checkpoints, make_animation # type: ignore (local file)\n",
"from google.colab import files, output\n",
"from IPython.display import HTML, Javascript\n",
"from shutil import copyfileobj\n",
"from skimage import img_as_ubyte\n",
"from tempfile import NamedTemporaryFile\n",
"from tqdm.auto import tqdm\n",
"warnings.filterwarnings(\"ignore\")\n",
"os.makedirs(\"user\", exist_ok=True)\n",
"\n",
"display(HTML(\"\"\"\n",
"\n",
"\"\"\"))\n",
"\n",
"def thumbnail(file):\n",
"\treturn imageio.get_reader(file, mode='I', format='FFMPEG').get_next_data()\n",
"\n",
"def create_image(i, j):\n",
"\timage_widget = ipywidgets.Image.from_file('demo/images/%d%d.png' % (i, j))\n",
"\timage_widget.add_class('resource')\n",
"\timage_widget.add_class('resource-image')\n",
"\timage_widget.add_class('resource-image%d%d' % (i, j))\n",
"\treturn image_widget\n",
"\n",
"def create_video(i):\n",
"\tvideo_widget = ipywidgets.Image(\n",
"\t\tvalue=cv2.imencode('.png', cv2.cvtColor(thumbnail('demo/videos/%d.mp4' % i), cv2.COLOR_RGB2BGR))[1].tostring(),\n",
"\t\tformat='png'\n",
"\t)\n",
"\tvideo_widget.add_class('resource')\n",
"\tvideo_widget.add_class('resource-video')\n",
"\tvideo_widget.add_class('resource-video%d' % i)\n",
"\treturn video_widget\n",
"\n",
"def create_title(title):\n",
"\ttitle_widget = ipywidgets.Label(title)\n",
"\ttitle_widget.add_class('title')\n",
"\treturn title_widget\n",
"\n",
"def download_output(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tfiles.download('output.mp4')\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"def convert_output(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tffmpeg.input('output.mp4').output('scaled.mp4', vf='scale=1080x1080:flags=lanczos,pad=1920:1080:420:0').overwrite_output().run()\n",
"\tfiles.download('scaled.mp4')\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"def back_to_main(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tmain.layout.display = ''\n",
"\n",
"label_or = ipywidgets.Label('or')\n",
"label_or.add_class('label-or')\n",
"\n",
"image_titles = ['Peoples', 'Cartoons', 'Dolls', 'Game of Thrones', 'Statues']\n",
"image_lengths = [8, 4, 8, 9, 4]\n",
"\n",
"image_tab = ipywidgets.Tab()\n",
"image_tab.children = [ipywidgets.HBox([create_image(i, j) for j in range(length)]) for i, length in enumerate(image_lengths)]\n",
"for i, title in enumerate(image_titles):\n",
"\timage_tab.set_title(i, title)\n",
"\n",
"input_image_widget = ipywidgets.Output()\n",
"input_image_widget.add_class('input-widget')\n",
"upload_input_image_button = ipywidgets.FileUpload(accept='image/*', button_style='primary')\n",
"upload_input_image_button.add_class('input-button')\n",
"image_part = ipywidgets.HBox([\n",
"\tipywidgets.VBox([input_image_widget, upload_input_image_button]),\n",
"\tlabel_or,\n",
"\timage_tab\n",
"])\n",
"\n",
"video_tab = ipywidgets.Tab()\n",
"video_tab.children = [ipywidgets.HBox([create_video(i) for i in range(5)])]\n",
"video_tab.set_title(0, 'All Videos')\n",
"\n",
"input_video_widget = ipywidgets.Output()\n",
"input_video_widget.add_class('input-widget')\n",
"upload_input_video_button = ipywidgets.FileUpload(accept='video/*', button_style='primary')\n",
"upload_input_video_button.add_class('input-button')\n",
"video_part = ipywidgets.HBox([\n",
"\tipywidgets.VBox([input_video_widget, upload_input_video_button]),\n",
"\tlabel_or,\n",
"\tvideo_tab\n",
"])\n",
"\n",
"model = ipywidgets.Dropdown(\n",
"\tdescription=\"Model:\",\n",
"\toptions=[\n",
"\t\t'vox',\n",
"\t\t'vox-adv',\n",
"\t\t'taichi',\n",
"\t\t'taichi-adv',\n",
"\t\t'nemo',\n",
"\t\t'mgif',\n",
"\t\t'fashion',\n",
"\t\t'bair'\n",
"\t]\n",
")\n",
"warning = ipywidgets.HTML('Warning: Upload your own images and videos (see README)')\n",
"warning.add_class('warning')\n",
"model_part = ipywidgets.HBox([model, warning])\n",
"\n",
"relative = ipywidgets.Checkbox(description=\"Relative keypoint displacement (Inherit object proporions from the video)\", value=True)\n",
"adapt_movement_scale = ipywidgets.Checkbox(description=\"Adapt movement scale (Don’t touch unless you know want you are doing)\", value=True)\n",
"generate_button = ipywidgets.Button(description=\"Generate\", button_style='primary')\n",
"main = ipywidgets.VBox([\n",
"\tcreate_title('Choose Image'),\n",
"\timage_part,\n",
"\tcreate_title('Choose Video'),\n",
"\tvideo_part,\n",
"\tcreate_title('Settings'),\n",
"\tmodel_part,\n",
"\trelative,\n",
"\tadapt_movement_scale,\n",
"\tgenerate_button\n",
"])\n",
"\n",
"loader = ipywidgets.Label()\n",
"loader.add_class(\"loader\")\n",
"loading_label = ipywidgets.Label(\"This may take several minutes to process…\")\n",
"loading_label.add_class(\"loading-label\")\n",
"progress_bar = ipywidgets.Output()\n",
"loading = ipywidgets.VBox([loader, loading_label, progress_bar])\n",
"loading.add_class('loading')\n",
"\n",
"output_widget = ipywidgets.Output()\n",
"output_widget.add_class('output-widget')\n",
"download = ipywidgets.Button(description='Download', button_style='primary')\n",
"download.add_class('output-button')\n",
"download.on_click(download_output)\n",
"convert = ipywidgets.Button(description='Convert to 1920×1080', button_style='primary')\n",
"convert.add_class('output-button')\n",
"convert.on_click(convert_output)\n",
"back = ipywidgets.Button(description='Back', button_style='primary')\n",
"back.add_class('output-button')\n",
"back.on_click(back_to_main)\n",
"\n",
"comparison_widget = ipywidgets.Output()\n",
"comparison_widget.add_class('comparison-widget')\n",
"comparison_label = ipywidgets.Label('Comparison')\n",
"comparison_label.add_class('comparison-label')\n",
"complete = ipywidgets.HBox([\n",
"\tipywidgets.VBox([output_widget, download, convert, back]),\n",
"\tipywidgets.VBox([comparison_widget, comparison_label])\n",
"])\n",
"\n",
"display(ipywidgets.VBox([main, loading, complete]))\n",
"display(Javascript(\"\"\"\n",
"var images, videos;\n",
"function deselectImages() {\n",
"\timages.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function deselectVideos() {\n",
"\tvideos.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function invokePython(func) {\n",
"\tgoogle.colab.kernel.invokeFunction(\"notebook.\" + func, [].slice.call(arguments, 1), {});\n",
"}\n",
"setTimeout(function() {\n",
"\t(images = [].slice.call(document.getElementsByClassName(\"resource-image\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectImages();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_image\", item.className.match(/resource-image(\\d\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\timages[0].classList.add(\"selected\");\n",
"\t(videos = [].slice.call(document.getElementsByClassName(\"resource-video\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectVideos();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_video\", item.className.match(/resource-video(\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\tvideos[0].classList.add(\"selected\");\n",
"}, 1000);\n",
"\"\"\"))\n",
"\n",
"selected_image = None\n",
"def select_image(filename):\n",
"\tglobal selected_image\n",
"\tselected_image = resize(PIL.Image.open('demo/images/%s.png' % filename).convert(\"RGB\"))\n",
"\tinput_image_widget.clear_output(wait=True)\n",
"\twith input_image_widget:\n",
"\t\tdisplay(HTML('Image'))\n",
"\tinput_image_widget.remove_class('uploaded')\n",
"output.register_callback(\"notebook.select_image\", select_image)\n",
"\n",
"selected_video = None\n",
"def select_video(filename):\n",
"\tglobal selected_video\n",
"\tselected_video = 'demo/videos/%s.mp4' % filename\n",
"\tinput_video_widget.clear_output(wait=True)\n",
"\twith input_video_widget:\n",
"\t\tdisplay(HTML('Video'))\n",
"\tinput_video_widget.remove_class('uploaded')\n",
"output.register_callback(\"notebook.select_video\", select_video)\n",
"\n",
"def resize(image, size=(256, 256)):\n",
"\tw, h = image.size\n",
"\td = min(w, h)\n",
"\tr = ((w - d) // 2, (h - d) // 2, (w + d) // 2, (h + d) // 2)\n",
"\treturn image.resize(size, resample=PIL.Image.LANCZOS, box=r)\n",
"\n",
"def upload_image(change):\n",
"\tglobal selected_image\n",
"\tfor name, file_info in upload_input_image_button.value.items():\n",
"\t\tcontent = file_info['content']\n",
"\tif content is not None:\n",
"\t\tselected_image = resize(PIL.Image.open(io.BytesIO(content)).convert(\"RGB\"))\n",
"\t\tinput_image_widget.clear_output(wait=True)\n",
"\t\twith input_image_widget:\n",
"\t\t\tdisplay(selected_image)\n",
"\t\tinput_image_widget.add_class('uploaded')\n",
"\t\tdisplay(Javascript('deselectImages()'))\n",
"upload_input_image_button.observe(upload_image, names='value')\n",
"\n",
"def upload_video(change):\n",
"\tglobal selected_video\n",
"\tfor name, file_info in upload_input_video_button.value.items():\n",
"\t\tcontent = file_info['content']\n",
"\tif content is not None:\n",
"\t\tselected_video = 'user/' + name\n",
"\t\twith open(selected_video, 'wb') as video:\n",
"\t\t\tvideo.write(content)\n",
"\t\tpreview = resize(PIL.Image.fromarray(thumbnail(selected_video)).convert(\"RGB\"))\n",
"\t\tinput_video_widget.clear_output(wait=True)\n",
"\t\twith input_video_widget:\n",
"\t\t\tdisplay(preview)\n",
"\t\tinput_video_widget.add_class('uploaded')\n",
"\t\tdisplay(Javascript('deselectVideos()'))\n",
"upload_input_video_button.observe(upload_video, names='value')\n",
"\n",
"def change_model(change):\n",
"\tif model.value.startswith('vox'):\n",
"\t\twarning.remove_class('warn')\n",
"\telse:\n",
"\t\twarning.add_class('warn')\n",
"model.observe(change_model, names='value')\n",
"\n",
"def generate(button):\n",
"\tmain.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tfilename = model.value + ('' if model.value == 'fashion' else '-cpk') + '.pth.tar'\n",
"\tif not os.path.isfile(filename):\n",
"\t\tresponse = requests.get('https://github.com/graphemecluster/first-order-model-demo/releases/download/checkpoints/' + filename, stream=True)\n",
"\t\twith progress_bar:\n",
"\t\t\twith tqdm.wrapattr(response.raw, 'read', total=int(response.headers.get('Content-Length', 0)), unit='B', unit_scale=True, unit_divisor=1024) as raw:\n",
"\t\t\t\twith open(filename, 'wb') as file:\n",
"\t\t\t\t\tcopyfileobj(raw, file)\n",
"\t\tprogress_bar.clear_output()\n",
"\treader = imageio.get_reader(selected_video, mode='I', format='FFMPEG')\n",
"\tfps = reader.get_meta_data()['fps']\n",
"\tdriving_video = []\n",
"\tfor frame in reader:\n",
"\t\tdriving_video.append(frame)\n",
"\tgenerator, kp_detector = load_checkpoints(config_path='config/%s-256.yaml' % model.value, checkpoint_path=filename)\n",
"\twith progress_bar:\n",
"\t\tpredictions = make_animation(\n",
"\t\t\tskimage.transform.resize(numpy.asarray(selected_image), (256, 256)),\n",
"\t\t\t[skimage.transform.resize(frame, (256, 256)) for frame in driving_video],\n",
"\t\t\tgenerator,\n",
"\t\t\tkp_detector,\n",
"\t\t\trelative=relative.value,\n",
"\t\t\tadapt_movement_scale=adapt_movement_scale.value\n",
"\t\t)\n",
"\tprogress_bar.clear_output()\n",
"\timageio.mimsave('output.mp4', [img_as_ubyte(frame) for frame in predictions], fps=fps)\n",
"\ttry:\n",
"\t\twith NamedTemporaryFile(suffix='.mp4') as output:\n",
"\t\t\tffmpeg.output(ffmpeg.input('output.mp4').video, ffmpeg.input(selected_video).audio, output.name, c='copy').run()\n",
"\t\t\twith open('output.mp4', 'wb') as result:\n",
"\t\t\t\tcopyfileobj(output, result)\n",
"\texcept ffmpeg.Error:\n",
"\t\tpass\n",
"\toutput_widget.clear_output(True)\n",
"\twith output_widget:\n",
"\t\tvideo_widget = ipywidgets.Video.from_file('output.mp4', autoplay=False, loop=False)\n",
"\t\tvideo_widget.add_class('video')\n",
"\t\tvideo_widget.add_class('video-left')\n",
"\t\tdisplay(video_widget)\n",
"\tcomparison_widget.clear_output(True)\n",
"\twith comparison_widget:\n",
"\t\tvideo_widget = ipywidgets.Video.from_file(selected_video, autoplay=False, loop=False, controls=False)\n",
"\t\tvideo_widget.add_class('video')\n",
"\t\tvideo_widget.add_class('video-right')\n",
"\t\tdisplay(video_widget)\n",
"\tdisplay(Javascript(\"\"\"\n",
"\tsetTimeout(function() {\n",
"\t\t(function(left, right) {\n",
"\t\t\tleft.addEventListener(\"play\", function() {\n",
"\t\t\t\tright.play();\n",
"\t\t\t});\n",
"\t\t\tleft.addEventListener(\"pause\", function() {\n",
"\t\t\t\tright.pause();\n",
"\t\t\t});\n",
"\t\t\tleft.addEventListener(\"seeking\", function() {\n",
"\t\t\t\tright.currentTime = left.currentTime;\n",
"\t\t\t});\n",
"\t\t\tright.muted = true;\n",
"\t\t})(document.getElementsByClassName(\"video-left\")[0], document.getElementsByClassName(\"video-right\")[0]);\n",
"\t}, 1000);\n",
"\t\"\"\"))\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"generate_button.on_click(generate)\n",
"\n",
"loading.layout.display = 'none'\n",
"complete.layout.display = 'none'\n",
"select_image('00')\n",
"select_video('0')"
],
"execution_count": null,
"outputs": []
}
]
}
================================================
FILE: demo.py
================================================
import sys
import yaml
from argparse import ArgumentParser
from tqdm.auto import tqdm
import imageio
import numpy as np
from skimage.transform import resize
from skimage import img_as_ubyte
import torch
from sync_batchnorm import DataParallelWithCallback
from modules.generator import OcclusionAwareGenerator
from modules.keypoint_detector import KPDetector
from animate import normalize_kp
import ffmpeg
from os.path import splitext
from shutil import copyfileobj
from tempfile import NamedTemporaryFile
if sys.version_info[0] < 3:
raise Exception("You must use Python 3 or higher. Recommended version is Python 3.7")
def load_checkpoints(config_path, checkpoint_path, cpu=False):
with open(config_path) as f:
config = yaml.full_load(f)
generator = OcclusionAwareGenerator(**config['model_params']['generator_params'],
**config['model_params']['common_params'])
if not cpu:
generator.cuda()
kp_detector = KPDetector(**config['model_params']['kp_detector_params'],
**config['model_params']['common_params'])
if not cpu:
kp_detector.cuda()
if cpu:
checkpoint = torch.load(checkpoint_path, map_location=torch.device('cpu'))
else:
checkpoint = torch.load(checkpoint_path)
generator.load_state_dict(checkpoint['generator'])
kp_detector.load_state_dict(checkpoint['kp_detector'])
if not cpu:
generator = DataParallelWithCallback(generator)
kp_detector = DataParallelWithCallback(kp_detector)
generator.eval()
kp_detector.eval()
return generator, kp_detector
def make_animation(source_image, driving_video, generator, kp_detector, relative=True, adapt_movement_scale=True, cpu=False):
with torch.no_grad():
predictions = []
source = torch.tensor(source_image[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2)
if not cpu:
source = source.cuda()
driving = torch.tensor(np.array(driving_video)[np.newaxis].astype(np.float32)).permute(0, 4, 1, 2, 3)
kp_source = kp_detector(source)
kp_driving_initial = kp_detector(driving[:, :, 0])
for frame_idx in tqdm(range(driving.shape[2])):
driving_frame = driving[:, :, frame_idx]
if not cpu:
driving_frame = driving_frame.cuda()
kp_driving = kp_detector(driving_frame)
kp_norm = normalize_kp(kp_source=kp_source, kp_driving=kp_driving,
kp_driving_initial=kp_driving_initial, use_relative_movement=relative,
use_relative_jacobian=relative, adapt_movement_scale=adapt_movement_scale)
out = generator(source, kp_source=kp_source, kp_driving=kp_norm)
predictions.append(np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0])
return predictions
def find_best_frame(source, driving, cpu=False):
import face_alignment # type: ignore (local file)
from scipy.spatial import ConvexHull
def normalize_kp(kp):
kp = kp - kp.mean(axis=0, keepdims=True)
area = ConvexHull(kp[:, :2]).volume
area = np.sqrt(area)
kp[:, :2] = kp[:, :2] / area
return kp
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=True,
device='cpu' if cpu else 'cuda')
kp_source = fa.get_landmarks(255 * source)[0]
kp_source = normalize_kp(kp_source)
norm = float('inf')
frame_num = 0
for i, image in tqdm(enumerate(driving)):
kp_driving = fa.get_landmarks(255 * image)[0]
kp_driving = normalize_kp(kp_driving)
new_norm = (np.abs(kp_source - kp_driving) ** 2).sum()
if new_norm < norm:
norm = new_norm
frame_num = i
return frame_num
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument("--config", required=True, help="path to config")
parser.add_argument("--checkpoint", default='vox-cpk.pth.tar', help="path to checkpoint to restore")
parser.add_argument("--source_image", default='sup-mat/source.png', help="path to source image")
parser.add_argument("--driving_video", default='driving.mp4', help="path to driving video")
parser.add_argument("--result_video", default='result.mp4', help="path to output")
parser.add_argument("--relative", dest="relative", action="store_true", help="use relative or absolute keypoint coordinates")
parser.add_argument("--adapt_scale", dest="adapt_scale", action="store_true", help="adapt movement scale based on convex hull of keypoints")
parser.add_argument("--find_best_frame", dest="find_best_frame", action="store_true",
help="Generate from the frame that is the most alligned with source. (Only for faces, requires face_aligment lib)")
parser.add_argument("--best_frame", dest="best_frame", type=int, default=None, help="Set frame to start from.")
parser.add_argument("--cpu", dest="cpu", action="store_true", help="cpu mode.")
parser.add_argument("--audio", dest="audio", action="store_true", help="copy audio to output from the driving video" )
parser.set_defaults(relative=False)
parser.set_defaults(adapt_scale=False)
parser.set_defaults(audio_on=False)
opt = parser.parse_args()
source_image = imageio.imread(opt.source_image)
reader = imageio.get_reader(opt.driving_video)
fps = reader.get_meta_data()['fps']
driving_video = []
try:
for im in reader:
driving_video.append(im)
except RuntimeError:
pass
reader.close()
source_image = resize(source_image, (256, 256))[..., :3]
driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]
generator, kp_detector = load_checkpoints(config_path=opt.config, checkpoint_path=opt.checkpoint, cpu=opt.cpu)
if opt.find_best_frame or opt.best_frame is not None:
i = opt.best_frame if opt.best_frame is not None else find_best_frame(source_image, driving_video, cpu=opt.cpu)
print("Best frame: " + str(i))
driving_forward = driving_video[i:]
driving_backward = driving_video[:(i+1)][::-1]
predictions_forward = make_animation(source_image, driving_forward, generator, kp_detector, relative=opt.relative, adapt_movement_scale=opt.adapt_scale, cpu=opt.cpu)
predictions_backward = make_animation(source_image, driving_backward, generator, kp_detector, relative=opt.relative, adapt_movement_scale=opt.adapt_scale, cpu=opt.cpu)
predictions = predictions_backward[::-1] + predictions_forward[1:]
else:
predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=opt.relative, adapt_movement_scale=opt.adapt_scale, cpu=opt.cpu)
imageio.mimsave(opt.result_video, [img_as_ubyte(frame) for frame in predictions], fps=fps)
if opt.audio:
try:
with NamedTemporaryFile(suffix=splitext(opt.result_video)[1]) as output:
ffmpeg.output(ffmpeg.input(opt.result_video).video, ffmpeg.input(opt.driving_video).audio, output.name, c='copy').run()
with open(opt.result_video, 'wb') as result:
copyfileobj(output, result)
except ffmpeg.Error:
print("Failed to copy audio: the driving video may have no audio track or the audio format is invalid.")
================================================
FILE: demo_jupyter.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cdO_RxQZLahB"
},
"source": [
"# Demo for paper \"First Order Motion Model for Image Animation\"\n",
"To try the demo, press the 2 play buttons in order and scroll to the bottom. Note that it may take several minutes to load."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "UCMFMJV7K-ag"
},
"outputs": [],
"source": [
"%%capture\n",
"%pip install ffmpeg-python imageio-ffmpeg\n",
"!git init .\n",
"!git remote add origin https://github.com/AliaksandrSiarohin/first-order-model\n",
"!git pull origin master\n",
"!git clone https://github.com/graphemecluster/first-order-model-demo demo"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"id": "Oxi6-riLOgnm"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f53c7ccd3ec34f7ea8491237d5bf03ff",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(VBox(children=(Label(value='Choose Image', _dom_classes=('title',)), HBox(children=(VBox(childr…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"var images, videos;\n",
"function deselectImages() {\n",
"\timages.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function deselectVideos() {\n",
"\tvideos.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function invokePython(func) {\n",
"\tgoogle.colab.kernel.invokeFunction(\"notebook.\" + func, [].slice.call(arguments, 1), {});\n",
"}\n",
"setTimeout(function() {\n",
"\t(images = [].slice.call(document.getElementsByClassName(\"resource-image\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectImages();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_image\", item.className.match(/resource-image(\\d\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\timages[0].classList.add(\"selected\");\n",
"\t(videos = [].slice.call(document.getElementsByClassName(\"resource-video\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectVideos();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_video\", item.className.match(/resource-video(\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\tvideos[0].classList.add(\"selected\");\n",
"}, 1000);\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import IPython.display\n",
"import PIL.Image\n",
"import cv2\n",
"import ffmpeg\n",
"import imageio\n",
"import io\n",
"import ipywidgets\n",
"import numpy\n",
"import os.path\n",
"import requests\n",
"import skimage.transform\n",
"import warnings\n",
"from base64 import b64encode\n",
"from demo import load_checkpoints, make_animation # type: ignore (local file)\n",
"from IPython.display import HTML, Javascript\n",
"from shutil import copyfileobj\n",
"from skimage import img_as_ubyte\n",
"from tempfile import NamedTemporaryFile\n",
"import os\n",
"import ipywidgets as ipyw\n",
"from IPython.display import display, FileLink\n",
"warnings.filterwarnings(\"ignore\")\n",
"os.makedirs(\"user\", exist_ok=True)\n",
"\n",
"display(HTML(\"\"\"\n",
"\n",
"\"\"\"))\n",
"\n",
"\n",
"def uploaded_file(change):\n",
" save_dir = 'uploads'\n",
" if not os.path.exists(save_dir): os.mkdir(save_dir)\n",
" \n",
" uploads = change['new']\n",
" for upload in uploads:\n",
" filename = upload['name']\n",
" content = upload['content']\n",
" with open(os.path.join(save_dir,filename), 'wb') as f:\n",
" f.write(content)\n",
" with out:\n",
" print(change)\n",
" \n",
"def create_uploader():\n",
" uploader = ipyw.FileUpload(multiple=True)\n",
" display(uploader)\n",
" uploader.description = '📂 Upload'\n",
" uploader.observe(uploaded_file, names='value')\n",
"\n",
"def download_file(filename='./face.mp4') -> HTML:\n",
" fl=FileLink(filename)\n",
" fl.html_link_str =\"%s\"\n",
" \n",
" display(fl)\n",
" display(HTML(f\"\"\"\n",
"\n",
"\"\"\"))\n",
" \n",
"def thumbnail(file):\n",
"\treturn imageio.get_reader(file, mode='I', format='FFMPEG').get_next_data()\n",
"\n",
"def create_image(i, j):\n",
"\timage_widget = ipywidgets.Image.from_file('demo/images/%d%d.png' % (i, j))\n",
"\timage_widget.add_class('resource')\n",
"\timage_widget.add_class('resource-image')\n",
"\timage_widget.add_class('resource-image%d%d' % (i, j))\n",
"\treturn image_widget\n",
"\n",
"def create_video(i):\n",
"\tvideo_widget = ipywidgets.Image(\n",
"\t\tvalue=cv2.imencode('.png', cv2.cvtColor(thumbnail('demo/videos/%d.mp4' % i), cv2.COLOR_RGB2BGR))[1].tostring(),\n",
"\t\tformat='png'\n",
"\t)\n",
"\tvideo_widget.add_class('resource')\n",
"\tvideo_widget.add_class('resource-video')\n",
"\tvideo_widget.add_class('resource-video%d' % i)\n",
"\treturn video_widget\n",
"\n",
"def create_title(title):\n",
"\ttitle_widget = ipywidgets.Label(title)\n",
"\ttitle_widget.add_class('title')\n",
"\treturn title_widget\n",
"\n",
"def download_output(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tdownload_file('./output.mp4')\n",
"\t# files.download('output.mp4')\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"def convert_output(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tffmpeg.input('output.mp4').output('scaled.mp4', vf='scale=1080x1080:flags=lanczos,pad=1920:1080:420:0').overwrite_output().run()\n",
"\tfiles.download('scaled.mp4')\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"def back_to_main(button):\n",
"\tcomplete.layout.display = 'none'\n",
"\tmain.layout.display = ''\n",
"\n",
"label_or = ipywidgets.Label('or')\n",
"label_or.add_class('label-or')\n",
"\n",
"image_titles = ['Peoples', 'Cartoons', 'Dolls', 'Game of Thrones', 'Statues']\n",
"image_lengths = [8, 4, 8, 9, 4]\n",
"\n",
"image_tab = ipywidgets.Tab()\n",
"image_tab.children = [ipywidgets.HBox([create_image(i, j) for j in range(length)]) for i, length in enumerate(image_lengths)]\n",
"for i, title in enumerate(image_titles):\n",
"\timage_tab.set_title(i, title)\n",
"\n",
"input_image_widget = ipywidgets.Output()\n",
"input_image_widget.add_class('input-widget')\n",
"upload_input_image_button = ipywidgets.FileUpload(accept='image/*', button_style='primary')\n",
"upload_input_image_button.add_class('input-button')\n",
"image_part = ipywidgets.HBox([\n",
"\tipywidgets.VBox([input_image_widget, upload_input_image_button]),\n",
"\tlabel_or,\n",
"\timage_tab\n",
"])\n",
"\n",
"video_tab = ipywidgets.Tab()\n",
"video_tab.children = [ipywidgets.HBox([create_video(i) for i in range(5)])]\n",
"video_tab.set_title(0, 'All Videos')\n",
"\n",
"input_video_widget = ipywidgets.Output()\n",
"input_video_widget.add_class('input-widget')\n",
"upload_input_video_button = ipywidgets.FileUpload(accept='video/*', button_style='primary')\n",
"upload_input_video_button.add_class('input-button')\n",
"video_part = ipywidgets.HBox([\n",
"\tipywidgets.VBox([input_video_widget, upload_input_video_button]),\n",
"\tlabel_or,\n",
"\tvideo_tab\n",
"])\n",
"\n",
"model = ipywidgets.Dropdown(\n",
"\tdescription=\"Model:\",\n",
"\toptions=[\n",
"\t\t'vox',\n",
"\t\t'vox-adv',\n",
"\t\t'taichi',\n",
"\t\t'taichi-adv',\n",
"\t\t'nemo',\n",
"\t\t'mgif',\n",
"\t\t'fashion',\n",
"\t\t'bair'\n",
"\t]\n",
")\n",
"warning = ipywidgets.HTML('Warning: Upload your own images and videos (see README)')\n",
"warning.add_class('warning')\n",
"model_part = ipywidgets.HBox([model, warning])\n",
"\n",
"relative = ipywidgets.Checkbox(description=\"Relative keypoint displacement (Inherit object proporions from the video)\", value=True)\n",
"adapt_movement_scale = ipywidgets.Checkbox(description=\"Adapt movement scale (Don’t touch unless you know want you are doing)\", value=True)\n",
"generate_button = ipywidgets.Button(description=\"Generate\", button_style='primary')\n",
"main = ipywidgets.VBox([\n",
"\tcreate_title('Choose Image'),\n",
"\timage_part,\n",
"\tcreate_title('Choose Video'),\n",
"\tvideo_part,\n",
"\tcreate_title('Settings'),\n",
"\tmodel_part,\n",
"\trelative,\n",
"\tadapt_movement_scale,\n",
"\tgenerate_button\n",
"])\n",
"\n",
"loader = ipywidgets.Label()\n",
"loader.add_class(\"loader\")\n",
"loading_label = ipywidgets.Label(\"This may take several minutes to process…\")\n",
"loading_label.add_class(\"loading-label\")\n",
"progress_bar = ipywidgets.Output()\n",
"loading = ipywidgets.VBox([loader, loading_label, progress_bar])\n",
"loading.add_class('loading')\n",
"\n",
"output_widget = ipywidgets.Output()\n",
"output_widget.add_class('output-widget')\n",
"download = ipywidgets.Button(description='Download', button_style='primary')\n",
"download.add_class('output-button')\n",
"download.on_click(download_output)\n",
"convert = ipywidgets.Button(description='Convert to 1920×1080', button_style='primary')\n",
"convert.add_class('output-button')\n",
"convert.on_click(convert_output)\n",
"back = ipywidgets.Button(description='Back', button_style='primary')\n",
"back.add_class('output-button')\n",
"back.on_click(back_to_main)\n",
"\n",
"comparison_widget = ipywidgets.Output()\n",
"comparison_widget.add_class('comparison-widget')\n",
"comparison_label = ipywidgets.Label('Comparison')\n",
"comparison_label.add_class('comparison-label')\n",
"complete = ipywidgets.HBox([\n",
"\tipywidgets.VBox([output_widget, download, convert, back]),\n",
"\tipywidgets.VBox([comparison_widget, comparison_label])\n",
"])\n",
"\n",
"display(ipywidgets.VBox([main, loading, complete]))\n",
"display(Javascript(\"\"\"\n",
"var images, videos;\n",
"function deselectImages() {\n",
"\timages.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function deselectVideos() {\n",
"\tvideos.forEach(function(item) {\n",
"\t\titem.classList.remove(\"selected\");\n",
"\t});\n",
"}\n",
"function invokePython(func) {\n",
"\tgoogle.colab.kernel.invokeFunction(\"notebook.\" + func, [].slice.call(arguments, 1), {});\n",
"}\n",
"setTimeout(function() {\n",
"\t(images = [].slice.call(document.getElementsByClassName(\"resource-image\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectImages();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_image\", item.className.match(/resource-image(\\d\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\timages[0].classList.add(\"selected\");\n",
"\t(videos = [].slice.call(document.getElementsByClassName(\"resource-video\"))).forEach(function(item) {\n",
"\t\titem.addEventListener(\"click\", function() {\n",
"\t\t\tdeselectVideos();\n",
"\t\t\titem.classList.add(\"selected\");\n",
"\t\t\tinvokePython(\"select_video\", item.className.match(/resource-video(\\d)/)[1]);\n",
"\t\t});\n",
"\t});\n",
"\tvideos[0].classList.add(\"selected\");\n",
"}, 1000);\n",
"\"\"\"))\n",
"\n",
"selected_image = None\n",
"def select_image(filename):\n",
"\tglobal selected_image\n",
"\tselected_image = resize(PIL.Image.open('demo/images/%s.png' % filename).convert(\"RGB\"))\n",
"\tinput_image_widget.clear_output(wait=True)\n",
"\twith input_image_widget:\n",
"\t\tdisplay(HTML('Image'))\n",
"\tinput_image_widget.remove_class('uploaded')\n",
"# output.register_callback(\"notebook.select_image\", select_image)\n",
"\n",
"selected_video = None\n",
"def select_video(filename):\n",
"\tglobal selected_video\n",
"\tselected_video = 'demo/videos/%s.mp4' % filename\n",
"\tinput_video_widget.clear_output(wait=True)\n",
"\twith input_video_widget:\n",
"\t\tdisplay(HTML('Video'))\n",
"\tinput_video_widget.remove_class('uploaded')\n",
"# output.register_callback(\"notebook.select_video\", select_video)\n",
"\n",
"def resize(image, size=(256, 256)):\n",
"\tw, h = image.size\n",
"\td = min(w, h)\n",
"\tr = ((w - d) // 2, (h - d) // 2, (w + d) // 2, (h + d) // 2)\n",
"\treturn image.resize(size, resample=PIL.Image.LANCZOS, box=r)\n",
"\n",
"def upload_image(change):\n",
"\tglobal selected_image\n",
"\tcontent = upload_input_image_button.value[0]['content']\n",
"\tname = upload_input_image_button.value[0]['name']\n",
" \n",
"\t# for name, file_info in upload_input_image_button.value.items():\n",
"\t\t# content = file_info['content']\n",
"\tif content is not None:\n",
"\t\tselected_image = resize(PIL.Image.open(io.BytesIO(content)).convert(\"RGB\"))\n",
"\t\tinput_image_widget.clear_output(wait=True)\n",
"\t\twith input_image_widget:\n",
"\t\t\tdisplay(selected_image)\n",
"\t\tinput_image_widget.add_class('uploaded')\n",
"\t\tdisplay(Javascript('deselectImages()'))\n",
"upload_input_image_button.observe(upload_image, names='value')\n",
"\n",
"def upload_video(change):\n",
"\tglobal selected_video\n",
"\t# for name, file_info in upload_input_video_button.value.items():\n",
"\t\t# content = file_info['content']\n",
"\tcontent = upload_input_video_button.value[0]['content']\n",
"\tname = upload_input_video_button.value[0]['name']\n",
"\tif content is not None:\n",
"\t\tselected_video = 'user/' + name\n",
"\t\tpreview = resize(PIL.Image.fromarray(thumbnail(content)).convert(\"RGB\"))\n",
"\t\tinput_video_widget.clear_output(wait=True)\n",
"\t\twith input_video_widget:\n",
"\t\t\tdisplay(preview)\n",
"\t\tinput_video_widget.add_class('uploaded')\n",
"\t\tdisplay(Javascript('deselectVideos()'))\n",
"\t\twith open(selected_video, 'wb') as video:\n",
"\t\t\tvideo.write(content)\n",
"upload_input_video_button.observe(upload_video, names='value')\n",
"\n",
"def change_model(change):\n",
"\tif model.value.startswith('vox'):\n",
"\t\twarning.remove_class('warn')\n",
"\telse:\n",
"\t\twarning.add_class('warn')\n",
"model.observe(change_model, names='value')\n",
"\n",
"def generate(button):\n",
"\tmain.layout.display = 'none'\n",
"\tloading.layout.display = ''\n",
"\tfilename = model.value + ('' if model.value == 'fashion' else '-cpk') + '.pth.tar'\n",
"\tif not os.path.isfile(filename):\n",
"\t\tdownload = requests.get(requests.get('https://cloud-api.yandex.net/v1/disk/public/resources/download?public_key=https://yadi.sk/d/lEw8uRm140L_eQ&path=/' + filename).json().get('href'))\n",
"\t\twith open(filename, 'wb') as checkpoint:\n",
"\t\t\tcheckpoint.write(download.content)\n",
"\treader = imageio.get_reader(selected_video, mode='I', format='FFMPEG')\n",
"\tfps = reader.get_meta_data()['fps']\n",
"\tdriving_video = []\n",
"\tfor frame in reader:\n",
"\t\tdriving_video.append(frame)\n",
"\tgenerator, kp_detector = load_checkpoints(config_path='config/%s-256.yaml' % model.value, checkpoint_path=filename)\n",
"\twith progress_bar:\n",
"\t\tpredictions = make_animation(\n",
"\t\t\tskimage.transform.resize(numpy.asarray(selected_image), (256, 256)),\n",
"\t\t\t[skimage.transform.resize(frame, (256, 256)) for frame in driving_video],\n",
"\t\t\tgenerator,\n",
"\t\t\tkp_detector,\n",
"\t\t\trelative=relative.value,\n",
"\t\t\tadapt_movement_scale=adapt_movement_scale.value\n",
"\t\t)\n",
"\tprogress_bar.clear_output()\n",
"\timageio.mimsave('output.mp4', [img_as_ubyte(frame) for frame in predictions], fps=fps)\n",
"\tif selected_video.startswith('user/') or selected_video == 'demo/videos/0.mp4':\n",
"\t\twith NamedTemporaryFile(suffix='.mp4') as output:\n",
"\t\t\tffmpeg.output(ffmpeg.input('output.mp4').video, ffmpeg.input(selected_video).audio, output.name, c='copy').overwrite_output().run()\n",
"\t\t\twith open('output.mp4', 'wb') as result:\n",
"\t\t\t\tcopyfileobj(output, result)\n",
"\twith output_widget:\n",
"\t\tvideo_widget = ipywidgets.Video.from_file('output.mp4', autoplay=False, loop=False)\n",
"\t\tvideo_widget.add_class('video')\n",
"\t\tvideo_widget.add_class('video-left')\n",
"\t\tdisplay(video_widget)\n",
"\twith comparison_widget:\n",
"\t\tvideo_widget = ipywidgets.Video.from_file(selected_video, autoplay=False, loop=False, controls=False)\n",
"\t\tvideo_widget.add_class('video')\n",
"\t\tvideo_widget.add_class('video-right')\n",
"\t\tdisplay(video_widget)\n",
"\tdisplay(Javascript(\"\"\"\n",
"\tsetTimeout(function() {\n",
"\t\t(function(left, right) {\n",
"\t\t\tleft.addEventListener(\"play\", function() {\n",
"\t\t\t\tright.play();\n",
"\t\t\t});\n",
"\t\t\tleft.addEventListener(\"pause\", function() {\n",
"\t\t\t\tright.pause();\n",
"\t\t\t});\n",
"\t\t\tleft.addEventListener(\"seeking\", function() {\n",
"\t\t\t\tright.currentTime = left.currentTime;\n",
"\t\t\t});\n",
"\t\t\tright.muted = true;\n",
"\t\t})(document.getElementsByClassName(\"video-left\")[0], document.getElementsByClassName(\"video-right\")[0]);\n",
"\t}, 1000);\n",
"\t\"\"\"))\n",
"\tloading.layout.display = 'none'\n",
"\tcomplete.layout.display = ''\n",
"\n",
"generate_button.on_click(generate)\n",
"\n",
"loading.layout.display = 'none'\n",
"complete.layout.display = 'none'\n",
"select_image('00')\n",
"select_video('0')"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "first-order-model-demo",
"provenance": []
},
"kernelspec": {
"display_name": "ldm",
"language": "python",
"name": "ldm"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: frames_dataset.py
================================================
import os
from skimage import io, img_as_float32
from skimage.color import gray2rgb
from sklearn.model_selection import train_test_split
from imageio import mimread
import numpy as np
from torch.utils.data import Dataset
import pandas as pd
from augmentation import AllAugmentationTransform
import glob
def read_video(name, frame_shape):
"""
Read video which can be:
- an image of concatenated frames
- '.mp4' and'.gif'
- folder with videos
"""
if os.path.isdir(name):
frames = sorted(os.listdir(name))
num_frames = len(frames)
video_array = np.array(
[img_as_float32(io.imread(os.path.join(name, frames[idx]))) for idx in range(num_frames)])
elif name.lower().endswith('.png') or name.lower().endswith('.jpg'):
image = io.imread(name)
if len(image.shape) == 2 or image.shape[2] == 1:
image = gray2rgb(image)
if image.shape[2] == 4:
image = image[..., :3]
image = img_as_float32(image)
video_array = np.moveaxis(image, 1, 0)
video_array = video_array.reshape((-1,) + frame_shape)
video_array = np.moveaxis(video_array, 1, 2)
elif name.lower().endswith('.gif') or name.lower().endswith('.mp4') or name.lower().endswith('.mov'):
video = np.array(mimread(name))
if len(video.shape) == 3:
video = np.array([gray2rgb(frame) for frame in video])
if video.shape[-1] == 4:
video = video[..., :3]
video_array = img_as_float32(video)
else:
raise Exception("Unknown file extensions %s" % name)
return video_array
class FramesDataset(Dataset):
"""
Dataset of videos, each video can be represented as:
- an image of concatenated frames
- '.mp4' or '.gif'
- folder with all frames
"""
def __init__(self, root_dir, frame_shape=(256, 256, 3), id_sampling=False, is_train=True,
random_seed=0, pairs_list=None, augmentation_params=None):
self.root_dir = root_dir
self.videos = os.listdir(root_dir)
self.frame_shape = tuple(frame_shape)
self.pairs_list = pairs_list
self.id_sampling = id_sampling
if os.path.exists(os.path.join(root_dir, 'train')):
assert os.path.exists(os.path.join(root_dir, 'test'))
print("Use predefined train-test split.")
if id_sampling:
train_videos = {os.path.basename(video).split('#')[0] for video in
os.listdir(os.path.join(root_dir, 'train'))}
train_videos = list(train_videos)
else:
train_videos = os.listdir(os.path.join(root_dir, 'train'))
test_videos = os.listdir(os.path.join(root_dir, 'test'))
self.root_dir = os.path.join(self.root_dir, 'train' if is_train else 'test')
else:
print("Use random train-test split.")
train_videos, test_videos = train_test_split(self.videos, random_state=random_seed, test_size=0.2)
if is_train:
self.videos = train_videos
else:
self.videos = test_videos
self.is_train = is_train
if self.is_train:
self.transform = AllAugmentationTransform(**augmentation_params)
else:
self.transform = None
def __len__(self):
return len(self.videos)
def __getitem__(self, idx):
if self.is_train and self.id_sampling:
name = self.videos[idx]
path = np.random.choice(glob.glob(os.path.join(self.root_dir, name + '*.mp4')))
else:
name = self.videos[idx]
path = os.path.join(self.root_dir, name)
video_name = os.path.basename(path)
if self.is_train and os.path.isdir(path):
frames = os.listdir(path)
num_frames = len(frames)
frame_idx = np.sort(np.random.choice(num_frames, replace=True, size=2))
video_array = [img_as_float32(io.imread(os.path.join(path, frames[idx]))) for idx in frame_idx]
else:
video_array = read_video(path, frame_shape=self.frame_shape)
num_frames = len(video_array)
frame_idx = np.sort(np.random.choice(num_frames, replace=True, size=2)) if self.is_train else range(
num_frames)
video_array = video_array[frame_idx]
if self.transform is not None:
video_array = self.transform(video_array)
out = {}
if self.is_train:
source = np.array(video_array[0], dtype='float32')
driving = np.array(video_array[1], dtype='float32')
out['driving'] = driving.transpose((2, 0, 1))
out['source'] = source.transpose((2, 0, 1))
else:
video = np.array(video_array, dtype='float32')
out['video'] = video.transpose((3, 0, 1, 2))
out['name'] = video_name
return out
class DatasetRepeater(Dataset):
"""
Pass several times over the same dataset for better i/o performance
"""
def __init__(self, dataset, num_repeats=100):
self.dataset = dataset
self.num_repeats = num_repeats
def __len__(self):
return self.num_repeats * self.dataset.__len__()
def __getitem__(self, idx):
return self.dataset[idx % self.dataset.__len__()]
class PairedDataset(Dataset):
"""
Dataset of pairs for animation.
"""
def __init__(self, initial_dataset, number_of_pairs, seed=0):
self.initial_dataset = initial_dataset
pairs_list = self.initial_dataset.pairs_list
np.random.seed(seed)
if pairs_list is None:
max_idx = min(number_of_pairs, len(initial_dataset))
nx, ny = max_idx, max_idx
xy = np.mgrid[:nx, :ny].reshape(2, -1).T
number_of_pairs = min(xy.shape[0], number_of_pairs)
self.pairs = xy.take(np.random.choice(xy.shape[0], number_of_pairs, replace=False), axis=0)
else:
videos = self.initial_dataset.videos
name_to_index = {name: index for index, name in enumerate(videos)}
pairs = pd.read_csv(pairs_list)
pairs = pairs[np.logical_and(pairs['source'].isin(videos), pairs['driving'].isin(videos))]
number_of_pairs = min(pairs.shape[0], number_of_pairs)
self.pairs = []
self.start_frames = []
for ind in range(number_of_pairs):
self.pairs.append(
(name_to_index[pairs['driving'].iloc[ind]], name_to_index[pairs['source'].iloc[ind]]))
def __len__(self):
return len(self.pairs)
def __getitem__(self, idx):
pair = self.pairs[idx]
first = self.initial_dataset[pair[0]]
second = self.initial_dataset[pair[1]]
first = {'driving_' + key: value for key, value in first.items()}
second = {'source_' + key: value for key, value in second.items()}
return {**first, **second}
================================================
FILE: logger.py
================================================
import numpy as np
import torch
import torch.nn.functional as F
import imageio
import os
from skimage.draw import disk
import matplotlib.pyplot as plt
import collections
class Logger:
def __init__(self, log_dir, checkpoint_freq=100, visualizer_params=None, zfill_num=8, log_file_name='log.txt'):
self.loss_list = []
self.cpk_dir = log_dir
self.visualizations_dir = os.path.join(log_dir, 'train-vis')
if not os.path.exists(self.visualizations_dir):
os.makedirs(self.visualizations_dir)
self.log_file = open(os.path.join(log_dir, log_file_name), 'a')
self.zfill_num = zfill_num
self.visualizer = Visualizer(**visualizer_params)
self.checkpoint_freq = checkpoint_freq
self.epoch = 0
self.best_loss = float('inf')
self.names = None
def log_scores(self, loss_names):
loss_mean = np.array(self.loss_list).mean(axis=0)
loss_string = "; ".join(["%s - %.5f" % (name, value) for name, value in zip(loss_names, loss_mean)])
loss_string = str(self.epoch).zfill(self.zfill_num) + ") " + loss_string
print(loss_string, file=self.log_file)
self.loss_list = []
self.log_file.flush()
def visualize_rec(self, inp, out):
image = self.visualizer.visualize(inp['driving'], inp['source'], out)
imageio.imsave(os.path.join(self.visualizations_dir, "%s-rec.png" % str(self.epoch).zfill(self.zfill_num)), image)
def save_cpk(self, emergent=False):
cpk = {k: v.state_dict() for k, v in self.models.items()}
cpk['epoch'] = self.epoch
cpk_path = os.path.join(self.cpk_dir, '%s-checkpoint.pth.tar' % str(self.epoch).zfill(self.zfill_num))
if not (os.path.exists(cpk_path) and emergent):
torch.save(cpk, cpk_path)
@staticmethod
def load_cpk(checkpoint_path, generator=None, discriminator=None, kp_detector=None,
optimizer_generator=None, optimizer_discriminator=None, optimizer_kp_detector=None):
if torch.cuda.is_available():
map_location = None
else:
map_location = 'cpu'
checkpoint = torch.load(checkpoint_path, map_location)
if generator is not None:
generator.load_state_dict(checkpoint['generator'])
if kp_detector is not None:
kp_detector.load_state_dict(checkpoint['kp_detector'])
if discriminator is not None:
try:
discriminator.load_state_dict(checkpoint['discriminator'])
except:
print ('No discriminator in the state-dict. Dicriminator will be randomly initialized')
if optimizer_generator is not None:
optimizer_generator.load_state_dict(checkpoint['optimizer_generator'])
if optimizer_discriminator is not None:
try:
optimizer_discriminator.load_state_dict(checkpoint['optimizer_discriminator'])
except RuntimeError as e:
print ('No discriminator optimizer in the state-dict. Optimizer will be not initialized')
if optimizer_kp_detector is not None:
optimizer_kp_detector.load_state_dict(checkpoint['optimizer_kp_detector'])
return checkpoint['epoch']
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if 'models' in self.__dict__:
self.save_cpk()
self.log_file.close()
def log_iter(self, losses):
losses = collections.OrderedDict(losses.items())
if self.names is None:
self.names = list(losses.keys())
self.loss_list.append(list(losses.values()))
def log_epoch(self, epoch, models, inp, out):
self.epoch = epoch
self.models = models
if (self.epoch + 1) % self.checkpoint_freq == 0:
self.save_cpk()
self.log_scores(self.names)
self.visualize_rec(inp, out)
class Visualizer:
def __init__(self, kp_size=5, draw_border=False, colormap='gist_rainbow'):
self.kp_size = kp_size
self.draw_border = draw_border
self.colormap = plt.get_cmap(colormap)
def draw_image_with_kp(self, image, kp_array):
image = np.copy(image)
spatial_size = np.array(image.shape[:2][::-1])[np.newaxis]
kp_array = spatial_size * (kp_array + 1) / 2
num_kp = kp_array.shape[0]
for kp_ind, kp in enumerate(kp_array):
rr, cc = disk(kp[1], kp[0], self.kp_size, shape=image.shape[:2])
image[rr, cc] = np.array(self.colormap(kp_ind / num_kp))[:3]
return image
def create_image_column_with_kp(self, images, kp):
image_array = np.array([self.draw_image_with_kp(v, k) for v, k in zip(images, kp)])
return self.create_image_column(image_array)
def create_image_column(self, images):
if self.draw_border:
images = np.copy(images)
images[:, :, [0, -1]] = (1, 1, 1)
return np.concatenate(list(images), axis=0)
def create_image_grid(self, *args):
out = []
for arg in args:
if type(arg) == tuple:
out.append(self.create_image_column_with_kp(arg[0], arg[1]))
else:
out.append(self.create_image_column(arg))
return np.concatenate(out, axis=1)
def visualize(self, driving, source, out):
images = []
# Source image with keypoints
source = source.data.cpu()
kp_source = out['kp_source']['value'].data.cpu().numpy()
source = np.transpose(source, [0, 2, 3, 1])
images.append((source, kp_source))
# Equivariance visualization
if 'transformed_frame' in out:
transformed = out['transformed_frame'].data.cpu().numpy()
transformed = np.transpose(transformed, [0, 2, 3, 1])
transformed_kp = out['transformed_kp']['value'].data.cpu().numpy()
images.append((transformed, transformed_kp))
# Driving image with keypoints
kp_driving = out['kp_driving']['value'].data.cpu().numpy()
driving = driving.data.cpu().numpy()
driving = np.transpose(driving, [0, 2, 3, 1])
images.append((driving, kp_driving))
# Deformed image
if 'deformed' in out:
deformed = out['deformed'].data.cpu().numpy()
deformed = np.transpose(deformed, [0, 2, 3, 1])
images.append(deformed)
# Result with and without keypoints
prediction = out['prediction'].data.cpu().numpy()
prediction = np.transpose(prediction, [0, 2, 3, 1])
if 'kp_norm' in out:
kp_norm = out['kp_norm']['value'].data.cpu().numpy()
images.append((prediction, kp_norm))
images.append(prediction)
## Occlusion map
if 'occlusion_map' in out:
occlusion_map = out['occlusion_map'].data.cpu().repeat(1, 3, 1, 1)
occlusion_map = F.interpolate(occlusion_map, size=source.shape[1:3]).numpy()
occlusion_map = np.transpose(occlusion_map, [0, 2, 3, 1])
images.append(occlusion_map)
# Deformed images according to each individual transform
if 'sparse_deformed' in out:
full_mask = []
for i in range(out['sparse_deformed'].shape[1]):
image = out['sparse_deformed'][:, i].data.cpu()
image = F.interpolate(image, size=source.shape[1:3])
mask = out['mask'][:, i:(i+1)].data.cpu().repeat(1, 3, 1, 1)
mask = F.interpolate(mask, size=source.shape[1:3])
image = np.transpose(image.numpy(), (0, 2, 3, 1))
mask = np.transpose(mask.numpy(), (0, 2, 3, 1))
if i != 0:
color = np.array(self.colormap((i - 1) / (out['sparse_deformed'].shape[1] - 1)))[:3]
else:
color = np.array((0, 0, 0))
color = color.reshape((1, 1, 1, 3))
images.append(image)
if i != 0:
images.append(mask * color)
else:
images.append(mask)
full_mask.append(mask * color)
images.append(sum(full_mask))
image = self.create_image_grid(*images)
image = (255 * image).astype(np.uint8)
return image
================================================
FILE: modules/dense_motion.py
================================================
from torch import nn
import torch.nn.functional as F
import torch
from modules.util import Hourglass, AntiAliasInterpolation2d, make_coordinate_grid, kp2gaussian
class DenseMotionNetwork(nn.Module):
"""
Module that predicting a dense motion from sparse motion representation given by kp_source and kp_driving
"""
def __init__(self, block_expansion, num_blocks, max_features, num_kp, num_channels, estimate_occlusion_map=False,
scale_factor=1, kp_variance=0.01):
super(DenseMotionNetwork, self).__init__()
self.hourglass = Hourglass(block_expansion=block_expansion, in_features=(num_kp + 1) * (num_channels + 1),
max_features=max_features, num_blocks=num_blocks)
self.mask = nn.Conv2d(self.hourglass.out_filters, num_kp + 1, kernel_size=(7, 7), padding=(3, 3))
if estimate_occlusion_map:
self.occlusion = nn.Conv2d(self.hourglass.out_filters, 1, kernel_size=(7, 7), padding=(3, 3))
else:
self.occlusion = None
self.num_kp = num_kp
self.scale_factor = scale_factor
self.kp_variance = kp_variance
if self.scale_factor != 1:
self.down = AntiAliasInterpolation2d(num_channels, self.scale_factor)
def create_heatmap_representations(self, source_image, kp_driving, kp_source):
"""
Eq 6. in the paper H_k(z)
"""
spatial_size = source_image.shape[2:]
gaussian_driving = kp2gaussian(kp_driving, spatial_size=spatial_size, kp_variance=self.kp_variance)
gaussian_source = kp2gaussian(kp_source, spatial_size=spatial_size, kp_variance=self.kp_variance)
heatmap = gaussian_driving - gaussian_source
#adding background feature
zeros = torch.zeros(heatmap.shape[0], 1, spatial_size[0], spatial_size[1]).type(heatmap.type())
heatmap = torch.cat([zeros, heatmap], dim=1)
heatmap = heatmap.unsqueeze(2)
return heatmap
def create_sparse_motions(self, source_image, kp_driving, kp_source):
"""
Eq 4. in the paper T_{s<-d}(z)
"""
bs, _, h, w = source_image.shape
identity_grid = make_coordinate_grid((h, w), type=kp_source['value'].type())
identity_grid = identity_grid.view(1, 1, h, w, 2)
coordinate_grid = identity_grid - kp_driving['value'].view(bs, self.num_kp, 1, 1, 2)
if 'jacobian' in kp_driving:
jacobian = torch.matmul(kp_source['jacobian'], torch.inverse(kp_driving['jacobian']))
jacobian = jacobian.unsqueeze(-3).unsqueeze(-3)
jacobian = jacobian.repeat(1, 1, h, w, 1, 1)
coordinate_grid = torch.matmul(jacobian, coordinate_grid.unsqueeze(-1))
coordinate_grid = coordinate_grid.squeeze(-1)
driving_to_source = coordinate_grid + kp_source['value'].view(bs, self.num_kp, 1, 1, 2)
#adding background feature
identity_grid = identity_grid.repeat(bs, 1, 1, 1, 1)
sparse_motions = torch.cat([identity_grid, driving_to_source], dim=1)
return sparse_motions
def create_deformed_source_image(self, source_image, sparse_motions):
"""
Eq 7. in the paper \hat{T}_{s<-d}(z)
"""
bs, _, h, w = source_image.shape
source_repeat = source_image.unsqueeze(1).unsqueeze(1).repeat(1, self.num_kp + 1, 1, 1, 1, 1)
source_repeat = source_repeat.view(bs * (self.num_kp + 1), -1, h, w)
sparse_motions = sparse_motions.view((bs * (self.num_kp + 1), h, w, -1))
sparse_deformed = F.grid_sample(source_repeat, sparse_motions)
sparse_deformed = sparse_deformed.view((bs, self.num_kp + 1, -1, h, w))
return sparse_deformed
def forward(self, source_image, kp_driving, kp_source):
if self.scale_factor != 1:
source_image = self.down(source_image)
bs, _, h, w = source_image.shape
out_dict = dict()
heatmap_representation = self.create_heatmap_representations(source_image, kp_driving, kp_source)
sparse_motion = self.create_sparse_motions(source_image, kp_driving, kp_source)
deformed_source = self.create_deformed_source_image(source_image, sparse_motion)
out_dict['sparse_deformed'] = deformed_source
input = torch.cat([heatmap_representation, deformed_source], dim=2)
input = input.view(bs, -1, h, w)
prediction = self.hourglass(input)
mask = self.mask(prediction)
mask = F.softmax(mask, dim=1)
out_dict['mask'] = mask
mask = mask.unsqueeze(2)
sparse_motion = sparse_motion.permute(0, 1, 4, 2, 3)
deformation = (sparse_motion * mask).sum(dim=1)
deformation = deformation.permute(0, 2, 3, 1)
out_dict['deformation'] = deformation
# Sec. 3.2 in the paper
if self.occlusion:
occlusion_map = torch.sigmoid(self.occlusion(prediction))
out_dict['occlusion_map'] = occlusion_map
return out_dict
================================================
FILE: modules/discriminator.py
================================================
from torch import nn
import torch.nn.functional as F
from modules.util import kp2gaussian
import torch
class DownBlock2d(nn.Module):
"""
Simple block for processing video (encoder).
"""
def __init__(self, in_features, out_features, norm=False, kernel_size=4, pool=False, sn=False):
super(DownBlock2d, self).__init__()
self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size)
if sn:
self.conv = nn.utils.spectral_norm(self.conv)
if norm:
self.norm = nn.InstanceNorm2d(out_features, affine=True)
else:
self.norm = None
self.pool = pool
def forward(self, x):
out = x
out = self.conv(out)
if self.norm:
out = self.norm(out)
out = F.leaky_relu(out, 0.2)
if self.pool:
out = F.avg_pool2d(out, (2, 2))
return out
class Discriminator(nn.Module):
"""
Discriminator similar to Pix2Pix
"""
def __init__(self, num_channels=3, block_expansion=64, num_blocks=4, max_features=512,
sn=False, use_kp=False, num_kp=10, kp_variance=0.01, **kwargs):
super(Discriminator, self).__init__()
down_blocks = []
for i in range(num_blocks):
down_blocks.append(
DownBlock2d(num_channels + num_kp * use_kp if i == 0 else min(max_features, block_expansion * (2 ** i)),
min(max_features, block_expansion * (2 ** (i + 1))),
norm=(i != 0), kernel_size=4, pool=(i != num_blocks - 1), sn=sn))
self.down_blocks = nn.ModuleList(down_blocks)
self.conv = nn.Conv2d(self.down_blocks[-1].conv.out_channels, out_channels=1, kernel_size=1)
if sn:
self.conv = nn.utils.spectral_norm(self.conv)
self.use_kp = use_kp
self.kp_variance = kp_variance
def forward(self, x, kp=None):
feature_maps = []
out = x
if self.use_kp:
heatmap = kp2gaussian(kp, x.shape[2:], self.kp_variance)
out = torch.cat([out, heatmap], dim=1)
for down_block in self.down_blocks:
feature_maps.append(down_block(out))
out = feature_maps[-1]
prediction_map = self.conv(out)
return feature_maps, prediction_map
class MultiScaleDiscriminator(nn.Module):
"""
Multi-scale (scale) discriminator
"""
def __init__(self, scales=(), **kwargs):
super(MultiScaleDiscriminator, self).__init__()
self.scales = scales
discs = {}
for scale in scales:
discs[str(scale).replace('.', '-')] = Discriminator(**kwargs)
self.discs = nn.ModuleDict(discs)
def forward(self, x, kp=None):
out_dict = {}
for scale, disc in self.discs.items():
scale = str(scale).replace('-', '.')
key = 'prediction_' + scale
feature_maps, prediction_map = disc(x[key], kp)
out_dict['feature_maps_' + scale] = feature_maps
out_dict['prediction_map_' + scale] = prediction_map
return out_dict
================================================
FILE: modules/generator.py
================================================
import torch
from torch import nn
import torch.nn.functional as F
from modules.util import ResBlock2d, SameBlock2d, UpBlock2d, DownBlock2d
from modules.dense_motion import DenseMotionNetwork
class OcclusionAwareGenerator(nn.Module):
"""
Generator that given source image and and keypoints try to transform image according to movement trajectories
induced by keypoints. Generator follows Johnson architecture.
"""
def __init__(self, num_channels, num_kp, block_expansion, max_features, num_down_blocks,
num_bottleneck_blocks, estimate_occlusion_map=False, dense_motion_params=None, estimate_jacobian=False):
super(OcclusionAwareGenerator, self).__init__()
if dense_motion_params is not None:
self.dense_motion_network = DenseMotionNetwork(num_kp=num_kp, num_channels=num_channels,
estimate_occlusion_map=estimate_occlusion_map,
**dense_motion_params)
else:
self.dense_motion_network = None
self.first = SameBlock2d(num_channels, block_expansion, kernel_size=(7, 7), padding=(3, 3))
down_blocks = []
for i in range(num_down_blocks):
in_features = min(max_features, block_expansion * (2 ** i))
out_features = min(max_features, block_expansion * (2 ** (i + 1)))
down_blocks.append(DownBlock2d(in_features, out_features, kernel_size=(3, 3), padding=(1, 1)))
self.down_blocks = nn.ModuleList(down_blocks)
up_blocks = []
for i in range(num_down_blocks):
in_features = min(max_features, block_expansion * (2 ** (num_down_blocks - i)))
out_features = min(max_features, block_expansion * (2 ** (num_down_blocks - i - 1)))
up_blocks.append(UpBlock2d(in_features, out_features, kernel_size=(3, 3), padding=(1, 1)))
self.up_blocks = nn.ModuleList(up_blocks)
self.bottleneck = torch.nn.Sequential()
in_features = min(max_features, block_expansion * (2 ** num_down_blocks))
for i in range(num_bottleneck_blocks):
self.bottleneck.add_module('r' + str(i), ResBlock2d(in_features, kernel_size=(3, 3), padding=(1, 1)))
self.final = nn.Conv2d(block_expansion, num_channels, kernel_size=(7, 7), padding=(3, 3))
self.estimate_occlusion_map = estimate_occlusion_map
self.num_channels = num_channels
def deform_input(self, inp, deformation):
_, h_old, w_old, _ = deformation.shape
_, _, h, w = inp.shape
if h_old != h or w_old != w:
deformation = deformation.permute(0, 3, 1, 2)
deformation = F.interpolate(deformation, size=(h, w), mode='bilinear')
deformation = deformation.permute(0, 2, 3, 1)
return F.grid_sample(inp, deformation)
def forward(self, source_image, kp_driving, kp_source):
# Encoding (downsampling) part
out = self.first(source_image)
for i in range(len(self.down_blocks)):
out = self.down_blocks[i](out)
# Transforming feature representation according to deformation and occlusion
output_dict = {}
if self.dense_motion_network is not None:
dense_motion = self.dense_motion_network(source_image=source_image, kp_driving=kp_driving,
kp_source=kp_source)
output_dict['mask'] = dense_motion['mask']
output_dict['sparse_deformed'] = dense_motion['sparse_deformed']
if 'occlusion_map' in dense_motion:
occlusion_map = dense_motion['occlusion_map']
output_dict['occlusion_map'] = occlusion_map
else:
occlusion_map = None
deformation = dense_motion['deformation']
out = self.deform_input(out, deformation)
if occlusion_map is not None:
if out.shape[2] != occlusion_map.shape[2] or out.shape[3] != occlusion_map.shape[3]:
occlusion_map = F.interpolate(occlusion_map, size=out.shape[2:], mode='bilinear')
out = out * occlusion_map
output_dict["deformed"] = self.deform_input(source_image, deformation)
# Decoding part
out = self.bottleneck(out)
for i in range(len(self.up_blocks)):
out = self.up_blocks[i](out)
out = self.final(out)
out = F.sigmoid(out)
output_dict["prediction"] = out
return output_dict
================================================
FILE: modules/keypoint_detector.py
================================================
from torch import nn
import torch
import torch.nn.functional as F
from modules.util import Hourglass, make_coordinate_grid, AntiAliasInterpolation2d
class KPDetector(nn.Module):
"""
Detecting a keypoints. Return keypoint position and jacobian near each keypoint.
"""
def __init__(self, block_expansion, num_kp, num_channels, max_features,
num_blocks, temperature, estimate_jacobian=False, scale_factor=1,
single_jacobian_map=False, pad=0):
super(KPDetector, self).__init__()
self.predictor = Hourglass(block_expansion, in_features=num_channels,
max_features=max_features, num_blocks=num_blocks)
self.kp = nn.Conv2d(in_channels=self.predictor.out_filters, out_channels=num_kp, kernel_size=(7, 7),
padding=pad)
if estimate_jacobian:
self.num_jacobian_maps = 1 if single_jacobian_map else num_kp
self.jacobian = nn.Conv2d(in_channels=self.predictor.out_filters,
out_channels=4 * self.num_jacobian_maps, kernel_size=(7, 7), padding=pad)
self.jacobian.weight.data.zero_()
self.jacobian.bias.data.copy_(torch.tensor([1, 0, 0, 1] * self.num_jacobian_maps, dtype=torch.float))
else:
self.jacobian = None
self.temperature = temperature
self.scale_factor = scale_factor
if self.scale_factor != 1:
self.down = AntiAliasInterpolation2d(num_channels, self.scale_factor)
def gaussian2kp(self, heatmap):
"""
Extract the mean and from a heatmap
"""
shape = heatmap.shape
heatmap = heatmap.unsqueeze(-1)
grid = make_coordinate_grid(shape[2:], heatmap.type()).unsqueeze_(0).unsqueeze_(0)
value = (heatmap * grid).sum(dim=(2, 3))
kp = {'value': value}
return kp
def forward(self, x):
if self.scale_factor != 1:
x = self.down(x)
feature_map = self.predictor(x)
prediction = self.kp(feature_map)
final_shape = prediction.shape
heatmap = prediction.view(final_shape[0], final_shape[1], -1)
heatmap = F.softmax(heatmap / self.temperature, dim=2)
heatmap = heatmap.view(*final_shape)
out = self.gaussian2kp(heatmap)
if self.jacobian is not None:
jacobian_map = self.jacobian(feature_map)
jacobian_map = jacobian_map.reshape(final_shape[0], self.num_jacobian_maps, 4, final_shape[2],
final_shape[3])
heatmap = heatmap.unsqueeze(2)
jacobian = heatmap * jacobian_map
jacobian = jacobian.view(final_shape[0], final_shape[1], 4, -1)
jacobian = jacobian.sum(dim=-1)
jacobian = jacobian.view(jacobian.shape[0], jacobian.shape[1], 2, 2)
out['jacobian'] = jacobian
return out
================================================
FILE: modules/model.py
================================================
from torch import nn
import torch
import torch.nn.functional as F
from modules.util import AntiAliasInterpolation2d, make_coordinate_grid
from torchvision import models
import numpy as np
from torch.autograd import grad
class Vgg19(torch.nn.Module):
"""
Vgg19 network for perceptual loss. See Sec 3.3.
"""
def __init__(self, requires_grad=False):
super(Vgg19, self).__init__()
vgg_pretrained_features = models.vgg19(pretrained=True).features
self.slice1 = torch.nn.Sequential()
self.slice2 = torch.nn.Sequential()
self.slice3 = torch.nn.Sequential()
self.slice4 = torch.nn.Sequential()
self.slice5 = torch.nn.Sequential()
for x in range(2):
self.slice1.add_module(str(x), vgg_pretrained_features[x])
for x in range(2, 7):
self.slice2.add_module(str(x), vgg_pretrained_features[x])
for x in range(7, 12):
self.slice3.add_module(str(x), vgg_pretrained_features[x])
for x in range(12, 21):
self.slice4.add_module(str(x), vgg_pretrained_features[x])
for x in range(21, 30):
self.slice5.add_module(str(x), vgg_pretrained_features[x])
self.mean = torch.nn.Parameter(data=torch.Tensor(np.array([0.485, 0.456, 0.406]).reshape((1, 3, 1, 1))),
requires_grad=False)
self.std = torch.nn.Parameter(data=torch.Tensor(np.array([0.229, 0.224, 0.225]).reshape((1, 3, 1, 1))),
requires_grad=False)
if not requires_grad:
for param in self.parameters():
param.requires_grad = False
def forward(self, X):
X = (X - self.mean) / self.std
h_relu1 = self.slice1(X)
h_relu2 = self.slice2(h_relu1)
h_relu3 = self.slice3(h_relu2)
h_relu4 = self.slice4(h_relu3)
h_relu5 = self.slice5(h_relu4)
out = [h_relu1, h_relu2, h_relu3, h_relu4, h_relu5]
return out
class ImagePyramide(torch.nn.Module):
"""
Create image pyramide for computing pyramide perceptual loss. See Sec 3.3
"""
def __init__(self, scales, num_channels):
super(ImagePyramide, self).__init__()
downs = {}
for scale in scales:
downs[str(scale).replace('.', '-')] = AntiAliasInterpolation2d(num_channels, scale)
self.downs = nn.ModuleDict(downs)
def forward(self, x):
out_dict = {}
for scale, down_module in self.downs.items():
out_dict['prediction_' + str(scale).replace('-', '.')] = down_module(x)
return out_dict
class Transform:
"""
Random tps transformation for equivariance constraints. See Sec 3.3
"""
def __init__(self, bs, **kwargs):
noise = torch.normal(mean=0, std=kwargs['sigma_affine'] * torch.ones([bs, 2, 3]))
self.theta = noise + torch.eye(2, 3).view(1, 2, 3)
self.bs = bs
if ('sigma_tps' in kwargs) and ('points_tps' in kwargs):
self.tps = True
self.control_points = make_coordinate_grid((kwargs['points_tps'], kwargs['points_tps']), type=noise.type())
self.control_points = self.control_points.unsqueeze(0)
self.control_params = torch.normal(mean=0,
std=kwargs['sigma_tps'] * torch.ones([bs, 1, kwargs['points_tps'] ** 2]))
else:
self.tps = False
def transform_frame(self, frame):
grid = make_coordinate_grid(frame.shape[2:], type=frame.type()).unsqueeze(0)
grid = grid.view(1, frame.shape[2] * frame.shape[3], 2)
grid = self.warp_coordinates(grid).view(self.bs, frame.shape[2], frame.shape[3], 2)
return F.grid_sample(frame, grid, padding_mode="reflection")
def warp_coordinates(self, coordinates):
theta = self.theta.type(coordinates.type())
theta = theta.unsqueeze(1)
transformed = torch.matmul(theta[:, :, :, :2], coordinates.unsqueeze(-1)) + theta[:, :, :, 2:]
transformed = transformed.squeeze(-1)
if self.tps:
control_points = self.control_points.type(coordinates.type())
control_params = self.control_params.type(coordinates.type())
distances = coordinates.view(coordinates.shape[0], -1, 1, 2) - control_points.view(1, 1, -1, 2)
distances = torch.abs(distances).sum(-1)
result = distances ** 2
result = result * torch.log(distances + 1e-6)
result = result * control_params
result = result.sum(dim=2).view(self.bs, coordinates.shape[1], 1)
transformed = transformed + result
return transformed
def jacobian(self, coordinates):
new_coordinates = self.warp_coordinates(coordinates)
grad_x = grad(new_coordinates[..., 0].sum(), coordinates, create_graph=True)
grad_y = grad(new_coordinates[..., 1].sum(), coordinates, create_graph=True)
jacobian = torch.cat([grad_x[0].unsqueeze(-2), grad_y[0].unsqueeze(-2)], dim=-2)
return jacobian
def detach_kp(kp):
return {key: value.detach() for key, value in kp.items()}
class GeneratorFullModel(torch.nn.Module):
"""
Merge all generator related updates into single model for better multi-gpu usage
"""
def __init__(self, kp_extractor, generator, discriminator, train_params):
super(GeneratorFullModel, self).__init__()
self.kp_extractor = kp_extractor
self.generator = generator
self.discriminator = discriminator
self.train_params = train_params
self.scales = train_params['scales']
self.disc_scales = self.discriminator.scales
self.pyramid = ImagePyramide(self.scales, generator.num_channels)
if torch.cuda.is_available():
self.pyramid = self.pyramid.cuda()
self.loss_weights = train_params['loss_weights']
if sum(self.loss_weights['perceptual']) != 0:
self.vgg = Vgg19()
if torch.cuda.is_available():
self.vgg = self.vgg.cuda()
def forward(self, x):
kp_source = self.kp_extractor(x['source'])
kp_driving = self.kp_extractor(x['driving'])
generated = self.generator(x['source'], kp_source=kp_source, kp_driving=kp_driving)
generated.update({'kp_source': kp_source, 'kp_driving': kp_driving})
loss_values = {}
pyramide_real = self.pyramid(x['driving'])
pyramide_generated = self.pyramid(generated['prediction'])
if sum(self.loss_weights['perceptual']) != 0:
value_total = 0
for scale in self.scales:
x_vgg = self.vgg(pyramide_generated['prediction_' + str(scale)])
y_vgg = self.vgg(pyramide_real['prediction_' + str(scale)])
for i, weight in enumerate(self.loss_weights['perceptual']):
value = torch.abs(x_vgg[i] - y_vgg[i].detach()).mean()
value_total += self.loss_weights['perceptual'][i] * value
loss_values['perceptual'] = value_total
if self.loss_weights['generator_gan'] != 0:
discriminator_maps_generated = self.discriminator(pyramide_generated, kp=detach_kp(kp_driving))
discriminator_maps_real = self.discriminator(pyramide_real, kp=detach_kp(kp_driving))
value_total = 0
for scale in self.disc_scales:
key = 'prediction_map_%s' % scale
value = ((1 - discriminator_maps_generated[key]) ** 2).mean()
value_total += self.loss_weights['generator_gan'] * value
loss_values['gen_gan'] = value_total
if sum(self.loss_weights['feature_matching']) != 0:
value_total = 0
for scale in self.disc_scales:
key = 'feature_maps_%s' % scale
for i, (a, b) in enumerate(zip(discriminator_maps_real[key], discriminator_maps_generated[key])):
if self.loss_weights['feature_matching'][i] == 0:
continue
value = torch.abs(a - b).mean()
value_total += self.loss_weights['feature_matching'][i] * value
loss_values['feature_matching'] = value_total
if (self.loss_weights['equivariance_value'] + self.loss_weights['equivariance_jacobian']) != 0:
transform = Transform(x['driving'].shape[0], **self.train_params['transform_params'])
transformed_frame = transform.transform_frame(x['driving'])
transformed_kp = self.kp_extractor(transformed_frame)
generated['transformed_frame'] = transformed_frame
generated['transformed_kp'] = transformed_kp
## Value loss part
if self.loss_weights['equivariance_value'] != 0:
value = torch.abs(kp_driving['value'] - transform.warp_coordinates(transformed_kp['value'])).mean()
loss_values['equivariance_value'] = self.loss_weights['equivariance_value'] * value
## jacobian loss part
if self.loss_weights['equivariance_jacobian'] != 0:
jacobian_transformed = torch.matmul(transform.jacobian(transformed_kp['value']),
transformed_kp['jacobian'])
normed_driving = torch.inverse(kp_driving['jacobian'])
normed_transformed = jacobian_transformed
value = torch.matmul(normed_driving, normed_transformed)
eye = torch.eye(2).view(1, 1, 2, 2).type(value.type())
value = torch.abs(eye - value).mean()
loss_values['equivariance_jacobian'] = self.loss_weights['equivariance_jacobian'] * value
return loss_values, generated
class DiscriminatorFullModel(torch.nn.Module):
"""
Merge all discriminator related updates into single model for better multi-gpu usage
"""
def __init__(self, kp_extractor, generator, discriminator, train_params):
super(DiscriminatorFullModel, self).__init__()
self.kp_extractor = kp_extractor
self.generator = generator
self.discriminator = discriminator
self.train_params = train_params
self.scales = self.discriminator.scales
self.pyramid = ImagePyramide(self.scales, generator.num_channels)
if torch.cuda.is_available():
self.pyramid = self.pyramid.cuda()
self.loss_weights = train_params['loss_weights']
def forward(self, x, generated):
pyramide_real = self.pyramid(x['driving'])
pyramide_generated = self.pyramid(generated['prediction'].detach())
kp_driving = generated['kp_driving']
discriminator_maps_generated = self.discriminator(pyramide_generated, kp=detach_kp(kp_driving))
discriminator_maps_real = self.discriminator(pyramide_real, kp=detach_kp(kp_driving))
loss_values = {}
value_total = 0
for scale in self.scales:
key = 'prediction_map_%s' % scale
value = (1 - discriminator_maps_real[key]) ** 2 + discriminator_maps_generated[key] ** 2
value_total += self.loss_weights['discriminator_gan'] * value.mean()
loss_values['disc_gan'] = value_total
return loss_values
================================================
FILE: modules/util.py
================================================
from torch import nn
import torch.nn.functional as F
import torch
from sync_batchnorm import SynchronizedBatchNorm2d as BatchNorm2d
def kp2gaussian(kp, spatial_size, kp_variance):
"""
Transform a keypoint into gaussian like representation
"""
mean = kp['value']
coordinate_grid = make_coordinate_grid(spatial_size, mean.type())
number_of_leading_dimensions = len(mean.shape) - 1
shape = (1,) * number_of_leading_dimensions + coordinate_grid.shape
coordinate_grid = coordinate_grid.view(*shape)
repeats = mean.shape[:number_of_leading_dimensions] + (1, 1, 1)
coordinate_grid = coordinate_grid.repeat(*repeats)
# Preprocess kp shape
shape = mean.shape[:number_of_leading_dimensions] + (1, 1, 2)
mean = mean.view(*shape)
mean_sub = (coordinate_grid - mean)
out = torch.exp(-0.5 * (mean_sub ** 2).sum(-1) / kp_variance)
return out
def make_coordinate_grid(spatial_size, type):
"""
Create a meshgrid [-1,1] x [-1,1] of given spatial_size.
"""
h, w = spatial_size
x = torch.arange(w).type(type)
y = torch.arange(h).type(type)
x = (2 * (x / (w - 1)) - 1)
y = (2 * (y / (h - 1)) - 1)
yy = y.view(-1, 1).repeat(1, w)
xx = x.view(1, -1).repeat(h, 1)
meshed = torch.cat([xx.unsqueeze_(2), yy.unsqueeze_(2)], 2)
return meshed
class ResBlock2d(nn.Module):
"""
Res block, preserve spatial resolution.
"""
def __init__(self, in_features, kernel_size, padding):
super(ResBlock2d, self).__init__()
self.conv1 = nn.Conv2d(in_channels=in_features, out_channels=in_features, kernel_size=kernel_size,
padding=padding)
self.conv2 = nn.Conv2d(in_channels=in_features, out_channels=in_features, kernel_size=kernel_size,
padding=padding)
self.norm1 = BatchNorm2d(in_features, affine=True)
self.norm2 = BatchNorm2d(in_features, affine=True)
def forward(self, x):
out = self.norm1(x)
out = F.relu(out)
out = self.conv1(out)
out = self.norm2(out)
out = F.relu(out)
out = self.conv2(out)
out += x
return out
class UpBlock2d(nn.Module):
"""
Upsampling block for use in decoder.
"""
def __init__(self, in_features, out_features, kernel_size=3, padding=1, groups=1):
super(UpBlock2d, self).__init__()
self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size,
padding=padding, groups=groups)
self.norm = BatchNorm2d(out_features, affine=True)
def forward(self, x):
out = F.interpolate(x, scale_factor=2)
out = self.conv(out)
out = self.norm(out)
out = F.relu(out)
return out
class DownBlock2d(nn.Module):
"""
Downsampling block for use in encoder.
"""
def __init__(self, in_features, out_features, kernel_size=3, padding=1, groups=1):
super(DownBlock2d, self).__init__()
self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size,
padding=padding, groups=groups)
self.norm = BatchNorm2d(out_features, affine=True)
self.pool = nn.AvgPool2d(kernel_size=(2, 2))
def forward(self, x):
out = self.conv(x)
out = self.norm(out)
out = F.relu(out)
out = self.pool(out)
return out
class SameBlock2d(nn.Module):
"""
Simple block, preserve spatial resolution.
"""
def __init__(self, in_features, out_features, groups=1, kernel_size=3, padding=1):
super(SameBlock2d, self).__init__()
self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features,
kernel_size=kernel_size, padding=padding, groups=groups)
self.norm = BatchNorm2d(out_features, affine=True)
def forward(self, x):
out = self.conv(x)
out = self.norm(out)
out = F.relu(out)
return out
class Encoder(nn.Module):
"""
Hourglass Encoder
"""
def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256):
super(Encoder, self).__init__()
down_blocks = []
for i in range(num_blocks):
down_blocks.append(DownBlock2d(in_features if i == 0 else min(max_features, block_expansion * (2 ** i)),
min(max_features, block_expansion * (2 ** (i + 1))),
kernel_size=3, padding=1))
self.down_blocks = nn.ModuleList(down_blocks)
def forward(self, x):
outs = [x]
for down_block in self.down_blocks:
outs.append(down_block(outs[-1]))
return outs
class Decoder(nn.Module):
"""
Hourglass Decoder
"""
def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256):
super(Decoder, self).__init__()
up_blocks = []
for i in range(num_blocks)[::-1]:
in_filters = (1 if i == num_blocks - 1 else 2) * min(max_features, block_expansion * (2 ** (i + 1)))
out_filters = min(max_features, block_expansion * (2 ** i))
up_blocks.append(UpBlock2d(in_filters, out_filters, kernel_size=3, padding=1))
self.up_blocks = nn.ModuleList(up_blocks)
self.out_filters = block_expansion + in_features
def forward(self, x):
out = x.pop()
for up_block in self.up_blocks:
out = up_block(out)
skip = x.pop()
out = torch.cat([out, skip], dim=1)
return out
class Hourglass(nn.Module):
"""
Hourglass architecture.
"""
def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256):
super(Hourglass, self).__init__()
self.encoder = Encoder(block_expansion, in_features, num_blocks, max_features)
self.decoder = Decoder(block_expansion, in_features, num_blocks, max_features)
self.out_filters = self.decoder.out_filters
def forward(self, x):
return self.decoder(self.encoder(x))
class AntiAliasInterpolation2d(nn.Module):
"""
Band-limited downsampling, for better preservation of the input signal.
"""
def __init__(self, channels, scale):
super(AntiAliasInterpolation2d, self).__init__()
sigma = (1 / scale - 1) / 2
kernel_size = 2 * round(sigma * 4) + 1
self.ka = kernel_size // 2
self.kb = self.ka - 1 if kernel_size % 2 == 0 else self.ka
kernel_size = [kernel_size, kernel_size]
sigma = [sigma, sigma]
# The gaussian kernel is the product of the
# gaussian function of each dimension.
kernel = 1
meshgrids = torch.meshgrid(
[
torch.arange(size, dtype=torch.float32)
for size in kernel_size
]
)
for size, std, mgrid in zip(kernel_size, sigma, meshgrids):
mean = (size - 1) / 2
kernel *= torch.exp(-(mgrid - mean) ** 2 / (2 * std ** 2))
# Make sure sum of values in gaussian kernel equals 1.
kernel = kernel / torch.sum(kernel)
# Reshape to depthwise convolutional weight
kernel = kernel.view(1, 1, *kernel.size())
kernel = kernel.repeat(channels, *[1] * (kernel.dim() - 1))
self.register_buffer('weight', kernel)
self.groups = channels
self.scale = scale
inv_scale = 1 / scale
self.int_inv_scale = int(inv_scale)
def forward(self, input):
if self.scale == 1.0:
return input
out = F.pad(input, (self.ka, self.kb, self.ka, self.kb))
out = F.conv2d(out, weight=self.weight, groups=self.groups)
out = out[:, :, ::self.int_inv_scale, ::self.int_inv_scale]
return out
================================================
FILE: old_demo.ipynb
================================================
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "first-order-model-demo.ipynb",
"provenance": [],
"toc_visible": true,
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cdO_RxQZLahB"
},
"source": [
"# Demo for paper \"First Order Motion Model for Image Animation\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GCDNKsEGLtR6"
},
"source": [
"**Clone repository**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "UCMFMJV7K-ag",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 104
},
"outputId": "836efe50-65d7-4c95-a17e-13fc3922b491"
},
"source": [
"!git clone https://github.com/AliaksandrSiarohin/first-order-model"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Cloning into 'first-order-model'...\n",
"remote: Enumerating objects: 246, done.\u001b[K\n",
"remote: Total 246 (delta 0), reused 0 (delta 0), pack-reused 246\u001b[K\n",
"Receiving objects: 100% (246/246), 71.46 MiB | 22.54 MiB/s, done.\n",
"Resolving deltas: 100% (121/121), done.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "PBp6l_4bBYUL",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "702bdf2c-d6d2-41ec-cf3c-9196452544d8"
},
"source": [
"cd first-order-model"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"/content/first-order-model\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IcMX7ueZO0Oa"
},
"source": [
"**Mount your Google drive folder on Colab**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tDbMA8R9OuUo",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "f92ce039-d693-4e03-879b-d0d49a121da2"
},
"source": [
"from google.colab import drive\n",
"drive.mount('/content/gdrive')"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Mounted at /content/gdrive\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VsgVK1EURXkd"
},
"source": [
"**Add folder https://drive.google.com/drive/folders/1kZ1gCnpfU0BnpdU47pLM_TQ6RypDDqgw?usp=sharing to your google drive.\n",
"Alternativelly you can use this mirror link https://drive.google.com/drive/folders/16inDpBRPT1UC0YMGMX3dKvRnOUsf5Dhn?usp=sharing**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rW-ipQXPOWUo"
},
"source": [
"**Load driving video and source image**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Oxi6-riLOgnm",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 453
},
"outputId": "d38a8850-9eb1-4de4-9bf2-24cbd847ca1f"
},
"source": [
"import imageio\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.animation as animation\n",
"from skimage.transform import resize\n",
"from IPython.display import HTML\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"source_image = imageio.imread('/content/gdrive/My Drive/first-order-motion-model/02.png')\n",
"reader = imageio.get_reader('/content/gdrive/My Drive/first-order-motion-model/04.mp4')\n",
"\n",
"\n",
"#Resize image and video to 256x256\n",
"\n",
"source_image = resize(source_image, (256, 256))[..., :3]\n",
"\n",
"fps = reader.get_meta_data()['fps']\n",
"driving_video = []\n",
"try:\n",
" for im in reader:\n",
" driving_video.append(im)\n",
"except RuntimeError:\n",
" pass\n",
"reader.close()\n",
"\n",
"driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]\n",
"\n",
"def display(source, driving, generated=None):\n",
" fig = plt.figure(figsize=(8 + 4 * (generated is not None), 6))\n",
"\n",
" ims = []\n",
" for i in range(len(driving)):\n",
" cols = [source]\n",
" cols.append(driving[i])\n",
" if generated is not None:\n",
" cols.append(generated[i])\n",
" im = plt.imshow(np.concatenate(cols, axis=1), animated=True)\n",
" plt.axis('off')\n",
" ims.append([im])\n",
"\n",
" ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=1000)\n",
" plt.close()\n",
" return ani\n",
" \n",
"\n",
"HTML(display(source_image, driving_video).to_html5_video())"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xjM7ubVfWrwT"
},
"source": [
"**Create a model and load checkpoints**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "3FQiXqQPWt5B"
},
"source": [
"from demo import load_checkpoints\n",
"generator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml', \n",
" checkpoint_path='/content/gdrive/My Drive/first-order-motion-model/vox-cpk.pth.tar')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "fdFdasHEj3t7"
},
"source": [
"**Perform image animation**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SB12II11kF4c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 471
},
"outputId": "9e2274aa-fd55-4eed-cb50-bec72fcfb8b9"
},
"source": [
"from demo import make_animation\n",
"from skimage import img_as_ubyte\n",
"\n",
"predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=True)\n",
"\n",
"#save resulting video\n",
"imageio.mimsave('../generated.mp4', [img_as_ubyte(frame) for frame in predictions], fps=fps)\n",
"#video can be downloaded from /content folder\n",
"\n",
"HTML(display(source_image, driving_video, predictions).to_html5_video())"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"100%|██████████| 211/211 [00:26<00:00, 7.92it/s]\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-tJN01xQCpqH"
},
"source": [
"**In the cell above we use relative keypoint displacement to animate the objects. We can use absolute coordinates instead, but in this way all the object proporions will be inherited from the driving video. For example Putin haircut will be extended to match Trump haircut.**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "aOE_W_kfC9aX",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 471
},
"outputId": "f472a888-0200-4b21-b6d2-b6f6737bc9e5"
},
"source": [
"predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=False, adapt_movement_scale=True)\n",
"HTML(display(source_image, driving_video, predictions).to_html5_video())"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"100%|██████████| 211/211 [00:26<00:00, 7.90it/s]\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QnXrecuX6_Kw"
},
"source": [
"## Running on your data\n",
"\n",
"**First we need to crop a face from both source image and video, while simple graphic editor like paint can be used for cropping from image. Cropping from video is more complicated. You can use ffpmeg for this.**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "brJlA_5o72Xc",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "c2becb7e-e2ee-4651-ee8a-f906b5663417"
},
"source": [
"!ffmpeg -i /content/gdrive/My\\ Drive/first-order-motion-model/07.mkv -ss 00:08:57.50 -t 00:00:08 -filter:v \"crop=600:600:760:50\" -async 1 hinton.mp4"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers\n",
" built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)\n",
" configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n",
" libavutil 55. 78.100 / 55. 78.100\n",
" libavcodec 57.107.100 / 57.107.100\n",
" libavformat 57. 83.100 / 57. 83.100\n",
" libavdevice 57. 10.100 / 57. 10.100\n",
" libavfilter 6.107.100 / 6.107.100\n",
" libavresample 3. 7. 0 / 3. 7. 0\n",
" libswscale 4. 8.100 / 4. 8.100\n",
" libswresample 2. 9.100 / 2. 9.100\n",
" libpostproc 54. 7.100 / 54. 7.100\n",
"Input #0, matroska,webm, from '/content/gdrive/My Drive/first-order-motion-model/07.mkv':\n",
" Metadata:\n",
" ENCODER : Lavf57.83.100\n",
" Duration: 00:14:59.73, start: 0.000000, bitrate: 2343 kb/s\n",
" Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 1920x1080, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 1k tbn, 1k tbc (default)\n",
" Metadata:\n",
" DURATION : 00:14:59.665000000\n",
" Stream #0:1(eng): Audio: aac (LC), 44100 Hz, stereo, fltp (default)\n",
" Metadata:\n",
" HANDLER_NAME : SoundHandler\n",
" DURATION : 00:14:59.727000000\n",
"Stream mapping:\n",
" Stream #0:0 -> #0:0 (vp9 (native) -> h264 (libx264))\n",
" Stream #0:1 -> #0:1 (aac (native) -> aac (native))\n",
"Press [q] to stop, [?] for help\n",
"-async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0.\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0musing SAR=1/1\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0musing cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mprofile High, level 3.1\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0m264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\n",
"Output #0, mp4, to 'hinton.mp4':\n",
" Metadata:\n",
" encoder : Lavf57.83.100\n",
" Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 600x600 [SAR 1:1 DAR 1:1], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)\n",
" Metadata:\n",
" DURATION : 00:14:59.665000000\n",
" encoder : Lavc57.107.100 libx264\n",
" Side data:\n",
" cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1\n",
" Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)\n",
" Metadata:\n",
" HANDLER_NAME : SoundHandler\n",
" DURATION : 00:14:59.727000000\n",
" encoder : Lavc57.107.100 aac\n",
"frame= 240 fps=2.5 q=-1.0 Lsize= 1301kB time=00:00:08.01 bitrate=1330.6kbits/s speed=0.0844x \n",
"video:1166kB audio:125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.761764%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mframe I:1 Avg QP:22.44 size: 28019\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mframe P:62 Avg QP:23.31 size: 12894\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mframe B:177 Avg QP:28.63 size: 2068\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mconsecutive B-frames: 0.8% 1.7% 2.5% 95.0%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mmb I I16..4: 12.7% 76.2% 11.1%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mmb P I16..4: 1.9% 8.9% 1.1% P16..4: 35.3% 21.3% 10.8% 0.0% 0.0% skip:20.7%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mmb B I16..4: 0.0% 0.1% 0.0% B16..8: 39.1% 5.4% 1.0% direct: 1.4% skip:52.9% L0:35.4% L1:48.5% BI:16.2%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0m8x8 transform intra:75.2% inter:77.3%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mcoded y,uvDC,uvAC intra: 61.9% 52.1% 5.8% inter: 15.2% 6.9% 0.0%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mi16 v,h,dc,p: 69% 8% 8% 15%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mi8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 10% 19% 5% 8% 11% 8% 9% 6%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mi4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 8% 11% 5% 12% 21% 7% 9% 4%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mi8c dc,h,v,p: 53% 20% 19% 8%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mWeighted P-Frames: Y:21.0% UV:1.6%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mref P L0: 57.9% 21.2% 14.0% 5.9% 1.1%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mref B L0: 93.5% 5.3% 1.2%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mref B L1: 97.4% 2.6%\n",
"\u001b[1;36m[libx264 @ 0x55709b1c4800] \u001b[0mkb/s:1192.28\n",
"\u001b[1;36m[aac @ 0x55709b1c5700] \u001b[0mQavg: 534.430\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NSHSxV8iGybI"
},
"source": [
"**Another posibility is to use some screen recording tool, or if you need to crop many images at ones use face detector(https://github.com/1adrianb/face-alignment) , see https://github.com/AliaksandrSiarohin/video-preprocessing for preprcessing of VoxCeleb.** "
]
},
{
"cell_type": "code",
"metadata": {
"id": "d8kQ3U7MHqh-",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 471
},
"outputId": "8890e858-ac38-4d59-b014-cc4ed974f276"
},
"source": [
"source_image = imageio.imread('/content/gdrive/My Drive/first-order-motion-model/09.png')\n",
"driving_video = imageio.mimread('hinton.mp4', memtest=False)\n",
"\n",
"\n",
"#Resize image and video to 256x256\n",
"\n",
"source_image = resize(source_image, (256, 256))[..., :3]\n",
"driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]\n",
"\n",
"predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=True,\n",
" adapt_movement_scale=True)\n",
"\n",
"HTML(display(source_image, driving_video, predictions).to_html5_video())"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"100%|██████████| 240/240 [00:30<00:00, 7.94it/s]\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
}
]
}
================================================
FILE: reconstruction.py
================================================
import os
from tqdm import tqdm
import torch
from torch.utils.data import DataLoader
from logger import Logger, Visualizer
import numpy as np
import imageio
from sync_batchnorm import DataParallelWithCallback
def reconstruction(config, generator, kp_detector, checkpoint, log_dir, dataset):
png_dir = os.path.join(log_dir, 'reconstruction/png')
log_dir = os.path.join(log_dir, 'reconstruction')
if checkpoint is not None:
Logger.load_cpk(checkpoint, generator=generator, kp_detector=kp_detector)
else:
raise AttributeError("Checkpoint should be specified for mode='reconstruction'.")
dataloader = DataLoader(dataset, batch_size=1, shuffle=False, num_workers=1)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
if not os.path.exists(png_dir):
os.makedirs(png_dir)
loss_list = []
if torch.cuda.is_available():
generator = DataParallelWithCallback(generator)
kp_detector = DataParallelWithCallback(kp_detector)
generator.eval()
kp_detector.eval()
for it, x in tqdm(enumerate(dataloader)):
if config['reconstruction_params']['num_videos'] is not None:
if it > config['reconstruction_params']['num_videos']:
break
with torch.no_grad():
predictions = []
visualizations = []
if torch.cuda.is_available():
x['video'] = x['video'].cuda()
kp_source = kp_detector(x['video'][:, :, 0])
for frame_idx in range(x['video'].shape[2]):
source = x['video'][:, :, 0]
driving = x['video'][:, :, frame_idx]
kp_driving = kp_detector(driving)
out = generator(source, kp_source=kp_source, kp_driving=kp_driving)
out['kp_source'] = kp_source
out['kp_driving'] = kp_driving
del out['sparse_deformed']
predictions.append(np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0])
visualization = Visualizer(**config['visualizer_params']).visualize(source=source,
driving=driving, out=out)
visualizations.append(visualization)
loss_list.append(torch.abs(out['prediction'] - driving).mean().cpu().numpy())
predictions = np.concatenate(predictions, axis=1)
imageio.imsave(os.path.join(png_dir, x['name'][0] + '.png'), (255 * predictions).astype(np.uint8))
image_name = x['name'][0] + config['reconstruction_params']['format']
imageio.mimsave(os.path.join(log_dir, image_name), visualizations)
print("Reconstruction loss: %s" % np.mean(loss_list))
================================================
FILE: requirements.txt
================================================
ffmpeg-python==0.2.0
imageio==2.22.0
imageio-ffmpeg==0.4.7
matplotlib==3.6.0
numpy==1.23.3
pandas==1.5.0
python-dateutil==2.8.2
pytz==2022.2.1
PyYAML==6.0
scikit-image==0.19.3
scikit-learn==1.1.2
scipy==1.9.1
torch==1.12.1
torchvision==0.13.1
tqdm==4.64.1
================================================
FILE: run.py
================================================
import matplotlib
matplotlib.use('Agg')
import os, sys
import yaml
from argparse import ArgumentParser
from time import gmtime, strftime
from shutil import copy
from frames_dataset import FramesDataset
from modules.generator import OcclusionAwareGenerator
from modules.discriminator import MultiScaleDiscriminator
from modules.keypoint_detector import KPDetector
import torch
from train import train
from reconstruction import reconstruction
from animate import animate
if __name__ == "__main__":
if sys.version_info[0] < 3:
raise Exception("You must use Python 3 or higher. Recommended version is Python 3.7")
parser = ArgumentParser()
parser.add_argument("--config", required=True, help="path to config")
parser.add_argument("--mode", default="train", choices=["train", "reconstruction", "animate"])
parser.add_argument("--log_dir", default='log', help="path to log into")
parser.add_argument("--checkpoint", default=None, help="path to checkpoint to restore")
parser.add_argument("--device_ids", default="0", type=lambda x: list(map(int, x.split(','))),
help="Names of the devices comma separated.")
parser.add_argument("--verbose", dest="verbose", action="store_true", help="Print model architecture")
parser.set_defaults(verbose=False)
opt = parser.parse_args()
with open(opt.config) as f:
config = yaml.load(f)
if opt.checkpoint is not None:
log_dir = os.path.join(*os.path.split(opt.checkpoint)[:-1])
else:
log_dir = os.path.join(opt.log_dir, os.path.basename(opt.config).split('.')[0])
log_dir += ' ' + strftime("%d_%m_%y_%H.%M.%S", gmtime())
generator = OcclusionAwareGenerator(**config['model_params']['generator_params'],
**config['model_params']['common_params'])
if torch.cuda.is_available():
generator.to(opt.device_ids[0])
if opt.verbose:
print(generator)
discriminator = MultiScaleDiscriminator(**config['model_params']['discriminator_params'],
**config['model_params']['common_params'])
if torch.cuda.is_available():
discriminator.to(opt.device_ids[0])
if opt.verbose:
print(discriminator)
kp_detector = KPDetector(**config['model_params']['kp_detector_params'],
**config['model_params']['common_params'])
if torch.cuda.is_available():
kp_detector.to(opt.device_ids[0])
if opt.verbose:
print(kp_detector)
dataset = FramesDataset(is_train=(opt.mode == 'train'), **config['dataset_params'])
if not os.path.exists(log_dir):
os.makedirs(log_dir)
if not os.path.exists(os.path.join(log_dir, os.path.basename(opt.config))):
copy(opt.config, log_dir)
if opt.mode == 'train':
print("Training...")
train(config, generator, discriminator, kp_detector, opt.checkpoint, log_dir, dataset, opt.device_ids)
elif opt.mode == 'reconstruction':
print("Reconstruction...")
reconstruction(config, generator, kp_detector, opt.checkpoint, log_dir, dataset)
elif opt.mode == 'animate':
print("Animate...")
animate(config, generator, kp_detector, opt.checkpoint, log_dir, dataset)
================================================
FILE: sync_batchnorm/__init__.py
================================================
# -*- coding: utf-8 -*-
# File : __init__.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 27/01/2018
#
# This file is part of Synchronized-BatchNorm-PyTorch.
# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
# Distributed under MIT License.
from .batchnorm import SynchronizedBatchNorm1d, SynchronizedBatchNorm2d, SynchronizedBatchNorm3d
from .replicate import DataParallelWithCallback, patch_replication_callback
================================================
FILE: sync_batchnorm/batchnorm.py
================================================
# -*- coding: utf-8 -*-
# File : batchnorm.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 27/01/2018
#
# This file is part of Synchronized-BatchNorm-PyTorch.
# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
# Distributed under MIT License.
import collections
import torch
import torch.nn.functional as F
from torch.nn.modules.batchnorm import _BatchNorm
from torch.nn.parallel._functions import ReduceAddCoalesced, Broadcast
from .comm import SyncMaster
__all__ = ['SynchronizedBatchNorm1d', 'SynchronizedBatchNorm2d', 'SynchronizedBatchNorm3d']
def _sum_ft(tensor):
"""sum over the first and last dimention"""
return tensor.sum(dim=0).sum(dim=-1)
def _unsqueeze_ft(tensor):
"""add new dementions at the front and the tail"""
return tensor.unsqueeze(0).unsqueeze(-1)
_ChildMessage = collections.namedtuple('_ChildMessage', ['sum', 'ssum', 'sum_size'])
_MasterMessage = collections.namedtuple('_MasterMessage', ['sum', 'inv_std'])
class _SynchronizedBatchNorm(_BatchNorm):
def __init__(self, num_features, eps=1e-5, momentum=0.1, affine=True):
super(_SynchronizedBatchNorm, self).__init__(num_features, eps=eps, momentum=momentum, affine=affine)
self._sync_master = SyncMaster(self._data_parallel_master)
self._is_parallel = False
self._parallel_id = None
self._slave_pipe = None
def forward(self, input):
# If it is not parallel computation or is in evaluation mode, use PyTorch's implementation.
if not (self._is_parallel and self.training):
return F.batch_norm(
input, self.running_mean, self.running_var, self.weight, self.bias,
self.training, self.momentum, self.eps)
# Resize the input to (B, C, -1).
input_shape = input.size()
input = input.view(input.size(0), self.num_features, -1)
# Compute the sum and square-sum.
sum_size = input.size(0) * input.size(2)
input_sum = _sum_ft(input)
input_ssum = _sum_ft(input ** 2)
# Reduce-and-broadcast the statistics.
if self._parallel_id == 0:
mean, inv_std = self._sync_master.run_master(_ChildMessage(input_sum, input_ssum, sum_size))
else:
mean, inv_std = self._slave_pipe.run_slave(_ChildMessage(input_sum, input_ssum, sum_size))
# Compute the output.
if self.affine:
# MJY:: Fuse the multiplication for speed.
output = (input - _unsqueeze_ft(mean)) * _unsqueeze_ft(inv_std * self.weight) + _unsqueeze_ft(self.bias)
else:
output = (input - _unsqueeze_ft(mean)) * _unsqueeze_ft(inv_std)
# Reshape it.
return output.view(input_shape)
def __data_parallel_replicate__(self, ctx, copy_id):
self._is_parallel = True
self._parallel_id = copy_id
# parallel_id == 0 means master device.
if self._parallel_id == 0:
ctx.sync_master = self._sync_master
else:
self._slave_pipe = ctx.sync_master.register_slave(copy_id)
def _data_parallel_master(self, intermediates):
"""Reduce the sum and square-sum, compute the statistics, and broadcast it."""
# Always using same "device order" makes the ReduceAdd operation faster.
# Thanks to:: Tete Xiao (http://tetexiao.com/)
intermediates = sorted(intermediates, key=lambda i: i[1].sum.get_device())
to_reduce = [i[1][:2] for i in intermediates]
to_reduce = [j for i in to_reduce for j in i] # flatten
target_gpus = [i[1].sum.get_device() for i in intermediates]
sum_size = sum([i[1].sum_size for i in intermediates])
sum_, ssum = ReduceAddCoalesced.apply(target_gpus[0], 2, *to_reduce)
mean, inv_std = self._compute_mean_std(sum_, ssum, sum_size)
broadcasted = Broadcast.apply(target_gpus, mean, inv_std)
outputs = []
for i, rec in enumerate(intermediates):
outputs.append((rec[0], _MasterMessage(*broadcasted[i*2:i*2+2])))
return outputs
def _compute_mean_std(self, sum_, ssum, size):
"""Compute the mean and standard-deviation with sum and square-sum. This method
also maintains the moving average on the master device."""
assert size > 1, 'BatchNorm computes unbiased standard-deviation, which requires size > 1.'
mean = sum_ / size
sumvar = ssum - sum_ * mean
unbias_var = sumvar / (size - 1)
bias_var = sumvar / size
self.running_mean = (1 - self.momentum) * self.running_mean + self.momentum * mean.data
self.running_var = (1 - self.momentum) * self.running_var + self.momentum * unbias_var.data
return mean, bias_var.clamp(self.eps) ** -0.5
class SynchronizedBatchNorm1d(_SynchronizedBatchNorm):
r"""Applies Synchronized Batch Normalization over a 2d or 3d input that is seen as a
mini-batch.
.. math::
y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta
This module differs from the built-in PyTorch BatchNorm1d as the mean and
standard-deviation are reduced across all devices during training.
For example, when one uses `nn.DataParallel` to wrap the network during
training, PyTorch's implementation normalize the tensor on each device using
the statistics only on that device, which accelerated the computation and
is also easy to implement, but the statistics might be inaccurate.
Instead, in this synchronized version, the statistics will be computed
over all training samples distributed on multiple devices.
Note that, for one-GPU or CPU-only case, this module behaves exactly same
as the built-in PyTorch implementation.
The mean and standard-deviation are calculated per-dimension over
the mini-batches and gamma and beta are learnable parameter vectors
of size C (where C is the input size).
During training, this layer keeps a running estimate of its computed mean
and variance. The running sum is kept with a default momentum of 0.1.
During evaluation, this running mean/variance is used for normalization.
Because the BatchNorm is done over the `C` dimension, computing statistics
on `(N, L)` slices, it's common terminology to call this Temporal BatchNorm
Args:
num_features: num_features from an expected input of size
`batch_size x num_features [x width]`
eps: a value added to the denominator for numerical stability.
Default: 1e-5
momentum: the value used for the running_mean and running_var
computation. Default: 0.1
affine: a boolean value that when set to ``True``, gives the layer learnable
affine parameters. Default: ``True``
Shape:
- Input: :math:`(N, C)` or :math:`(N, C, L)`
- Output: :math:`(N, C)` or :math:`(N, C, L)` (same shape as input)
Examples:
>>> # With Learnable Parameters
>>> m = SynchronizedBatchNorm1d(100)
>>> # Without Learnable Parameters
>>> m = SynchronizedBatchNorm1d(100, affine=False)
>>> input = torch.autograd.Variable(torch.randn(20, 100))
>>> output = m(input)
"""
def _check_input_dim(self, input):
if input.dim() != 2 and input.dim() != 3:
raise ValueError('expected 2D or 3D input (got {}D input)'
.format(input.dim()))
super(SynchronizedBatchNorm1d, self)._check_input_dim(input)
class SynchronizedBatchNorm2d(_SynchronizedBatchNorm):
r"""Applies Batch Normalization over a 4d input that is seen as a mini-batch
of 3d inputs
.. math::
y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta
This module differs from the built-in PyTorch BatchNorm2d as the mean and
standard-deviation are reduced across all devices during training.
For example, when one uses `nn.DataParallel` to wrap the network during
training, PyTorch's implementation normalize the tensor on each device using
the statistics only on that device, which accelerated the computation and
is also easy to implement, but the statistics might be inaccurate.
Instead, in this synchronized version, the statistics will be computed
over all training samples distributed on multiple devices.
Note that, for one-GPU or CPU-only case, this module behaves exactly same
as the built-in PyTorch implementation.
The mean and standard-deviation are calculated per-dimension over
the mini-batches and gamma and beta are learnable parameter vectors
of size C (where C is the input size).
During training, this layer keeps a running estimate of its computed mean
and variance. The running sum is kept with a default momentum of 0.1.
During evaluation, this running mean/variance is used for normalization.
Because the BatchNorm is done over the `C` dimension, computing statistics
on `(N, H, W)` slices, it's common terminology to call this Spatial BatchNorm
Args:
num_features: num_features from an expected input of
size batch_size x num_features x height x width
eps: a value added to the denominator for numerical stability.
Default: 1e-5
momentum: the value used for the running_mean and running_var
computation. Default: 0.1
affine: a boolean value that when set to ``True``, gives the layer learnable
affine parameters. Default: ``True``
Shape:
- Input: :math:`(N, C, H, W)`
- Output: :math:`(N, C, H, W)` (same shape as input)
Examples:
>>> # With Learnable Parameters
>>> m = SynchronizedBatchNorm2d(100)
>>> # Without Learnable Parameters
>>> m = SynchronizedBatchNorm2d(100, affine=False)
>>> input = torch.autograd.Variable(torch.randn(20, 100, 35, 45))
>>> output = m(input)
"""
def _check_input_dim(self, input):
if input.dim() != 4:
raise ValueError('expected 4D input (got {}D input)'
.format(input.dim()))
super(SynchronizedBatchNorm2d, self)._check_input_dim(input)
class SynchronizedBatchNorm3d(_SynchronizedBatchNorm):
r"""Applies Batch Normalization over a 5d input that is seen as a mini-batch
of 4d inputs
.. math::
y = \frac{x - mean[x]}{ \sqrt{Var[x] + \epsilon}} * gamma + beta
This module differs from the built-in PyTorch BatchNorm3d as the mean and
standard-deviation are reduced across all devices during training.
For example, when one uses `nn.DataParallel` to wrap the network during
training, PyTorch's implementation normalize the tensor on each device using
the statistics only on that device, which accelerated the computation and
is also easy to implement, but the statistics might be inaccurate.
Instead, in this synchronized version, the statistics will be computed
over all training samples distributed on multiple devices.
Note that, for one-GPU or CPU-only case, this module behaves exactly same
as the built-in PyTorch implementation.
The mean and standard-deviation are calculated per-dimension over
the mini-batches and gamma and beta are learnable parameter vectors
of size C (where C is the input size).
During training, this layer keeps a running estimate of its computed mean
and variance. The running sum is kept with a default momentum of 0.1.
During evaluation, this running mean/variance is used for normalization.
Because the BatchNorm is done over the `C` dimension, computing statistics
on `(N, D, H, W)` slices, it's common terminology to call this Volumetric BatchNorm
or Spatio-temporal BatchNorm
Args:
num_features: num_features from an expected input of
size batch_size x num_features x depth x height x width
eps: a value added to the denominator for numerical stability.
Default: 1e-5
momentum: the value used for the running_mean and running_var
computation. Default: 0.1
affine: a boolean value that when set to ``True``, gives the layer learnable
affine parameters. Default: ``True``
Shape:
- Input: :math:`(N, C, D, H, W)`
- Output: :math:`(N, C, D, H, W)` (same shape as input)
Examples:
>>> # With Learnable Parameters
>>> m = SynchronizedBatchNorm3d(100)
>>> # Without Learnable Parameters
>>> m = SynchronizedBatchNorm3d(100, affine=False)
>>> input = torch.autograd.Variable(torch.randn(20, 100, 35, 45, 10))
>>> output = m(input)
"""
def _check_input_dim(self, input):
if input.dim() != 5:
raise ValueError('expected 5D input (got {}D input)'
.format(input.dim()))
super(SynchronizedBatchNorm3d, self)._check_input_dim(input)
================================================
FILE: sync_batchnorm/comm.py
================================================
# -*- coding: utf-8 -*-
# File : comm.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 27/01/2018
#
# This file is part of Synchronized-BatchNorm-PyTorch.
# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
# Distributed under MIT License.
import queue
import collections
import threading
__all__ = ['FutureResult', 'SlavePipe', 'SyncMaster']
class FutureResult(object):
"""A thread-safe future implementation. Used only as one-to-one pipe."""
def __init__(self):
self._result = None
self._lock = threading.Lock()
self._cond = threading.Condition(self._lock)
def put(self, result):
with self._lock:
assert self._result is None, 'Previous result has\'t been fetched.'
self._result = result
self._cond.notify()
def get(self):
with self._lock:
if self._result is None:
self._cond.wait()
res = self._result
self._result = None
return res
_MasterRegistry = collections.namedtuple('MasterRegistry', ['result'])
_SlavePipeBase = collections.namedtuple('_SlavePipeBase', ['identifier', 'queue', 'result'])
class SlavePipe(_SlavePipeBase):
"""Pipe for master-slave communication."""
def run_slave(self, msg):
self.queue.put((self.identifier, msg))
ret = self.result.get()
self.queue.put(True)
return ret
class SyncMaster(object):
"""An abstract `SyncMaster` object.
- During the replication, as the data parallel will trigger an callback of each module, all slave devices should
call `register(id)` and obtain an `SlavePipe` to communicate with the master.
- During the forward pass, master device invokes `run_master`, all messages from slave devices will be collected,
and passed to a registered callback.
- After receiving the messages, the master device should gather the information and determine to message passed
back to each slave devices.
"""
def __init__(self, master_callback):
"""
Args:
master_callback: a callback to be invoked after having collected messages from slave devices.
"""
self._master_callback = master_callback
self._queue = queue.Queue()
self._registry = collections.OrderedDict()
self._activated = False
def __getstate__(self):
return {'master_callback': self._master_callback}
def __setstate__(self, state):
self.__init__(state['master_callback'])
def register_slave(self, identifier):
"""
Register an slave device.
Args:
identifier: an identifier, usually is the device id.
Returns: a `SlavePipe` object which can be used to communicate with the master device.
"""
if self._activated:
assert self._queue.empty(), 'Queue is not clean before next initialization.'
self._activated = False
self._registry.clear()
future = FutureResult()
self._registry[identifier] = _MasterRegistry(future)
return SlavePipe(identifier, self._queue, future)
def run_master(self, master_msg):
"""
Main entry for the master device in each forward pass.
The messages were first collected from each devices (including the master device), and then
an callback will be invoked to compute the message to be sent back to each devices
(including the master device).
Args:
master_msg: the message that the master want to send to itself. This will be placed as the first
message when calling `master_callback`. For detailed usage, see `_SynchronizedBatchNorm` for an example.
Returns: the message to be sent back to the master device.
"""
self._activated = True
intermediates = [(0, master_msg)]
for i in range(self.nr_slaves):
intermediates.append(self._queue.get())
results = self._master_callback(intermediates)
assert results[0][0] == 0, 'The first result should belongs to the master.'
for i, res in results:
if i == 0:
continue
self._registry[i].result.put(res)
for i in range(self.nr_slaves):
assert self._queue.get() is True
return results[0][1]
@property
def nr_slaves(self):
return len(self._registry)
================================================
FILE: sync_batchnorm/replicate.py
================================================
# -*- coding: utf-8 -*-
# File : replicate.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 27/01/2018
#
# This file is part of Synchronized-BatchNorm-PyTorch.
# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
# Distributed under MIT License.
import functools
from torch.nn.parallel.data_parallel import DataParallel
__all__ = [
'CallbackContext',
'execute_replication_callbacks',
'DataParallelWithCallback',
'patch_replication_callback'
]
class CallbackContext(object):
pass
def execute_replication_callbacks(modules):
"""
Execute an replication callback `__data_parallel_replicate__` on each module created by original replication.
The callback will be invoked with arguments `__data_parallel_replicate__(ctx, copy_id)`
Note that, as all modules are isomorphism, we assign each sub-module with a context
(shared among multiple copies of this module on different devices).
Through this context, different copies can share some information.
We guarantee that the callback on the master copy (the first copy) will be called ahead of calling the callback
of any slave copies.
"""
master_copy = modules[0]
nr_modules = len(list(master_copy.modules()))
ctxs = [CallbackContext() for _ in range(nr_modules)]
for i, module in enumerate(modules):
for j, m in enumerate(module.modules()):
if hasattr(m, '__data_parallel_replicate__'):
m.__data_parallel_replicate__(ctxs[j], i)
class DataParallelWithCallback(DataParallel):
"""
Data Parallel with a replication callback.
An replication callback `__data_parallel_replicate__` of each module will be invoked after being created by
original `replicate` function.
The callback will be invoked with arguments `__data_parallel_replicate__(ctx, copy_id)`
Examples:
> sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False)
> sync_bn = DataParallelWithCallback(sync_bn, device_ids=[0, 1])
# sync_bn.__data_parallel_replicate__ will be invoked.
"""
def replicate(self, module, device_ids):
modules = super(DataParallelWithCallback, self).replicate(module, device_ids)
execute_replication_callbacks(modules)
return modules
def patch_replication_callback(data_parallel):
"""
Monkey-patch an existing `DataParallel` object. Add the replication callback.
Useful when you have customized `DataParallel` implementation.
Examples:
> sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False)
> sync_bn = DataParallel(sync_bn, device_ids=[0, 1])
> patch_replication_callback(sync_bn)
# this is equivalent to
> sync_bn = SynchronizedBatchNorm1d(10, eps=1e-5, affine=False)
> sync_bn = DataParallelWithCallback(sync_bn, device_ids=[0, 1])
"""
assert isinstance(data_parallel, DataParallel)
old_replicate = data_parallel.replicate
@functools.wraps(old_replicate)
def new_replicate(module, device_ids):
modules = old_replicate(module, device_ids)
execute_replication_callbacks(modules)
return modules
data_parallel.replicate = new_replicate
================================================
FILE: sync_batchnorm/unittest.py
================================================
# -*- coding: utf-8 -*-
# File : unittest.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 27/01/2018
#
# This file is part of Synchronized-BatchNorm-PyTorch.
# https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
# Distributed under MIT License.
import unittest
import numpy as np
from torch.autograd import Variable
def as_numpy(v):
if isinstance(v, Variable):
v = v.data
return v.cpu().numpy()
class TorchTestCase(unittest.TestCase):
def assertTensorClose(self, a, b, atol=1e-3, rtol=1e-3):
npa, npb = as_numpy(a), as_numpy(b)
self.assertTrue(
np.allclose(npa, npb, atol=atol),
'Tensor close check failed\n{}\n{}\nadiff={}, rdiff={}'.format(a, b, np.abs(npa - npb).max(), np.abs((npa - npb) / np.fmax(npa, 1e-5)).max())
)
================================================
FILE: train.py
================================================
from tqdm import trange
import torch
from torch.utils.data import DataLoader
from logger import Logger
from modules.model import GeneratorFullModel, DiscriminatorFullModel
from torch.optim.lr_scheduler import MultiStepLR
from sync_batchnorm import DataParallelWithCallback
from frames_dataset import DatasetRepeater
def train(config, generator, discriminator, kp_detector, checkpoint, log_dir, dataset, device_ids):
train_params = config['train_params']
optimizer_generator = torch.optim.Adam(generator.parameters(), lr=train_params['lr_generator'], betas=(0.5, 0.999))
optimizer_discriminator = torch.optim.Adam(discriminator.parameters(), lr=train_params['lr_discriminator'], betas=(0.5, 0.999))
optimizer_kp_detector = torch.optim.Adam(kp_detector.parameters(), lr=train_params['lr_kp_detector'], betas=(0.5, 0.999))
if checkpoint is not None:
start_epoch = Logger.load_cpk(checkpoint, generator, discriminator, kp_detector,
optimizer_generator, optimizer_discriminator,
None if train_params['lr_kp_detector'] == 0 else optimizer_kp_detector)
else:
start_epoch = 0
scheduler_generator = MultiStepLR(optimizer_generator, train_params['epoch_milestones'], gamma=0.1,
last_epoch=start_epoch - 1)
scheduler_discriminator = MultiStepLR(optimizer_discriminator, train_params['epoch_milestones'], gamma=0.1,
last_epoch=start_epoch - 1)
scheduler_kp_detector = MultiStepLR(optimizer_kp_detector, train_params['epoch_milestones'], gamma=0.1,
last_epoch=-1 + start_epoch * (train_params['lr_kp_detector'] != 0))
if 'num_repeats' in train_params or train_params['num_repeats'] != 1:
dataset = DatasetRepeater(dataset, train_params['num_repeats'])
dataloader = DataLoader(dataset, batch_size=train_params['batch_size'], shuffle=True, num_workers=6, drop_last=True)
generator_full = GeneratorFullModel(kp_detector, generator, discriminator, train_params)
discriminator_full = DiscriminatorFullModel(kp_detector, generator, discriminator, train_params)
if torch.cuda.is_available():
generator_full = DataParallelWithCallback(generator_full, device_ids=device_ids)
discriminator_full = DataParallelWithCallback(discriminator_full, device_ids=device_ids)
with Logger(log_dir=log_dir, visualizer_params=config['visualizer_params'], checkpoint_freq=train_params['checkpoint_freq']) as logger:
for epoch in trange(start_epoch, train_params['num_epochs']):
for x in dataloader:
losses_generator, generated = generator_full(x)
loss_values = [val.mean() for val in losses_generator.values()]
loss = sum(loss_values)
loss.backward()
optimizer_generator.step()
optimizer_generator.zero_grad()
optimizer_kp_detector.step()
optimizer_kp_detector.zero_grad()
if train_params['loss_weights']['generator_gan'] != 0:
optimizer_discriminator.zero_grad()
losses_discriminator = discriminator_full(x, generated)
loss_values = [val.mean() for val in losses_discriminator.values()]
loss = sum(loss_values)
loss.backward()
optimizer_discriminator.step()
optimizer_discriminator.zero_grad()
else:
losses_discriminator = {}
losses_generator.update(losses_discriminator)
losses = {key: value.mean().detach().data.cpu().numpy() for key, value in losses_generator.items()}
logger.log_iter(losses=losses)
scheduler_generator.step()
scheduler_discriminator.step()
scheduler_kp_detector.step()
logger.log_epoch(epoch, {'generator': generator,
'discriminator': discriminator,
'kp_detector': kp_detector,
'optimizer_generator': optimizer_generator,
'optimizer_discriminator': optimizer_discriminator,
'optimizer_kp_detector': optimizer_kp_detector}, inp=x, out=generated)