=======================================
syncstart(1) Version 1.1.1 \| syncstart
=======================================
SYNOPSIS
========
Command line help::
usage: syncstart [-h] [--version] [-v] [-b BEGIN] [-t TAKE] [-n] [-d] [-l LOWPASS] [-c] [-s] [-q] in1 in2
CLI interface to sync two media files using their audio or video streams.
ffmpeg needs to be available.
positional arguments:
in1 First media file to sync with second.
in2 Second media file to sync with first.
options:
-h, --help show this help message and exit
--version show program's version number and exit
-v, --video Compare video streams. (audio is default)
-b BEGIN, --begin BEGIN
Begin comparison X seconds into the inputs. (default: 0)
-t TAKE, --take TAKE Take X seconds of the inputs to look at. (default: 20)
-n, --normalize Normalizes audio/video values from each stream.
-d, --denoise Reduces audio/video noise in each stream.
-l LOWPASS, --lowpass LOWPASS
Audio option: Discards frequencies above the specified Hz, e.g., 300. 0 == off (default)
-c, --crop Video option: Crop to 4:3. Helpful when aspect ratios differ.
-s, --show Suppress "show diagrams", in case you are confident.
-q, --quiet Suppresses standard output except for the CSV result. Output will be:
file_to_advance,seconds_to_advance
DESCRIPTION
===========
The steps taken by ``syncstart``:
- get the maximum audio sample frequency or video frame rate among the inputs using ffprobe
- process and extract sample audio/video clips using ffmpeg with some default and optional filters
- read the two clips into a 1D array and apply optional z-score normalization
- compute offset via correlation using scipy ifft/fft
- print ffmpeg/ffprobe output or optionally quiet that
- show diagrams to allow MANUAL correction using ZOOM or optionally suppress that
- print result
MANUAL correction with ZOOM:
- at the checkbox on the top right check or uncheck to make the statement true
- turn on ZOOM with the magnifying glass on the bottom left
- draw a rectangle that stretches between two X that should coincide
(Y is not relevant but don't make it 0)
- read the final correction from the top right or in the final output
Requirements:
- ffmpeg and ffprobe installed
- Python3 with tk (tk is separate on Ubuntu: python3-tk)
References:
- https://ffmpeg.org/ffmpeg-all.html
- https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar
- https://dsp.stackexchange.com/questions/18846/map-time-difference-between-two-similar-videos
Within Python:
from syncstart import file_offset
INSTALLATION
============
To install for user only, do::
pip install --user syncstart
Or activate a virtualenv and do::
pip install syncstart
EXAMPLES
--------
::
# compute audio offset with default settings:
syncstart from_s10.m4a from_gopro.m4p
# compute audio offset using first 10 seconds with denoising, normalization and a 300 Hz lowpass filter:
syncstart video1.mp4 video2.mkv -t 10 -dnl 300
# compute video offset using first 20 seconds, don't show plots, only output final result:
syncstart video1.mp4 video2.mkv -vsq
# compute video offset using seconds 15 to 25 with denoising, cropping and normalization:
syncstart video1.mp4 video2.mkv -b 15 -t 10 -vdcn
License
-------
MIT
Raw data
{
"_id": null,
"home_page": "https://github.com/rpuntaie/syncstart",
"name": "syncstart",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "media file synchronization",
"author": "Roland Puntaier",
"author_email": "roland.puntaier@gmail.com",
"download_url": null,
"platform": null,
"description": "=======================================\nsyncstart(1) Version 1.1.1 \\| syncstart\n=======================================\n\nSYNOPSIS\n========\n\nCommand line help::\n\n usage: syncstart [-h] [--version] [-v] [-b BEGIN] [-t TAKE] [-n] [-d] [-l LOWPASS] [-c] [-s] [-q] in1 in2\n \n CLI interface to sync two media files using their audio or video streams.\n ffmpeg needs to be available.\n \n \n positional arguments:\n in1 First media file to sync with second.\n in2 Second media file to sync with first.\n \n options:\n -h, --help show this help message and exit\n --version show program's version number and exit\n -v, --video Compare video streams. (audio is default)\n -b BEGIN, --begin BEGIN\n Begin comparison X seconds into the inputs. (default: 0)\n -t TAKE, --take TAKE Take X seconds of the inputs to look at. (default: 20)\n -n, --normalize Normalizes audio/video values from each stream.\n -d, --denoise Reduces audio/video noise in each stream.\n -l LOWPASS, --lowpass LOWPASS\n Audio option: Discards frequencies above the specified Hz, e.g., 300. 0 == off (default)\n -c, --crop Video option: Crop to 4:3. Helpful when aspect ratios differ.\n -s, --show Suppress \"show diagrams\", in case you are confident.\n -q, --quiet Suppresses standard output except for the CSV result. Output will be:\n file_to_advance,seconds_to_advance\n\n\nDESCRIPTION\n===========\n\n\nThe steps taken by ``syncstart``:\n\n- get the maximum audio sample frequency or video frame rate among the inputs using ffprobe\n- process and extract sample audio/video clips using ffmpeg with some default and optional filters\n- read the two clips into a 1D array and apply optional z-score normalization\n- compute offset via correlation using scipy ifft/fft\n- print ffmpeg/ffprobe output or optionally quiet that\n- show diagrams to allow MANUAL correction using ZOOM or optionally suppress that\n- print result\n\nMANUAL correction with ZOOM:\n\n- at the checkbox on the top right check or uncheck to make the statement true\n- turn on ZOOM with the magnifying glass on the bottom left\n- draw a rectangle that stretches between two X that should coincide\n (Y is not relevant but don't make it 0)\n- read the final correction from the top right or in the final output\n\nRequirements:\n\n- ffmpeg and ffprobe installed\n- Python3 with tk (tk is separate on Ubuntu: python3-tk)\n\nReferences:\n\n- https://ffmpeg.org/ffmpeg-all.html\n- https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar\n- https://dsp.stackexchange.com/questions/18846/map-time-difference-between-two-similar-videos\n\nWithin Python:\n\nfrom syncstart import file_offset\n\n\n\n\nINSTALLATION\n============\n\nTo install for user only, do::\n\n pip install --user syncstart\n\nOr activate a virtualenv and do::\n\n pip install syncstart\n\nEXAMPLES\n--------\n\n::\n\n # compute audio offset with default settings:\n syncstart from_s10.m4a from_gopro.m4p\n\n # compute audio offset using first 10 seconds with denoising, normalization and a 300 Hz lowpass filter:\n syncstart video1.mp4 video2.mkv -t 10 -dnl 300\n\n # compute video offset using first 20 seconds, don't show plots, only output final result:\n syncstart video1.mp4 video2.mkv -vsq\n\n # compute video offset using seconds 15 to 25 with denoising, cropping and normalization:\n syncstart video1.mp4 video2.mkv -b 15 -t 10 -vdcn\n\nLicense\n-------\n\nMIT\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Calculate the cut needed at start to sync two media files.",
"version": "1.1.1",
"project_urls": {
"Homepage": "https://github.com/rpuntaie/syncstart"
},
"split_keywords": [
"media",
"file",
"synchronization"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1df7fe791b82221297680877e21a045936311591a3b05814256990d07c0eb07f",
"md5": "bfd53dea83cbc72ca007521be5d53714",
"sha256": "2f61dc03f572c12c3440d938883e5537400ba828a99447b2f66ad83c7479718f"
},
"downloads": -1,
"filename": "syncstart-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bfd53dea83cbc72ca007521be5d53714",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 10379,
"upload_time": "2024-05-04T13:35:57",
"upload_time_iso_8601": "2024-05-04T13:35:57.841331Z",
"url": "https://files.pythonhosted.org/packages/1d/f7/fe791b82221297680877e21a045936311591a3b05814256990d07c0eb07f/syncstart-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-04 13:35:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rpuntaie",
"github_project": "syncstart",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "syncstart"
}