trap/test_tracker.ipynb

40 KiB

In [1]:
import cv2
from pathlib import Path
import numpy as np
from tqdm.autonotebook import tqdm
from trap.frame_emitter import DetectionState, Frame, Detection, Track
/tmp/ipykernel_1584053/4159269788.py:4: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from tqdm.autonotebook import tqdm
In [2]:
video_srcs = list(Path('../DATASETS/hof/').glob('*.m4v'))

video_srcs
Out[2]:
[PosixPath('../DATASETS/hof/webcam20240110-4.m4v'),
 PosixPath('../DATASETS/hof/webcam20231103-4.m4v'),
 PosixPath('../DATASETS/hof/webcam20231103-2.m4v'),
 PosixPath('../DATASETS/hof/webcam20231103-3.m4v'),
 PosixPath('../DATASETS/hof/webcam20240110-2.m4v'),
 PosixPath('../DATASETS/hof/webcam20240111-2.m4v'),
 PosixPath('../DATASETS/hof/webcam20240111-1.m4v'),
 PosixPath('../DATASETS/hof/webcam20240110-3.m4v'),
 PosixPath('../DATASETS/hof/webcam20240110-1.m4v'),
 PosixPath('../DATASETS/hof/webcam20240111-3.m4v')]
In [3]:
import torch


device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
In [4]:
import collections
from torchvision.models.detection import maskrcnn_resnet50_fpn_v2, MaskRCNN_ResNet50_FPN_V2_Weights, KeypointRCNN_ResNet50_FPN_Weights, keypointrcnn_resnet50_fpn
from deep_sort_realtime.deepsort_tracker import DeepSort
from ultralytics import YOLO
from ultralytics.engine.results import Results as YOLOResult

def tracker(frame_generator: collections.abc.Iterable[Frame]) -> collections.abc.Iterable[Frame]:
    first_frame: Frame = frame_generator.__next__()

    t = torch.from_numpy(cv2.cvtColor(first_frame.img, cv2.COLOR_BGR2RGB))
    # change axes of image loaded image to be compatilbe with torch.io.read_image (which has C,W,H format instead of W,H,C)
    t = t.permute(2, 0, 1)

    # weights =KeypointRCNN_ResNet50_FPN_Weights.DEFAULT
    # model = keypointrcnn_resnet50_fpn(weights=weights, box_score_thresh=0.3)

    model = YOLO('EXPERIMENTS/yolov8x.pt')

    # weights = MaskRCNN_ResNet50_FPN_V2_Weights.COCO_V1
    # model = maskrcnn_resnet50_fpn_v2(weights=weights, box_score_thresh=0.50)
    # model.to(device)
    # # Put the model in inference mode
    # model.eval()

    # Get the transforms for the model's weights
    # preprocess = weights.transforms().to(device)
    # mot_tracker = DeepSort(n_init=1, max_iou_distance=1, max_cosine_distance=0.7, max_age=20, nms_max_overlap=1,
    #                         #   embedder='torchreid', embedder_wts="../MODELS/osnet_x1_0_imagenet.pth"
    #                         )
    
    tracks = collections.defaultdict(lambda: Track())


    for frame in frame_generator:
        # detections: [Detection] = _resnet_track(model, preprocess, mot_tracker, frame.img, scale = 1)
        detections: [Detection] = _yolov8_track(frame.img, model)
        for detection in detections:
            track = tracks[detection.track_id]
            track.track_id = detection.track_id # for new tracks

            track.history.append(detection)
        
        active_track_ids = [d.track_id for d in detections]
        active_tracks = {t.track_id: t for t in tracks.values() if t.track_id in active_track_ids}
        # logger.info(f"{trajectories}")
        frame.tracks = active_tracks
        yield frame

def _yolov8_track(img, model: YOLO) -> [Detection]:
    results: [YOLOResult] = model.track(img, persist=True, tracker="bytetrack.yaml", verbose=False)
    if results[0].boxes is None or results[0].boxes.id is None:
        # work around https://github.com/ultralytics/ultralytics/issues/5968
        return []
    return [Detection(track_id, bbox[0]-.5*bbox[2], bbox[1]-.5*bbox[3], bbox[2], bbox[3], 1, DetectionState.Confirmed) for bbox, track_id in zip(results[0].boxes.xywh.cpu(), results[0].boxes.id.int().cpu().tolist())]

def _resnet_track(model, preprocess, mot_tracker: DeepSort, img, scale: float = 1) -> [Detection]:
    if scale != 1:
        dsize = (int(img.shape[1] * scale), int(img.shape[0] * scale))
        img = cv2.resize(img, dsize)
    detections = _resnet_detect_persons(model, preprocess, img)
    tracks: [DeepsortTrack] = mot_tracker.update_tracks(detections, frame=img)
    return [Detection.from_deepsort(t).get_scaled(1/scale) for t in tracks]

def _resnet_detect_persons(model, preprocess, frame) -> [Detection]:
    t = torch.from_numpy(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    # change axes of image loaded image to be compatilbe with torch.io.read_image (which has C,W,H format instead of W,H,C)
    t = t.permute(2, 0, 1)

    batch = preprocess(t)[None, :].to(device)
    # no_grad can be used on inference, should be slightly faster
    with torch.no_grad():
        predictions = model(batch)
    prediction = predictions[0] # we feed only one frame at once

    # TODO: check if we need e.g. cyclist
    mask = prediction['labels'] == 1 # if we want more than one label: np.isin(prediction['labels'], [1,86])

    scores = prediction['scores'][mask]
    labels = prediction['labels'][mask]
    boxes = prediction['boxes'][mask]
    
    # TODO: introduce confidence and NMS supression: https://github.com/cfotache/pytorch_objectdetecttrack/blob/master/PyTorch_Object_Tracking.ipynb
    # (which I _think_ we better do after filtering)
    # alternatively look at Soft-NMS https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c

    #  dets - a numpy array of detections in the format [[x1,y1,x2,y2,score, label],[x1,y1,x2,y2,score, label],...]
    detections = np.array([np.append(bbox, [score, label]) for bbox, score, label in zip(boxes.cpu(), scores.cpu(), labels.cpu())])
    detections = detect_persons_deepsort_wrapper(detections)
    
    return detections

def detect_persons_deepsort_wrapper(detections):
    """make detect_persons() compatible with
    deep_sort_realtime tracker by going from ltrb to ltwh and
    different nesting
    """
    return [([d[0], d[1], d[2]-d[0], d[3]-d[1]], d[4], d[5]) for d in detections]
In [5]:
from tsmoothie.smoother import KalmanSmoother, ConvolutionSmoother

def smooth_detections(frame_generator: collections.abc.Iterable[Frame]):
    smoother = ConvolutionSmoother(window_len=2, window_type='ones', copy=None)
    # smoother = KalmanSmoother(component='level_trend', 
    #                         component_noise={'level':0.01, 'trend':0.01})

    for frame in frame_generator:
        new_tracks = []
        for track in frame.tracks.values():
            ls = [d.l for d in track.history]
            ts = [d.t for d in track.history]
            ws = [d.w for d in track.history]
            hs = [d.h for d in track.history]
            smoother.smooth(ls)
            ls = smoother.smooth_data[0]
            smoother.smooth(ts)
            ts = smoother.smooth_data[0]
            smoother.smooth(ws)
            ws = smoother.smooth_data[0]
            smoother.smooth(hs)
            hs = smoother.smooth_data[0]
            new_history = [Detection(d.track_id, l, t, w, h, d.conf, d.state) for l, t, w, h, d in zip(ls,ts,ws,hs, track.history)]
            new_track = Track(track.track_id, new_history, track.predictor_history, track.predictions)
            new_tracks.append(new_track)
        frame.tracks = {t.track_id: t for t in new_tracks}
        yield frame
In [6]:
import ffmpeg

from trap.renderer import decorate_frame

def streamer(frame_generator: collections.abc.Iterable[Frame]):
    render_url = "zmq:tcp://0.0.0.0:5556"
    frame_size = (1280,720)
    streaming_process = start_streaming(frame_size, render_url, 25)
    first_time = None
    try:
        for frame in frame_generator:
            if not first_time:
                first_time = frame.time
            # img = frame.img
            img = decorate_frame(frame, frame,first_time)
            streaming_process.stdin.write(img.tobytes())
            yield frame
    finally:
        streaming_process.stdin.close()
        streaming_process.wait()

def start_streaming(frame_size, render_url, fps):
        return (
            ffmpeg
            .input('pipe:', format='rawvideo',codec="rawvideo", pix_fmt='bgr24', s='{}x{}'.format(*frame_size))
            .output(
                render_url,
                #codec = "copy", # use same codecs of the original video
                codec='libx264',
                listen=1, # enables HTTP server
                pix_fmt="yuv420p",
                preset="ultrafast",
                tune="zerolatency",
                g=f"{fps*2}",
                analyzeduration="2000000",
                probesize="1000000",
                f='mpegts'
            )
            .overwrite_output()
            .run_async(pipe_stdin=True)
        )
In [7]:
def frame_generator(video_srcs: [Path]) -> collections.abc.Iterable[Frame]:
    i = 0
    for video_path in video_srcs:
        print(video_path)
        video = cv2.VideoCapture(str(video_path))
        fps = video.get(cv2.CAP_PROP_FPS)

        duration = video.get(cv2.CAP_PROP_FRAME_COUNT)

        start = video.set(cv2.CAP_PROP_POS_FRAMES, 1900+45000)

        if '-' in video_path.stem:
            path_stem = video_path.stem[:video_path.stem.rfind('-')]
        else:
            path_stem = video_path.stem
        path_stem += "-homography"
        homography_path = video_path.with_stem(path_stem).with_suffix('.txt')
        print(f'check homography file {homography_path}')

        if homography_path.exists():
            print(f'Found custom homography file! Using {homography_path}')
            video_H = np.loadtxt(homography_path, delimiter=',')
        else:
            video_H = None

        pbar = tqdm(total=duration)
        while True:
            pbar.update(1)
            ret, img = video.read()

            # seek to 0 if video has finished. Infinite loop
            if not ret:
                # now loading multiple files        
                # TODO trigger detector reset
                break
                
            
            if "DATASETS/hof/" in str(video_path):
                # hack to mask out area
                cv2.rectangle(img, (0,0), (800,200), (0,0,0), -1)

            frame = Frame(index=i, img=img, H=video_H)
            i += 1
            yield frame
In [8]:
from IPython.display import display, Markdown
In [9]:
display(Markdown("view stream with `ffplay zmq:tcp://100.109.175.82:5556`"))
for detections in tqdm(streamer(smooth_detections(tracker(frame_generator(video_srcs))))):
# for frame in frame_generator(video_srcs):
    # print(detections)
    pass
    # if len(detections):
    #     print(detections)
    #     break

    # break

view stream with ffplay zmq:tcp://100.109.175.82:5556

0it [00:00, ?it/s]
../DATASETS/hof/webcam20240110-4.m4v
check homography file ../DATASETS/hof/webcam20240110-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20240110-homography.txt
ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
../DATASETS/hof/webcam20231103-4.m4v
check homography file ../DATASETS/hof/webcam20231103-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt
  0%|          | 1/33925.0 [00:00<1:31:33,  6.18it/s]
../DATASETS/hof/webcam20231103-2.m4v
check homography file ../DATASETS/hof/webcam20231103-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt
  0%|          | 1/3976.0 [00:00<04:53, 13.55it/s]
../DATASETS/hof/webcam20231103-3.m4v

check homography file ../DATASETS/hof/webcam20231103-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20231103-homography.txt
  0%|          | 1/25419.0 [00:00<1:12:37,  5.83it/s]
../DATASETS/hof/webcam20240110-2.m4v

check homography file ../DATASETS/hof/webcam20240110-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20240110-homography.txt
  0%|          | 1/21775.0 [00:00<14:52, 24.41it/s]
../DATASETS/hof/webcam20240111-2.m4v
check homography file ../DATASETS/hof/webcam20240111-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20240111-homography.txt
  0%|          | 1/32084.0 [00:00<35:41, 14.98it/s]

../DATASETS/hof/webcam20240111-1.m4v
check homography file ../DATASETS/hof/webcam20240111-homography.txt
Found custom homography file! Using ../DATASETS/hof/webcam20240111-homography.txt
  0%|          | 2/32560.0 [00:00<49:54, 10.87it/s]
/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/numpy/lib/function_base.py:520: RuntimeWarning: Mean of empty slice.
  avg = a.mean(axis, **keepdims_kw)
/home/ruben/suspicion/trap/.venv/lib/python3.10/site-packages/numpy/core/_methods.py:129: RuntimeWarning: invalid value encountered in scalar divide
  ret = ret.dtype.type(ret / rcount)
1it [00:03,  3.37s/it]
Input #0, rawvideo, from 'pipe:':
  Duration: N/A, start: 0.000000, bitrate: 552960 kb/s
  Stream #0:0: Video: rawvideo (BGR[24] / 0x18524742), bgr24, 1280x720, 552960 kb/s, 25 tbr, 25 tbn
  0%|          | 2/53033.0 [00:02<19:17:32,  1.31s/it]Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))[libx264 @ 0x5559f9bb1880] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x5559f9bb1880] profile Constrained Baseline, level 3.1, 4:2:0, 8-bit
Output #0, mpegts, to 'zmq:tcp://0.0.0.0:5556':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: h264, yuv420p(tv, progressive), 1280x720, q=2-31, 25 fps, 90k tbn
    Metadata:
      encoder         : Lavc59.37.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
563it [00:12, 60.48it/s].0 size=     219kB time=00:00:00.00 bitrate=162978909.1kbits/s speed=N/A    frame=   29 fps=0.0 q=16.0 size=     448kB time=00:00:01.12 bitrate=3279.2kbits/s speed=2.23x    frame=   57 fps= 56 q=18.0 size=     963kB time=00:00:02.24 bitrate=3523.0kbits/s speed=2.21x    frame=   86 fps= 57 q=13.0 size=    1140kB time=00:00:03.40 bitrate=2746.1kbits/s speed=2.24x    frame=  117 fps= 58 q=13.0 size=    1521kB time=00:00:04.64 bitrate=2685.2kbits/s speed=2.28x    frame=  147 fps= 58 q=13.0 size=    1554kB time=00:00:05.84 bitrate=2179.5kbits/s speed= 2.3x    frame=  177 fps= 58 q=13.0 size=    1977kB time=00:00:07.04 bitrate=2301.1kbits/s speed=2.32x    frame=  207 fps= 58 q=15.0 size=    2400kB time=00:00:08.24 bitrate=2386.5kbits/s speed=2.33x    frame=  237 fps= 58 q=13.0 size=    2434kB time=00:00:09.44 bitrate=2112.4kbits/s speed=2.33x    frame=  267 fps= 58 q=13.0 size=    2856kB time=00:00:10.64 bitrate=2199.0kbits/s speed=2.33x    frame=  296 fps= 58 q=13.0 size=    2888kB time=00:00:11.80 bitrate=2005.0kbits/s speed=2.33x    frame=  326 fps= 58 q=13.0 size=    3310kB time=00:00:13.00 bitrate=2085.7kbits/s speed=2.33x    frame=  356 fps= 58 q=17.0 size=    3731kB time=00:00:14.20 bitrate=2152.2kbits/s speed=2.33x    frame=  386 fps= 58 q=13.0 size=    3774kB time=00:00:15.40 bitrate=2007.6kbits/s speed=2.33x    frame=  416 fps= 58 q=13.0 size=    4201kB time=00:00:16.60 bitrate=2073.3kbits/s speed=2.33x    frame=  446 fps= 59 q=13.0 size=    4235kB time=00:00:17.80 bitrate=1949.2kbits/s speed=2.34x    frame=  476 fps= 59 q=13.0 size=    4659kB time=00:00:19.00 bitrate=2008.9kbits/s speed=2.34x    frame=  506 fps= 59 q=17.0 size=    5083kB time=00:00:20.20 bitrate=2061.2kbits/s speed=2.34x    frame=  537 fps= 59 q=13.0 size=    5117kB time=00:00:21.44 bitrate=1955.0kbits/s speed=2.34x    
2440it [00:44, 59.73it/s]3.0 [00:12<14:28, 60.44it/s]frame=  568 fps= 59 q=13.0 size=    5539kB time=00:00:22.68 bitrate=2000.6kbits/s speed=2.35x    frame=  598 fps= 59 q=13.0 size=    5570kB time=00:00:23.88 bitrate=1910.8kbits/s speed=2.35x    frame=  628 fps= 59 q=13.0 size=    5993kB time=00:00:25.08 bitrate=1957.5kbits/s speed=2.35x    frame=  658 fps= 59 q=14.0 size=    6415kB time=00:00:26.28 bitrate=1999.6kbits/s speed=2.35x    frame=  688 fps= 59 q=13.0 size=    6449kB time=00:00:27.48 bitrate=1922.6kbits/s speed=2.35x    frame=  719 fps= 59 q=13.0 size=    6874kB time=00:00:28.72 bitrate=1960.9kbits/s speed=2.35x    frame=  749 fps= 59 q=13.0 size=    6908kB time=00:00:29.92 bitrate=1891.5kbits/s speed=2.35x    frame=  779 fps= 59 q=15.0 size=    7353kB time=00:00:31.12 bitrate=1935.5kbits/s speed=2.35x    frame=  808 fps= 59 q=15.0 size=    7817kB time=00:00:32.28 bitrate=1983.7kbits/s speed=2.35x    frame=  838 fps= 59 q=13.0 size=    7863kB time=00:00:33.48 bitrate=1924.0kbits/s speed=2.35x    frame=  869 fps= 59 q=13.0 size=    8268kB time=00:00:34.72 bitrate=1950.8kbits/s speed=2.35x    frame=  899 fps= 59 q=13.0 size=    8310kB time=00:00:35.92 bitrate=1895.2kbits/s speed=2.36x    frame=  929 fps= 59 q=13.0 size=    8734kB time=00:00:37.12 bitrate=1927.4kbits/s speed=2.36x    frame=  959 fps= 59 q=14.0 size=    9157kB time=00:00:38.32 bitrate=1957.6kbits/s speed=2.35x    frame=  989 fps= 59 q=13.0 size=    9193kB time=00:00:39.52 bitrate=1905.5kbits/s speed=2.35x    frame= 1019 fps= 59 q=13.0 size=    9617kB time=00:00:40.72 bitrate=1934.8kbits/s speed=2.35x    frame= 1049 fps= 59 q=13.0 size=    9649kB time=00:00:41.92 bitrate=1885.7kbits/s speed=2.35x    frame= 1079 fps= 59 q=13.0 size=   10073kB time=00:00:43.12 bitrate=1913.6kbits/s speed=2.36x    frame= 1109 fps= 59 q=14.0 size=   10496kB time=00:00:44.32 bitrate=1940.1kbits/s speed=2.36x    frame= 1138 fps= 59 q=13.0 size=   10527kB time=00:00:45.48 bitrate=1896.2kbits/s speed=2.36x    frame= 1168 fps= 59 q=13.0 size=   10951kB time=00:00:46.68 bitrate=1921.8kbits/s speed=2.36x    frame= 1198 fps= 59 q=13.0 size=   10984kB time=00:00:47.88 bitrate=1879.3kbits/s speed=2.36x    frame= 1227 fps= 59 q=14.0 size=   11436kB time=00:00:49.04 bitrate=1910.4kbits/s speed=2.35x    frame= 1256 fps= 59 q=19.0 size=   11893kB time=00:00:50.20 bitrate=1940.8kbits/s speed=2.35x    frame= 1284 fps= 59 q=15.0 size=   12077kB time=00:00:51.32 bitrate=1927.8kbits/s speed=2.35x    frame= 1313 fps= 59 q=14.0 size=   12535kB time=00:00:52.48 bitrate=1956.7kbits/s speed=2.35x    frame= 1342 fps= 59 q=14.0 size=   12608kB time=00:00:53.64 bitrate=1925.5kbits/s speed=2.35x    frame= 1371 fps= 59 q=14.0 size=   13039kB time=00:00:54.80 bitrate=1949.1kbits/s speed=2.35x    frame= 1401 fps= 59 q=11.0 size=   13466kB time=00:00:56.00 bitrate=1969.9kbits/s speed=2.35x    frame= 1430 fps= 59 q=13.0 size=   13524kB time=00:00:57.16 bitrate=1938.2kbits/s speed=2.35x    frame= 1460 fps= 59 q=14.0 size=   13947kB time=00:00:58.36 bitrate=1957.8kbits/s speed=2.35x    frame= 1490 fps= 59 q=13.0 size=   14007kB time=00:00:59.56 bitrate=1926.6kbits/s speed=2.35x    frame= 1520 fps= 59 q=14.0 size=   14443kB time=00:01:00.76 bitrate=1947.3kbits/s speed=2.35x    frame= 1550 fps= 59 q=14.0 size=   14509kB time=00:01:01.96 bitrate=1918.4kbits/s speed=2.35x    frame= 1580 fps= 59 q=13.0 size=   14927kB time=00:01:03.16 bitrate=1936.1kbits/s speed=2.35x    frame= 1611 fps= 59 q=13.0 size=   15341kB time=00:01:04.40 bitrate=1951.5kbits/s speed=2.35x    frame= 1641 fps= 59 q=13.0 size=   15384kB time=00:01:05.60 bitrate=1921.1kbits/s speed=2.35x    frame= 1671 fps= 59 q=13.0 size=   15803kB time=00:01:06.80 bitrate=1938.0kbits/s speed=2.35x    frame= 1701 fps= 59 q=11.0 size=   16221kB time=00:01:08.00 bitrate=1954.1kbits/s speed=2.35x    frame= 1732 fps= 59 q=14.0 size=   16288kB time=00:01:09.24 bitrate=1927.1kbits/s speed=2.35x    frame= 1762 fps= 59 q=14.0 size=   16715kB time=00:01:10.44 bitrate=1943.9kbits/s speed=2.35x    frame= 1792 fps= 59 q=14.0 size=   16803kB time=00:01:11.64 bitrate=1921.4kbits/s speed=2.35x    frame= 1821 fps= 59 q=14.0 size=   17231kB time=00:01:12.80 bitrate=1939.0kbits/s speed=2.35x    frame= 1851 fps= 59 q=11.0 size=   17668kB time=00:01:14.00 bitrate=1955.9kbits/s speed=2.35x    frame= 1881 fps= 59 q=14.0 size=   17729kB time=00:01:15.20 bitrate=1931.3kbits/s speed=2.35x    frame= 1911 fps= 59 q=15.0 size=   18173kB time=00:01:16.40 bitrate=1948.6kbits/s speed=2.35x    frame= 1941 fps= 59 q=14.0 size=   18273kB time=00:01:17.60 bitrate=1929.1kbits/s speed=2.35x    frame= 1971 fps= 59 q=14.0 size=   18703kB time=00:01:18.80 bitrate=1944.4kbits/s speed=2.35x    frame= 2001 fps= 59 q=11.0 size=   19137kB time=00:01:20.00 bitrate=1959.6kbits/s speed=2.35x    frame= 2031 fps= 59 q=13.0 size=   19190kB time=00:01:21.20 bitrate=1936.0kbits/s speed=2.35x    frame= 2061 fps= 59 q=14.0 size=   19614kB time=00:01:22.40 bitrate=1950.0kbits/s speed=2.35x    frame= 2091 fps= 59 q=13.0 size=   19669kB time=00:01:23.60 bitrate=1927.4kbits/s speed=2.35x    frame= 2121 fps= 59 q=14.0 size=   20092kB time=00:01:24.80 bitrate=1941.0kbits/s speed=2.35x    frame= 2151 fps= 59 q=11.0 size=   20525kB time=00:01:26.00 bitrate=1955.1kbits/s speed=2.35x    frame= 2180 fps= 59 q=13.0 size=   20579kB time=00:01:27.16 bitrate=1934.2kbits/s speed=2.35x    frame= 2209 fps= 59 q=14.0 size=   20988kB time=00:01:28.32 bitrate=1946.8kbits/s speed=2.35x    frame= 2238 fps= 59 q=13.0 size=   21036kB time=00:01:29.48 bitrate=1925.9kbits/s speed=2.35x    frame= 2267 fps= 59 q=13.0 size=   21473kB time=00:01:30.64 bitrate=1940.7kbits/s speed=2.35x    frame= 2296 fps= 59 q=13.0 size=   21523kB time=00:01:31.80 bitrate=1920.7kbits/s speed=2.35x    frame= 2325 fps= 59 q=13.0 size=   21945kB time=00:01:32.96 bitrate=1933.9kbits/s speed=2.35x    frame= 2354 fps= 59 q=20.0 size=   22367kB time=00:01:34.12 bitrate=1946.8kbits/s speed=2.35x    frame= 2384 fps= 59 q=13.0 size=   22430kB time=00:01:35.32 bitrate=1927.7kbits/s speed=2.35x    frame= 2414 fps= 59 q=13.0 size=   22845kB time=00:01:36.52 bitrate=1938.9kbits/s speed=2.35x    
3332it [01:00, 55.40it/s]33.0 [00:44<14:07, 59.68it/s]frame= 2444 fps= 59 q=13.0 size=   22894kB time=00:01:37.72 bitrate=1919.2kbits/s speed=2.35x    frame= 2474 fps= 59 q=13.0 size=   23312kB time=00:01:38.92 bitrate=1930.6kbits/s speed=2.35x    frame= 2504 fps= 59 q=20.0 size=   23733kB time=00:01:40.12 bitrate=1941.9kbits/s speed=2.35x    frame= 2534 fps= 59 q=14.0 size=   23783kB time=00:01:41.32 bitrate=1922.9kbits/s speed=2.35x    frame= 2564 fps= 59 q=14.0 size=   24217kB time=00:01:42.52 bitrate=1935.1kbits/s speed=2.35x    frame= 2594 fps= 59 q=14.0 size=   24289kB time=00:01:43.72 bitrate=1918.4kbits/s speed=2.35x    frame= 2624 fps= 59 q=13.0 size=   24707kB time=00:01:44.92 bitrate=1929.1kbits/s speed=2.35x    frame= 2654 fps= 59 q=20.0 size=   25119kB time=00:01:46.12 bitrate=1939.1kbits/s speed=2.35x    frame= 2684 fps= 59 q=14.0 size=   25166kB time=00:01:47.32 bitrate=1921.0kbits/s speed=2.35x    frame= 2714 fps= 59 q=13.0 size=   25583kB time=00:01:48.52 bitrate=1931.2kbits/s speed=2.35x    frame= 2743 fps= 59 q=13.0 size=   25619kB time=00:01:49.68 bitrate=1913.5kbits/s speed=2.35x    frame= 2772 fps= 59 q=13.0 size=   26044kB time=00:01:50.84 bitrate=1924.9kbits/s speed=2.35x    frame= 2801 fps= 59 q=10.0 size=   26473kB time=00:01:52.00 bitrate=1936.3kbits/s speed=2.35x    frame= 2830 fps= 59 q=13.0 size=   26507kB time=00:01:53.16 bitrate=1918.9kbits/s speed=2.35x    frame= 2859 fps= 59 q=14.0 size=   26930kB time=00:01:54.32 bitrate=1929.8kbits/s speed=2.35x    frame= 2889 fps= 59 q=13.0 size=   26965kB time=00:01:55.52 bitrate=1912.2kbits/s speed=2.35x    frame= 2919 fps= 59 q=13.0 size=   27393kB time=00:01:56.72 bitrate=1922.5kbits/s speed=2.34x    frame= 2949 fps= 59 q=13.0 size=   27427kB time=00:01:57.92 bitrate=1905.4kbits/s speed=2.35x    frame= 2979 fps= 59 q=13.0 size=   27854kB time=00:01:59.12 bitrate=1915.6kbits/s speed=2.35x    frame= 3009 fps= 59 q=14.0 size=   28279kB time=00:02:00.32 bitrate=1925.4kbits/s speed=2.35x    frame= 3039 fps= 59 q=13.0 size=   28315kB time=00:02:01.52 bitrate=1908.8kbits/s speed=2.35x    frame= 3068 fps= 59 q=13.0 size=   28746kB time=00:02:02.68 bitrate=1919.5kbits/s speed=2.35x    frame= 3097 fps= 59 q=13.0 size=   28792kB time=00:02:03.84 bitrate=1904.6kbits/s speed=2.34x    frame= 3127 fps= 59 q=13.0 size=   29223kB time=00:02:05.04 bitrate=1914.5kbits/s speed=2.34x    frame= 3157 fps= 59 q=15.0 size=   29654kB time=00:02:06.24 bitrate=1924.3kbits/s speed=2.34x    frame= 3187 fps= 59 q=13.0 size=   29693kB time=00:02:07.44 bitrate=1908.7kbits/s speed=2.34x    frame= 3248 fps= 59 q=13.0 size=   30172kB time=00:02:09.88 bitrate=1903.1kbits/s speed=2.35x    frame= 3279 fps= 59 q=14.0 size=   30595kB time=00:02:11.12 bitrate=1911.5kbits/s speed=2.35x    frame= 3308 fps= 59 q=17.0 size=   31066kB time=00:02:12.28 bitrate=1923.9kbits/s speed=2.35x    
4755it [01:24, 59.84it/s]33.0 [00:59<14:59, 55.25it/s]frame= 3336 fps= 59 q=17.0 size=   31251kB time=00:02:13.40 bitrate=1919.1kbits/s speed=2.34x    frame= 3364 fps= 59 q=17.0 size=   31766kB time=00:02:14.52 bitrate=1934.5kbits/s speed=2.34x    frame= 3394 fps= 59 q=13.0 size=   31870kB time=00:02:15.72 bitrate=1923.6kbits/s speed=2.34x    frame= 3424 fps= 59 q=13.0 size=   32270kB time=00:02:16.92 bitrate=1930.7kbits/s speed=2.34x    frame= 3454 fps= 59 q=20.0 size=   32694kB time=00:02:18.12 bitrate=1939.1kbits/s speed=2.34x    frame= 3484 fps= 59 q=13.0 size=   32729kB time=00:02:19.32 bitrate=1924.5kbits/s speed=2.34x    frame= 3514 fps= 59 q=13.0 size=   33157kB time=00:02:20.52 bitrate=1933.0kbits/s speed=2.34x    frame= 3544 fps= 59 q=13.0 size=   33190kB time=00:02:21.72 bitrate=1918.5kbits/s speed=2.34x    frame= 3574 fps= 59 q=13.0 size=   33617kB time=00:02:22.92 bitrate=1926.9kbits/s speed=2.34x    frame= 3604 fps= 59 q=20.0 size=   34049kB time=00:02:24.12 bitrate=1935.4kbits/s speed=2.34x    frame= 3634 fps= 59 q=13.0 size=   34083kB time=00:02:25.32 bitrate=1921.3kbits/s speed=2.34x    frame= 3664 fps= 59 q=13.0 size=   34516kB time=00:02:26.52 bitrate=1929.8kbits/s speed=2.34x    frame= 3694 fps= 59 q=13.0 size=   34563kB time=00:02:27.72 bitrate=1916.7kbits/s speed=2.34x    frame= 3724 fps= 59 q=13.0 size=   34993kB time=00:02:28.92 bitrate=1924.9kbits/s speed=2.34x    frame= 3753 fps= 59 q=23.0 size=   35417kB time=00:02:30.08 bitrate=1933.2kbits/s speed=2.34x    frame= 3782 fps= 59 q=13.0 size=   35452kB time=00:02:31.24 bitrate=1920.3kbits/s speed=2.34x    frame= 3812 fps= 59 q=13.0 size=   35879kB time=00:02:32.44 bitrate=1928.1kbits/s speed=2.34x    frame= 3841 fps= 59 q=13.0 size=   35910kB time=00:02:33.60 bitrate=1915.2kbits/s speed=2.34x    frame= 3870 fps= 59 q=13.0 size=   36332kB time=00:02:34.76 bitrate=1923.2kbits/s speed=2.34x    frame= 3900 fps= 59 q=13.0 size=   36365kB time=00:02:35.96 bitrate=1910.1kbits/s speed=2.34x    frame= 3929 fps= 59 q=13.0 size=   36788kB time=00:02:37.12 bitrate=1918.0kbits/s speed=2.34x    frame= 3958 fps= 59 q=14.0 size=   37210kB time=00:02:38.28 bitrate=1925.9kbits/s speed=2.34x    frame= 3987 fps= 59 q=13.0 size=   37242kB time=00:02:39.44 bitrate=1913.5kbits/s speed=2.34x    frame= 4017 fps= 59 q=13.0 size=   37665kB time=00:02:40.64 bitrate=1920.8kbits/s speed=2.34x    frame= 4048 fps= 59 q=13.0 size=   37698kB time=00:02:41.88 bitrate=1907.7kbits/s speed=2.34x    frame= 4078 fps= 59 q=13.0 size=   38122kB time=00:02:43.08 bitrate=1915.0kbits/s speed=2.34x    frame= 4108 fps= 59 q=14.0 size=   38543kB time=00:02:44.28 bitrate=1922.0kbits/s speed=2.34x    frame= 4137 fps= 59 q=13.0 size=   38575kB time=00:02:45.44 bitrate=1910.1kbits/s speed=2.34x    frame= 4166 fps= 59 q=13.0 size=   38997kB time=00:02:46.60 bitrate=1917.5kbits/s speed=2.34x    frame= 4195 fps= 59 q=13.0 size=   39028kB time=00:02:47.76 bitrate=1905.8kbits/s speed=2.34x    frame= 4224 fps= 59 q=13.0 size=   39449kB time=00:02:48.92 bitrate=1913.1kbits/s speed=2.34x    frame= 4253 fps= 59 q=23.0 size=   39870kB time=00:02:50.08 bitrate=1920.4kbits/s speed=2.34x    frame= 4282 fps= 59 q=13.0 size=   39901kB time=00:02:51.24 bitrate=1908.8kbits/s speed=2.34x    frame= 4312 fps= 59 q=13.0 size=   40324kB time=00:02:52.44 bitrate=1915.6kbits/s speed=2.34x    frame= 4343 fps= 59 q=13.0 size=   40357kB time=00:02:53.68 bitrate=1903.5kbits/s speed=2.34x    frame= 4373 fps= 59 q=13.0 size=   40779kB time=00:02:54.88 bitrate=1910.2kbits/s speed=2.34x    frame= 4403 fps= 59 q=23.0 size=   41202kB time=00:02:56.08 bitrate=1916.9kbits/s speed=2.34x    frame= 4433 fps= 59 q=13.0 size=   41234kB time=00:02:57.28 bitrate=1905.4kbits/s speed=2.34x    frame= 4463 fps= 59 q=13.0 size=   41657kB time=00:02:58.48 bitrate=1912.0kbits/s speed=2.34x    frame= 4493 fps= 59 q=16.0 size=   41737kB time=00:02:59.68 bitrate=1902.9kbits/s speed=2.34x    frame= 4521 fps= 59 q=17.0 size=   42261kB time=00:03:00.80 bitrate=1914.8kbits/s speed=2.34x    frame= 4549 fps= 59 q=17.0 size=   42471kB time=00:03:01.92 bitrate=1912.5kbits/s speed=2.34x    frame= 4579 fps= 59 q=13.0 size=   42898kB time=00:03:03.12 bitrate=1919.1kbits/s speed=2.34x    frame= 4610 fps= 59 q=13.0 size=   43307kB time=00:03:04.36 bitrate=1924.3kbits/s speed=2.34x    frame= 4640 fps= 59 q=13.0 size=   43339kB time=00:03:05.56 bitrate=1913.3kbits/s speed=2.34x    frame= 4669 fps= 59 q=13.0 size=   43761kB time=00:03:06.72 bitrate=1919.9kbits/s speed=2.34x    frame= 4699 fps= 59 q=13.0 size=   43793kB time=00:03:07.92 bitrate=1909.1kbits/s speed=2.34x    frame= 4729 fps= 59 q=13.0 size=   44216kB time=00:03:09.12 bitrate=1915.3kbits/s speed=2.34x    
4876it [01:26, 58.23it/s]33.0 [01:23<13:25, 59.95it/s]frame= 4760 fps= 59 q=13.0 size=   44639kB time=00:03:10.36 bitrate=1921.0kbits/s speed=2.34x    frame= 4791 fps= 59 q=13.0 size=   44672kB time=00:03:11.60 bitrate=1910.0kbits/s speed=2.34x    frame= 4821 fps= 59 q=13.0 size=   45096kB time=00:03:12.80 bitrate=1916.1kbits/s speed=2.34x    frame= 4851 fps= 59 q=10.0 size=   45520kB time=00:03:14.00 bitrate=1922.2kbits/s speed=2.34x    
4906it [01:27, 58.31it/s]33.0 [01:25<13:45, 58.35it/s]frame= 4881 fps= 59 q=13.0 size=   45552kB time=00:03:15.20 bitrate=1911.7kbits/s speed=2.34x    
4936it [01:27, 58.96it/s]33.0 [01:26<13:48, 58.08it/s]frame= 4911 fps= 59 q=13.0 size=   45977kB time=00:03:16.40 bitrate=1917.7kbits/s speed=2.34x    
5088it [01:30, 60.42it/s]33.0 [01:26<13:33, 59.15it/s]frame= 4941 fps= 59 q=13.0 size=   46009kB time=00:03:17.60 bitrate=1907.4kbits/s speed=2.34x    frame= 4971 fps= 59 q=13.0 size=   46433kB time=00:03:18.80 bitrate=1913.4kbits/s speed=2.34x    frame= 5001 fps= 59 q=10.0 size=   46858kB time=00:03:20.00 bitrate=1919.3kbits/s speed=2.34x    frame= 5032 fps= 59 q=13.0 size=   46889kB time=00:03:21.24 bitrate=1908.8kbits/s speed=2.34x    frame= 5063 fps= 59 q=13.0 size=   47314kB time=00:03:22.48 bitrate=1914.2kbits/s speed=2.34x    
5545it [01:37, 57.73it/s]33.0 [01:29<13:13, 60.42it/s]frame= 5094 fps= 59 q=13.0 size=   47350kB time=00:03:23.72 bitrate=1904.0kbits/s speed=2.34x    frame= 5125 fps= 59 q=13.0 size=   47776kB time=00:03:24.96 bitrate=1909.5kbits/s speed=2.35x    frame= 5156 fps= 59 q=17.0 size=   48199kB time=00:03:26.20 bitrate=1914.9kbits/s speed=2.35x    frame= 5186 fps= 59 q=13.0 size=   48233kB time=00:03:27.40 bitrate=1905.1kbits/s speed=2.35x    frame= 5216 fps= 59 q=13.0 size=   48655kB time=00:03:28.60 bitrate=1910.8kbits/s speed=2.35x    frame= 5246 fps= 59 q=13.0 size=   48688kB time=00:03:29.80 bitrate=1901.1kbits/s speed=2.35x    frame= 5276 fps= 59 q=13.0 size=   49110kB time=00:03:31.00 bitrate=1906.7kbits/s speed=2.35x    frame= 5306 fps= 59 q=17.0 size=   49534kB time=00:03:32.20 bitrate=1912.3kbits/s speed=2.35x    frame= 5336 fps= 59 q=13.0 size=   49565kB time=00:03:33.40 bitrate=1902.7kbits/s speed=2.35x    frame= 5366 fps= 59 q=13.0 size=   49991kB time=00:03:34.60 bitrate=1908.3kbits/s speed=2.35x    frame= 5396 fps= 59 q=13.0 size=   50029kB time=00:03:35.80 bitrate=1899.1kbits/s speed=2.35x    frame= 5426 fps= 59 q=13.0 size=   50453kB time=00:03:37.00 bitrate=1904.7kbits/s speed=2.35x    frame= 5456 fps= 59 q=17.0 size=   50876kB time=00:03:38.20 bitrate=1910.1kbits/s speed=2.35x    frame= 5486 fps= 59 q=13.0 size=   50909kB time=00:03:39.40 bitrate=1900.9kbits/s speed=2.35x    frame= 5516 fps= 59 q=13.0 size=   51334kB time=00:03:40.60 bitrate=1906.3kbits/s speed=2.35x    
5719it [01:40, 57.58it/s]33.0 [01:37<13:42, 57.75it/s]frame= 5545 fps= 59 q=13.0 size=   51365kB time=00:03:41.76 bitrate=1897.5kbits/s speed=2.35x    frame= 5574 fps= 59 q=13.0 size=   51789kB time=00:03:42.92 bitrate=1903.2kbits/s speed=2.35x    frame= 5604 fps= 59 q=20.0 size=   52215kB time=00:03:44.12 bitrate=1908.6kbits/s speed=2.35x    frame= 5633 fps= 59 q=13.0 size=   52248kB time=00:03:45.28 bitrate=1899.9kbits/s speed=2.35x    frame= 5662 fps= 59 q=13.0 size=   52672kB time=00:03:46.44 bitrate=1905.5kbits/s speed=2.35x    frame= 5691 fps= 59 q=13.0 size=   52705kB time=00:03:47.60 bitrate=1897.0kbits/s speed=2.35x    
In [ ]: