From 99754d97568bd2a66e73344b131e24f58622f943 Mon Sep 17 00:00:00 2001 From: lucemia Date: Tue, 9 Apr 2024 08:59:41 +0000 Subject: [PATCH] compile readme --- README.ipynb | 383 ++++++++++++++++++++++++++++++++++++ README.md | 32 ++- README_files/README_1_0.png | Bin 0 -> 4826 bytes README_files/README_1_0.svg | 45 +++++ README_files/README_3_0.png | Bin 0 -> 25460 bytes README_files/README_3_0.svg | 130 ++++++++++++ scripts/compile-readme.sh | 1 + 7 files changed, 586 insertions(+), 5 deletions(-) create mode 100644 README.ipynb create mode 100644 README_files/README_1_0.png create mode 100644 README_files/README_1_0.svg create mode 100644 README_files/README_3_0.png create mode 100644 README_files/README_3_0.svg create mode 100755 scripts/compile-readme.sh diff --git a/README.ipynb b/README.ipynb new file mode 100644 index 00000000..2c42cfa8 --- /dev/null +++ b/README.ipynb @@ -0,0 +1,383 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## typed-ffmpeg\n", + "\n", + "[![CI Package](https://github.com/livingbio/typed-ffmpeg/actions/workflows/ci-package.yml/badge.svg)](https://github.com/livingbio/typed-ffmpeg/actions?query=workflow%3Aci-package)\n", + "[![Documentation](https://img.shields.io/badge/docs-mkdocs%20material-blue.svg?style=flat)](https://livingbio.github.io/typed-ffmpeg/)\n", + "[![PyPI Version](https://img.shields.io/pypi/v/typed-ffmpeg.svg)](https://pypi.org/project/typed-ffmpeg/)\n", + "[![codecov](https://codecov.io/gh/livingbio/typed-ffmpeg/graph/badge.svg?token=B95PR629LP)](https://codecov.io/gh/livingbio/typed-ffmpeg)\n", + "\n", + "**typed-ffmpeg** offers a modern, Pythonic interface to FFmpeg, providing extensive support for complex filters with detailed typing and documentation. Inspired by `ffmpeg-python`, this package enhances functionality by addressing common limitations, such as lack of IDE integration and comprehensive typing, while also introducing new features like JSON serialization of filter graphs and automatic FFmpeg validation.\n", + "\n", + "---\n", + "\n", + "### Table of Contents\n", + "\n", + "- [Features](#features)\n", + "- [Installation](#installation)\n", + "- [Quick Usage](#quick-usage)\n", + "- [Documentation](https://livingbio.github.io/typed-ffmpeg/)\n", + "- [Acknowledgements](#acknowledgements)\n", + "\n", + "---\n", + "\n", + "## Features\n", + "\n", + "![typed-ffmpeg](https://raw.githubusercontent.com/livingbio/typed-ffmpeg/main/docs/media/autocomplete.png)\n", + "\n", + "\n", + "- **Zero Dependencies:** Built purely with the Python standard library, ensuring maximum compatibility and security.\n", + "- **User-Friendly:** Simplifies the construction of filter graphs with an intuitive Pythonic interface.\n", + "- **Comprehensive FFmpeg Filter Support:** Out-of-the-box support for most FFmpeg filters, with IDE auto-completion.\n", + "- **Integrated Documentation:** In-line docstrings provide immediate reference for filter usage, reducing the need to consult external documentation.\n", + "- **Robust Typing:** Offers static and dynamic type checking, enhancing code reliability and development experience.\n", + "- **Filter Graph Serialization:** Enables saving and reloading of filter graphs in JSON format for ease of use and repeatability.\n", + "- **Graph Visualization:** Leverages `graphviz` for visual representation, aiding in understanding and debugging.\n", + "- **Validation and Auto-correction:** Assists in identifying and fixing errors within filter graphs.\n", + "- **Input and Output Options Support:** Provide a more comprehensive interface for input and output options, including support for additional codecs and formats.\n", + "- **Partial Evaluation:** Enhance the flexibility of filter graphs by enabling partial evaluation, allowing for modular construction and reuse.\n", + "\n", + "### Planned Features\n", + "\n", + "Please note that the following features are under consideration or development for future releases:\n", + "\n", + "- **Extended FFmpeg Version Support:** While `typed-ffmpeg` is currently built with FFmpeg version 6.0 in mind, we are working to ensure compatibility across different FFmpeg versions. Feedback and issue reports are welcome to improve version support.\n", + "- **Additional Filter Support:** We aim to expand the range of FFmpeg filters supported by `typed-ffmpeg`. Continuous updates will be made to include more complex and varied filters.\n", + "\n", + "---\n", + "\n", + "## Installation\n", + "\n", + "To install `typed-ffmpeg`, simply use pip:\n", + "\n", + "```bash\n", + "pip install typed-ffmpeg\n", + "```\n", + "\n", + "Note: FFmpeg must be installed on your system.\n", + "\n", + "### Visualization Support\n", + "\n", + "To enable graph visualization features:\n", + "\n", + "```bash\n", + "pip install 'typed-ffmpeg[graph]'\n", + "```\n", + "\n", + "Note: This requires Graphviz to be installed on your system.\n", + "\n", + "---\n", + "\n", + "## Quick Usage\n", + "\n", + "Here's how to quickly start using `typed-ffmpeg`:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "25ed430750f863d6\n", + "\n", + "input.mp4\n", + "\n", + "\n", + "\n", + "6fce989decc232cd\n", + "\n", + "hflip\n", + "\n", + "\n", + "\n", + "25ed430750f863d6->6fce989decc232cd\n", + "\n", + "\n", + "* => 0\n", + "\n", + "\n", + "\n", + "32ff1b4d03cc4d4\n", + "\n", + "output.mp4\n", + "\n", + "\n", + "\n", + "6fce989decc232cd->32ff1b4d03cc4d4\n", + "\n", + "\n", + "0 => 0\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "OutputStream(node=OutputNode(kwargs=(), inputs=(VideoStream(node=FilterNode(kwargs=(), inputs=(AVStream(node=InputNode(kwargs=(), inputs=(), filename='input.mp4'), index=None),), name='hflip', input_typings=(,), output_typings=(,)), index=0),), filename='output.mp4'), index=None)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ffmpeg\n", + "\n", + "# Flip video horizontally and output\n", + "f = (\n", + " ffmpeg\n", + " .input(filename='input.mp4')\n", + " .hflip()\n", + " .output(filename='output.mp4')\n", + ")\n", + "f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a more complex example:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gaSpENvf0ZHUTIbu1iVdsbGxjg5FqkmrVq34+eefMRgM9OjRg5EjRxITE0OjRo2ues3ixYsZNmwYlo1XPUUusfgrGPbsxTozVcVsNtOpUyeOHz/Onj178PT0BKzFtzt16sTp06fJzs62tVelyMhIVqxYgdlspk+fPowYMYKYmBh8fa9QlbucatL4RERExLloho+IiDidW2+9lYSEBHJycvjhhx949NFHfzfZIzWXi4sLc+fOJT8/n1GjRpGXl8dvv/3GY489xq5du5g9e3a1JUNyc3OZPHkyOTk5fPPNN8TFxVUq2QM1a3wiIiLiXLRLl4iIOJ0lS5Y4OoQbxvLly+nSpQstW7assnv07NmTtLQ0Jk2aRGBgIGazmR49erB27Vp69+597Q7sZNOmTVXSb00Zn4iIiDgXJXxERETkug0aNAiABg0a0LVrV7p06UKXLl3o2rUrwcHBFd616mq6detGamqqXfqqiZx9fCIiIlL9lPARERGR63bixAm2bt1KZmYmGRkZ/Pjjj8yaNYuzZ8/i5uZG+/btMZlMBAcHExISwm233Ubjxo0dHbaIiIiI01PCR0RERK5b/fr1CQ0NJTQ01NZWVFTE/v37ycjIID09nfT0dGbNmmXb+crf379UEigkJISgoCBcXFRaUERERMRelPARERERu3JzcyMgIICAgACio6Nt7ceOHSuVBPr666/55z//SXFxMT4+PrRv375UEugPf/gDdevWdeBIRERERGovJXxERESkWvj6+paZDVRYWMiuXbtsSaD09HSSk5M5ffo0rq6u3HLLLaWSQN27d8ff39+Bo3BuixcvdnQITqFFixbcfvvtjg5D7OTgwYOkpaU5Oowbhp4f56Lnp/r06tWL5s2bl2pTwkdEREQcxsPDA5PJhMlkYuTIkbb23NzcUkmgBQsW8MorrwDWxNGlSaCQkBA6dOiAq6uro4bhNIYNG+boEJzC0KFDtVugE0lLS9OzUY30/DgXPT/VJykpidjY2FJtSviIiIhIjdO0aVOaNm1aaknY8ePH2b59uy0JtH79embNmkVBQQEeHh60bdvWlgAymUz84Q9/oEGDBg4cRe2UNBVi+zs6itorZoKjI5CqYtno6Aicn54f5zVro8XRITi1h7sbrtiuhI+IiIjUCkajscySsAsXLpCdnU16erptp7DJkydz9OhRwFog+tIk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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "25ed430750f863d6\n", + "\n", + "input.mp4\n", + "\n", + "\n", + "\n", + "635946df01b03434\n", + "\n", + "trim\n", + "\n", + "\n", + "\n", + "25ed430750f863d6->635946df01b03434\n", + "\n", + "\n", + "* => 0\n", + "\n", + "\n", + "\n", + "d695cb69537e6d9\n", + "\n", + "trim\n", + "\n", + "\n", + "\n", + "25ed430750f863d6->d695cb69537e6d9\n", + "\n", + "\n", + "* => 0\n", + "\n", + "\n", + "\n", + "5d67304cc19b04fd\n", + "\n", + "overlay.png\n", + "\n", + "\n", + "\n", + "48cecfc816831f2a\n", + "\n", + "hflip\n", + "\n", + "\n", + "\n", + "5d67304cc19b04fd->48cecfc816831f2a\n", + "\n", + "\n", + "* => 0\n", + "\n", + "\n", + "\n", + "65db7656991f446\n", + "\n", + "concat\n", + "\n", + "\n", + "\n", + "635946df01b03434->65db7656991f446\n", + "\n", + "\n", + "0 => 0\n", + "\n", + "\n", + "\n", + "d695cb69537e6d9->65db7656991f446\n", + "\n", + "\n", + "0 => 1\n", + "\n", + "\n", + "\n", + "1bf8065c3f485708\n", + "\n", + "overlay\n", + "\n", + "\n", + "\n", + "48cecfc816831f2a->1bf8065c3f485708\n", + "\n", + "\n", + "0 => 1\n", + "\n", + "\n", + "\n", + "65db7656991f446->1bf8065c3f485708\n", + "\n", + "\n", + "0 => 0\n", + "\n", + "\n", + "\n", + "729d505df6329c97\n", + "\n", + "drawbox\n", + "\n", + "\n", + "\n", + "1bf8065c3f485708->729d505df6329c97\n", + "\n", + "\n", + "0 => 0\n", + "\n", + "\n", + "\n", + "2ca1c9826f62c5d7\n", + "\n", + "out.mp4\n", + "\n", + "\n", + "\n", + "729d505df6329c97->2ca1c9826f62c5d7\n", + "\n", + "\n", + "0 => 0\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "OutputStream(node=OutputNode(kwargs=(), inputs=(VideoStream(node=FilterNode(kwargs=(('x', '50'), ('y', '50'), ('width', '120'), ('height', '120'), ('color', 'red'), ('thickness', '5')), inputs=(VideoStream(node=FilterNode(kwargs=(), inputs=(VideoStream(node=FilterNode(kwargs=(('n', 2),), inputs=(VideoStream(node=FilterNode(kwargs=(('start_frame', 10), ('end_frame', 20)), inputs=(AVStream(node=InputNode(kwargs=(), inputs=(), filename='input.mp4'), index=None),), name='trim', input_typings=(,), output_typings=(,)), index=0), VideoStream(node=FilterNode(kwargs=(('start_frame', 30), ('end_frame', 40)), inputs=(AVStream(node=InputNode(kwargs=(), inputs=(), filename='input.mp4'), index=None),), name='trim', input_typings=(,), output_typings=(,)), index=0)), name='concat', input_typings=(, ), output_typings=(,)), index=0), VideoStream(node=FilterNode(kwargs=(), inputs=(AVStream(node=InputNode(kwargs=(), inputs=(), filename='overlay.png'), index=None),), name='hflip', input_typings=(,), output_typings=(,)), index=0)), name='overlay', input_typings=(, ), output_typings=(,)), index=0),), name='drawbox', input_typings=(,), output_typings=(,)), index=0),), filename='out.mp4'), index=None)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ffmpeg.filters\n", + "import ffmpeg\n", + "\n", + "# Complex filter graph example\n", + "in_file = ffmpeg.input(\"input.mp4\")\n", + "overlay_file = ffmpeg.input(\"overlay.png\")\n", + "\n", + "f = (\n", + " ffmpeg.filters\n", + " .concat(\n", + " in_file.trim(start_frame=10, end_frame=20),\n", + " in_file.trim(start_frame=30, end_frame=40),\n", + " )\n", + " .video(0)\n", + " .overlay(overlay_file.hflip())\n", + " .drawbox(x=\"50\", y=\"50\", width=\"120\", height=\"120\", color=\"red\", thickness=\"5\")\n", + " .output(filename=\"out.mp4\")\n", + ")\n", + "f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See the [Usage](https://livingbio.github.io/typed-ffmpeg/usage/typed/) section in our documentation for more examples and detailed guides.\n", + "\n", + "\n", + "---\n", + "\n", + "## Acknowledgements\n", + "\n", + "This project was initially inspired by the capabilities of GPT-3, with the original concept focusing on using GPT-3 to generate an FFmpeg filter SDK directly from the FFmpeg documentation. However, during the development process, I encountered limitations with GPT-3's ability to fully automate this task.\n", + "\n", + "As a result, I shifted to traditional code generation methods to complete the SDK, ensuring a more robust and reliable tool. Despite this change in approach, both GitHub Copilot and GPT-3 were instrumental in accelerating the development process, providing valuable insights and saving significant time.\n", + "\n", + "I would also like to extend my gratitude to the `ffmpeg-python` project, which inspired this project significantly. The API style and design ideas from `ffmpeg-python` have been influential, and I have utilized these aspects to shape the development of our SDK.\n", + "\n", + "This project is dedicated to my son, Austin, on his seventh birthday (February 24, 2024), whose curiosity and zest for life continually inspire me.\n", + "\n", + "---\n", + "\n", + "Feel free to check the [Documentation](https://livingbio.github.io/typed-ffmpeg/) for detailed information and more advanced features.\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "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.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/README.md b/README.md index 8fd827c4..8720f276 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ Note: This requires Graphviz to be installed on your system. Here's how to quickly start using `typed-ffmpeg`: + + + ```python import ffmpeg @@ -80,14 +83,24 @@ f = ( .hflip() .output(filename='output.mp4') ) -f.run() +f ``` -![](https://raw.githubusercontent.com/livingbio/typed-ffmpeg/main/docs/media/quick-usage.png) + + + + +![svg](README_files/README_1_0.svg) + + + For a more complex example: + + ```python +import ffmpeg.filters import ffmpeg # Complex filter graph example @@ -95,22 +108,31 @@ in_file = ffmpeg.input("input.mp4") overlay_file = ffmpeg.input("overlay.png") f = ( - ffmpeg + ffmpeg.filters .concat( in_file.trim(start_frame=10, end_frame=20), in_file.trim(start_frame=30, end_frame=40), ) + .video(0) .overlay(overlay_file.hflip()) .drawbox(x="50", y="50", width="120", height="120", color="red", thickness="5") .output(filename="out.mp4") ) -f.run() +f ``` -![](https://raw.githubusercontent.com/livingbio/typed-ffmpeg/main/docs/media/quick-usage-complex.png) + + + + +![svg](README_files/README_3_0.svg) + + + See the [Usage](https://livingbio.github.io/typed-ffmpeg/usage/typed/) section in our documentation for more examples and detailed guides. + --- ## Acknowledgements diff --git a/README_files/README_1_0.png b/README_files/README_1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..46326e747e36c67502ead05cb2f83c5f5eafe950 GIT binary patch literal 4826 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 literal 0 HcmV?d00001 diff --git a/README_files/README_1_0.svg b/README_files/README_1_0.svg new file mode 100644 index 00000000..50f85469 --- /dev/null +++ b/README_files/README_1_0.svg @@ -0,0 +1,45 @@ + + + + + + +%3 + + + +25ed430750f863d6 + +input.mp4 + + + +6fce989decc232cd + +hflip + + + +25ed430750f863d6->6fce989decc232cd + + +* => 0 + + + +32ff1b4d03cc4d4 + +output.mp4 + + + +6fce989decc232cd->32ff1b4d03cc4d4 + + +0 => 0 + + + diff --git a/README_files/README_3_0.png b/README_files/README_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..dc98d31dabe73d6c21f1b42b70b3d18e89ba85dd GIT binary patch literal 25460 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 + + + + + +%3 + + + +25ed430750f863d6 + +input.mp4 + + + +635946df01b03434 + +trim + + + +25ed430750f863d6->635946df01b03434 + + +* => 0 + + + +d695cb69537e6d9 + +trim + + + +25ed430750f863d6->d695cb69537e6d9 + + +* => 0 + + + +5d67304cc19b04fd + +overlay.png + + + +48cecfc816831f2a + +hflip + + + +5d67304cc19b04fd->48cecfc816831f2a + + +* => 0 + + + +65db7656991f446 + +concat + + + +635946df01b03434->65db7656991f446 + + +0 => 0 + + + +d695cb69537e6d9->65db7656991f446 + + +0 => 1 + + + +1bf8065c3f485708 + +overlay + + + +48cecfc816831f2a->1bf8065c3f485708 + + +0 => 1 + + + +65db7656991f446->1bf8065c3f485708 + + +0 => 0 + + + +729d505df6329c97 + +drawbox + + + +1bf8065c3f485708->729d505df6329c97 + + +0 => 0 + + + +2ca1c9826f62c5d7 + +out.mp4 + + + +729d505df6329c97->2ca1c9826f62c5d7 + + +0 => 0 + + + diff --git a/scripts/compile-readme.sh b/scripts/compile-readme.sh new file mode 100755 index 00000000..fa833962 --- /dev/null +++ b/scripts/compile-readme.sh @@ -0,0 +1 @@ +jupyter nbconvert --to markdown README.ipynb