Skip to content

Instantly share code, notes, and snippets.

View royshil's full-sized avatar

Roy Shilkrot royshil

View GitHub Profile
royshil / read_and_convert_audio.cpp
Last active May 10, 2024 17:04
Read and convert an audio file to another format or sample rate with libav and libswresample in C++.
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/frame.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
#include <libswresample/swresample.h>
#include <iostream>
royshil /
Created February 6, 2024 14:12
Simple PyQt6 and OpenCV VideoCapture viewer using a worker thread
from PyQt6.QtCore import QObject, QThread, pyqtSignal, Qt, QTimer
from PyQt6.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QApplication
from PyQt6.QtGui import QImage, QPixmap
import cv2
import time
class CameraWorker(QObject):
frameCaptured = pyqtSignal(object) # Emit frame data
def __init__(self, camera_index=0):
royshil /
Created February 5, 2024 04:37
Simplest cyndlid NDI + OpenCV Python example
# pip install cyndilib opencv-python
import cv2
from cyndilib.wrapper.ndi_recv import RecvColorFormat, RecvBandwidth
from cyndilib.finder import Finder
from cyndilib.receiver import Receiver
from cyndilib.video_frame import VideoFrameSync
finder = Finder()
# Create a Receiver without a source
royshil /
Last active October 23, 2023 19:47
Export Tweet as Image (screenshot embed)
from selenium import webdriver
from import By
from import WebDriverWait
from import expected_conditions as EC
import logging
import os
import sys
import argparse
import urllib.parse
royshil /
Created June 21, 2023 02:20
Various flavors of video-to-GIF scripts
# Convert the video to a 480x GIF @ x2 speed
file1=$(basename -- "$1")
dir=$(dirname "$1")
/usr/local/bin/ffmpeg -hide_banner -loglevel panic -i "$1" -filter_complex "[0:v] scale=w='min(480,iw)':h=-1,fps=8,setpts=(1/2)*PTS, split [a][b]; [a] palettegen [p]; [b][p] paletteuse" -y "$dir/$file1.gif"
royshil /
Last active June 5, 2023 02:18
Quicrop! A minimal tool for cropping video with Tkinter and ffmpeg-python
import tkinter as tk
from tkVideoPlayer import TkinterVideo
from ffmpeg import FFmpeg, Progress
import os
import sys
import argparse
parser = argparse.ArgumentParser(description="Crop a video")
parser.add_argument("video", metavar="video", type=str, help="video file to crop")
args = parser.parse_args()
royshil /
Last active December 30, 2021 14:50
Google Cloud Speech JSON to .str converter script, with timestamp keeping and multiple files support
import os
import json
import sys
import argparse
import math
import subprocess
from tqdm import tqdm
royshil /
Last active April 28, 2024 17:12
A video concatenation tool based on FFMPEG with crossfade between the segments (with the `xfade` filter)
import argparse
import subprocess
import itertools
parser = argparse.ArgumentParser(description='Concatenate videos with FFMPEG, add "xfade" between segments.')
parser.add_argument('--segments_file', '-f', metavar='Segments file', type=str, nargs=1,
help='Segments text file for concatenating. e.g. "segments.txt"')
royshil /
Last active May 7, 2024 06:42
Warp an image to cylindrical coordinates for cylindrical panorama stitching, using Python OpenCV
import cv2
import numpy as np
def cylindricalWarp(img, K):
"""This function returns the cylindrical warp for a given image and intrinsics matrix K"""
h_,w_ = img.shape[:2]
# pixel coordinates
y_i, x_i = np.indices((h_,w_))
X = np.stack([x_i,y_i,np.ones_like(x_i)],axis=-1).reshape(h_*w_,3) # to homog
Kinv = np.linalg.inv(K)
royshil /
Last active January 21, 2020 08:01
A script to copy Tensorflow headers to build custom C++ applications
# inspired by a part of:
# Assumes Tensorflow libraries and were built with Bazel,
# and the ${TF_ROOT}/tensorflow/contrib/makefile/ script was executed.
set -o nounset
set -o errexit
set -o pipefail