Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
4791f22
🔖 Maintenance: Bumped version to `0.2.7`.
abhiTronix Jul 8, 2024
f70ad84
📝 Docs: expand CPU warning and fix WriteGear output param in transcod…
abhiTronix Apr 18, 2026
f74b8c0
📝 Docs: improve clarity and formatting in transcode-live-frames recipe
abhiTronix Apr 18, 2026
8082936
👷CI: upgrade actions and replace legacy mkdocstrings
abhiTronix Apr 18, 2026
b2fd7b7
🐛 Sourcer: fix param name in retrieve_metadata docstring
abhiTronix Apr 18, 2026
5fe0243
🐛 Docs: fix asset paths and typos in recipe/reference docs
abhiTronix Apr 18, 2026
a0e59db
📝 Docs: update mkdocs config with nav fixes and plugin improvements
abhiTronix Apr 18, 2026
8524daa
Merge pull request #59 from abhiTronix/57-bug-high-cpu-usage-when-cha…
abhiTronix Apr 18, 2026
3725e77
👷 CI: bump Python version to 3.11 in docs deployer workflow
abhiTronix Apr 18, 2026
b8b070f
👷 CI: update AppVeyor Python matrix to 3.10-3.13
abhiTronix Apr 18, 2026
3e46c8e
👷 CI update Python versions and Codecov uploader URLs
abhiTronix Apr 18, 2026
ed56434
👷 CI: upgrade Linux CI runner and action versions
abhiTronix Apr 18, 2026
39e4982
Merge pull request #60 from abhiTronix/58-idea-dropped-support-for-py…
abhiTronix Apr 18, 2026
6233905
🧪 Testing: improve frame count assertion error message
abhiTronix Apr 18, 2026
709ac06
👷 CI: update Linux CI runner to ubuntu-latest
abhiTronix Apr 18, 2026
8dd2016
👷 CI: remove wheel from CI pip install dependencies
abhiTronix Apr 18, 2026
7ad7ca2
👷 CI: remove pip from CI pip install dependencies
abhiTronix Apr 18, 2026
8797e1d
🔊CI: improve debug info in ffdecoder shape mismatch error
abhiTronix Apr 18, 2026
fb5bbd9
✅ Test: update remote video URL to sample_480p.avi in ffdecoder tests
abhiTronix Apr 18, 2026
bd17c7b
✅ Test: swap test params order and remove trailing comma
abhiTronix Apr 18, 2026
112d7b4
✅ Test: reorder source_playback parametrize cases and fix ffmpeg args
abhiTronix Apr 18, 2026
03b3ede
✅ Test: update remote video URL in ffdecoder tests
abhiTronix Apr 18, 2026
300e83e
✅ Test: fix ffmpeg path params in ffdecoder parametrize tests
abhiTronix Apr 18, 2026
c8e86f1
👷 CI: update pip dependencies in azure-pipelines.yml
abhiTronix Apr 18, 2026
c90db3c
✅ Test: handle None frame shape in source playback test
abhiTronix Apr 18, 2026
f3faa71
🧱 chore: migrate package config from setup.py to pyproject.toml
abhiTronix Apr 18, 2026
02b66ca
📝 docs: update minimum Python version to 3.10+ for v0.2.7
abhiTronix Apr 18, 2026
baa972a
🎨 chore: add ruff linting and formatting configuration
abhiTronix Apr 18, 2026
261bf08
🎨 refactor: add type annotations and modernize Python idioms
abhiTronix Apr 18, 2026
4257e0c
🎨 refactor(tests): add type annotations and modernize code style
abhiTronix Apr 18, 2026
189fd09
Merge pull request #63 from abhiTronix/62-idea-add-python-type-annota…
abhiTronix Apr 18, 2026
0101d24
📝 docs: restructure installation guide and add Poetry support
abhiTronix Apr 18, 2026
83c02da
📝 docs: add YUV420p performance mode tip to decode-video-files recipe
abhiTronix Apr 19, 2026
ebf920c
✅ test(ffdecoder): add YUV/NV ingest round-trip validation
abhiTronix Apr 19, 2026
b532c8a
✨ feat(ffdecoder): add -extract_luma fast-path for YUV/NV grayscale
abhiTronix Apr 19, 2026
119b9df
🚨 style: remove redundant "r" mode in open() call
abhiTronix Apr 19, 2026
fb5a148
✨ feat(ffdecoder): add async per-frame metadata extraction via showinfo
abhiTronix Apr 19, 2026
49cfe00
📝 docs: add keyframe decoding and VFR sync recipe links to README
abhiTronix Apr 19, 2026
a29c5f8
Merge pull request #64 from abhiTronix/15-idea-achieving-higher-fps-f…
abhiTronix Apr 19, 2026
968a7e1
🐛 fix: handle missing `--` separator in get_supported_demuxers
abhiTronix Apr 19, 2026
5bf896e
📝 docs: update minimum Python version requirement to 3.10+
abhiTronix Apr 19, 2026
b975159
📝 docs: improve clarity of hw-acceleration limitation section
abhiTronix Apr 19, 2026
5d0c504
📝 docs: update citation to v0.2.6 with new Zenodo DOI
abhiTronix Apr 19, 2026
e4d6b57
📦️ chore: remove readme from dynamic project metadata
abhiTronix Apr 19, 2026
0eabeaa
📝 docs: migrate linter from flake8/black to ruff, revamp contribution…
abhiTronix Apr 19, 2026
ce7cf2b
🔥docs: remove duplicate pymdownx.magiclink extension from mkdocs config
abhiTronix Apr 19, 2026
19a9c6a
👷 ci: remove sudo and use python -m pip in Linux CI workflow
abhiTronix Apr 19, 2026
d166ba5
♻️ chore: add readme to dynamic fields in pyproject.toml
abhiTronix Apr 19, 2026
88e1cbc
📝 docs: fix macOS capitalization and add OS icons to tabs
abhiTronix Apr 19, 2026
0778d57
💚 fix(ci): correct pip install commands in Linux CI workflow
abhiTronix Apr 19, 2026
e93be51
♻️ ci: use sudo for pip install and pytest in Linux workflow
abhiTronix Apr 19, 2026
3a98804
♻️ refactor: reorder imports and move regex to after imports
abhiTronix Apr 19, 2026
7ab00ef
🎨 style: reformat code for line length compliance
abhiTronix Apr 19, 2026
e82555d
✨ feat(ffdecoder,sourcer): add multi-input source list support
abhiTronix Apr 19, 2026
cfa9bff
📝 docs: add multi-input source configurations recipe and update refs
abhiTronix Apr 19, 2026
49543a2
👷 test: add multi-input source and decoder parameter tests
abhiTronix Apr 19, 2026
e5119ce
Merge pull request #65 from abhiTronix/40-question-multiple-rtsp-streams
abhiTronix Apr 19, 2026
0739e3b
📝 docs: reorder multi-input recipe in advanced nav section
abhiTronix Apr 20, 2026
a258911
📄 docs(changelog): add v0.2.7 release notes
abhiTronix Apr 20, 2026
943a756
📝 docs: update API reference for ffhelper and utils modules
abhiTronix Apr 20, 2026
ded20e1
🎉 docs: update announcement banner for v0.2.7 release
abhiTronix Apr 20, 2026
130b0c3
💡 style: add inline comment for input framerate assignment
abhiTronix Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions .github/workflows/CIlinux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ on:
jobs:
test:
name: CI Linux
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install APT Dependencies
Expand All @@ -60,22 +60,23 @@ jobs:
sudo chmod +x scripts/bash/prepare_dataset.sh
- name: Install Pip Dependencies
run: |
sudo pip install -U pip wheel numpy
sudo pip install -U numpy
sudo pip install -U .
sudo pip install -U opencv-python-headless
sudo pip install -U vidgear[core]
sudo pip install -U flake8 six codecov pytest pytest-cov
sudo pip install -U ruff six codecov pytest pytest-cov
if: success()
- name: Run prepare_dataset Bash script
run: bash scripts/bash/prepare_dataset.sh
shell: bash
- name: Run pytest and flake8
- name: Run pytest and ruff
run: |
timeout 1200 sudo python -m pytest -sv --cov=deffcode --cov-report=xml --cov-report term-missing tests/ || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; else echo "EXIT_CODE=$code" >>$GITHUB_ENV; fi
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
timeout 1200 sudo pytest -sv --cov=deffcode --cov-report=xml --cov-report term-missing tests/ || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; else echo "EXIT_CODE=$code" >>$GITHUB_ENV; fi
ruff check .
ruff format --check .
if: success()
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v5
with:
name: ${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
Expand Down
23 changes: 10 additions & 13 deletions .github/workflows/docs_deployer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ on:
types: [published]

env:
PYTHON_VERSION: 3.9
PYTHON_VERSION: 3.11
GIT_TOKEN: ${{ secrets.GIT_TOKEN }}
GIT_NAME: ${{ secrets.GIT_NAME }}
GIT_EMAIL: ${{ secrets.GIT_EMAIL }}
Expand All @@ -34,10 +34,10 @@ jobs:
if: github.event_name == 'release' && github.event.action == 'published'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: install_deffcode
Expand All @@ -48,8 +48,7 @@ jobs:
- name: install_docs_deps
run: |
pip install -U mkdocs mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python-legacy
pip install jinja2==3.0.*
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python
if: success()
- name: git configure
run: |
Expand Down Expand Up @@ -82,10 +81,10 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: install_deffcode
Expand All @@ -96,8 +95,7 @@ jobs:
- name: install_docs_deps
run: |
pip install -U mkdocs mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python-legacy
pip install jinja2==3.0.*
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python
if: success()
- name: git configure
run: |
Expand Down Expand Up @@ -131,11 +129,11 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
fetch-depth: 0
- run: git checkout dev
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: install_deffcode
Expand All @@ -146,8 +144,7 @@ jobs:
- name: install_docs_deps
run: |
pip install -U mkdocs mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python-legacy
pip install jinja2==3.0.*
pip install -U mkdocs-exclude mike mkdocstrings mkdocstrings-python
if: success()
- name: git configure
run: |
Expand Down
23 changes: 15 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,13 @@ Here are some key features that stand out:
- Curated list of well-documented recipes ranging from [**Basic**][basic-recipes] to [**Advanced**][advanced-recipes] skill levels.
- Hands down the easiest [**Index based Camera Device Capturing**][decoding-camera-devices-using-indexes], similar to OpenCV.
- Easy to code **Real-time [Simple][transcoding-live-simple-filtergraphs] & [Complex][transcoding-live-complex-filtergraphs] Filtergraphs**. _(Yes, You read it correctly "Real-time"!)_
- Native **[Multi-Input Source Configurations][multi-input-source-configurations]** support for decoding complex topologies.
- Lightning fast dedicated **GPU-Accelerated Video [Decoding][hardware-accelerated-video-decoding] & [Transcoding][hardware-accelerated-video-transcoding]**.
- Enables precise FFmpeg [**Key-frame Seeking**][extracting-key-frames-as-png-image] with pinpoint accuracy.
- Effortless [**Metadata Extraction**][extracting-video-metadata] from all streams available in the source.
- Maintains the standard easy to learn [**OpenCV-Python**](https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html) coding syntax.
- Out-of-the-box support for all prominent Computer Vision libraries.
- Cross-platform, runs on Python 3.7+, and easy to install.
- Cross-platform, runs on Python 3.10+, and easy to install.

<!--
- [x] Lossless Transcoding support with [WriteGear](https://abhitronix.github.io/deffcode/latest/gears/writegear/introduction/). #TODO
Expand Down Expand Up @@ -193,6 +194,7 @@ Once you have DeFFcode installed, checkout our Well-Documented **[Recipes 🍱][
- [CUDA-accelerated Video Transcoding with OpenCV's VideoWriter API][cuda-accelerated-video-transcoding-with-opencvs-videowriter-api]
- [CUDA-NVENC-accelerated Video Transcoding with WriteGear API][cuda-nvenc-accelerated-video-transcoding-with-writegear-api]
- [CUDA-NVENC-accelerated End-to-end Lossless Video Transcoding with WriteGear API][cuda-nvenc-accelerated-end-to-end-lossless-video-transcoding-with-writegear-api]
- [Multi-Input Source Configurations][multi-input-source-configurations]

</details>

Expand All @@ -201,6 +203,8 @@ Once you have DeFFcode installed, checkout our Well-Documented **[Recipes 🍱][

- [Added new attributes to metadata in FFdecoder API][added-new-attributes-to-metadata-in-ffdecoder-api]
- [Overriding source video metadata in FFdecoder API][overriding-source-video-metadata-in-ffdecoder-api]
- [Smart Keyframe-only decoding for heavy AI inference][smart-keyframe-only-decoding-for-heavy-ai-inference]
- [Variable-Frame-Rate (VFR) synchronization via pts_time][variable-frame-rate-vfr-synchronization-via-pts_time]

</details>

Expand Down Expand Up @@ -310,18 +314,18 @@ It is something I am doing with my own free time. But so much more needs to be d

Here is a Bibtex entry you can use to cite this project in a publication:

[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7523792.svg)](https://doi.org/10.5281/zenodo.7523792)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.12689394.svg)](https://doi.org/10.5281/zenodo.12689394)

```BibTeX
@software{deffcode,
author = {Abhishek Thakur},
title = {abhiTronix/deffcode: v0.2.5},
month = jan,
year = 2023,
title = {abhiTronix/deffcode: v0.2.6},
month = jul,
year = 2024,
publisher = {Zenodo},
version = {v0.2.5},
doi = {10.5281/zenodo.7523792},
url = {https://doi.org/10.5281/zenodo.7523792}
version = {v0.2.6},
doi = {10.5281/zenodo.12689394},
url = {https://doi.org/10.5281/zenodo.12689394},
}
```

Expand Down Expand Up @@ -431,6 +435,9 @@ Advanced Recipes
[cuda-nvenc-accelerated-end-to-end-lossless-video-transcoding-with-writegear-api]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/transcode-hw-acceleration/#cuda-nvenc-accelerated-end-to-end-lossless-video-transcoding-with-writegear-api
[added-new-attributes-to-metadata-in-ffdecoder-api]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/update-metadata/#added-new-attributes-to-metadata-in-ffdecoder-api
[overriding-source-video-metadata-in-ffdecoder-api]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/update-metadata/#overriding-source-video-metadata-in-ffdecoder-api
[smart-keyframe-only-decoding-for-heavy-ai-inference]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/extract-frame-metadata/#smart-keyframe-only-decoding-for-heavy-ai-inference
[variable-frame-rate-vfr-synchronization-via-pts_time]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/extract-frame-metadata/#variable-frame-rate-vfr-synchronization-via-pts_time
[multi-input-source-configurations]: https://abhitronix.github.io/deffcode/latest/recipes/advanced/multi_input/#multi-input-source-configurations

<!--
CI Apps URLs
Expand Down
20 changes: 10 additions & 10 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,6 @@ image: Visual Studio 2019

environment:
matrix:
- PYTHON: "C:\\Python38-x64"
PYTHON_VERSION: "3.8.x"
PYTHON_ARCH: "64"

- PYTHON: "C:\\Python39-x64"
PYTHON_VERSION: "3.9.x"
PYTHON_ARCH: "64"

- PYTHON: "C:\\Python310-x64"
PYTHON_VERSION: "3.10.x"
PYTHON_ARCH: "64"
Expand All @@ -34,7 +26,15 @@ environment:
PYTHON_VERSION: "3.11.x"
PYTHON_ARCH: "64"

build: off
- PYTHON: "C:\\Python312-x64"
PYTHON_VERSION: "3.12.x"
PYTHON_ARCH: "64"

- PYTHON: "C:\\Python313-x64"
PYTHON_VERSION: "3.13.x"
PYTHON_ARCH: "64"

build: false

version: '{branch}-{build}'

Expand Down Expand Up @@ -71,4 +71,4 @@ test_script:
- cmd: python -m pytest --verbose --capture=no --cov-report term-missing --cov=deffcode tests/

after_test:
- cmd: python -m codecov
- cmd: python -m codecov
22 changes: 11 additions & 11 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ pool:

strategy:
matrix:
Python38:
python.version: "3.8"
Python39:
python.version: "3.9"
Python310:
python.version: "3.10"
Python311:
python.version: "3.11"
Python312:
python.version: "3.12"
Python313:
python.version: "3.13"

steps:
- task: UsePythonVersion@0
Expand All @@ -68,26 +68,26 @@ steps:
displayName: 'Prepare dataset'

- script: |
python -m pip install --upgrade pip wheel numpy
pip install --upgrade vidgear[core] opencv-python-headless codecov pytest pytest-cov pytest-azurepipelines
python -m pip install --upgrade pip wheel numpy cython opencv-python
pip install --upgrade vidgear[core] codecov pytest pytest-cov pytest-azurepipelines
pip install --upgrade .
displayName: 'Install pip dependencies'

- script: |
timeout 1500 pytest -sv --cov=deffcode --cov-report=xml --cov-report=html --cov-report term-missing tests/ || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; else echo "##vso[task.setvariable variable=exit_code]$code"; fi
displayName: 'pytest'

- bash: |
echo "Exit Code was: $(exit_code)"
curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import
curl -Os https://uploader.codecov.io/latest/macos/codecov
curl -Os https://uploader.codecov.io/latest/macos/codecov.SHA256SUM
curl -Os https://uploader.codecov.io/latest/macos/codecov.SHA256SUM.sig
curl -Os https://cli.codecov.io/latest/macos/codecov
curl -Os https://cli.codecov.io/latest/macos/codecov.SHA256SUM
curl -Os https://cli.codecov.io/latest/macos/codecov.SHA256SUM.sig
gpgv codecov.SHA256SUM.sig codecov.SHA256SUM
shasum -a 256 -c codecov.SHA256SUM
chmod +x codecov
if [ "$(exit_code)" != "124" ]; then
./codecov -t $CODECOV_TOKEN -f coverage.xml -C $(Build.SourceVersion) -B $(Build.SourceBranch) -b $(Build.BuildNumber);
./codecov --verbose upload-process --fail-on-error -t $CODECOV_TOKEN -f coverage.xml -C $(Build.SourceVersion) -B $(Build.SourceBranch) -b $(Build.BuildNumber);
else
echo "Timeout test - Skipped Codecov!";
fi
Expand Down
2 changes: 1 addition & 1 deletion deffcode/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

from .ffdecoder import FFdecoder
from .sourcer import Sourcer
from .version import __version__
from .version import __version__
Loading
Loading