FFmpeg-based media processing plugin for the cjm-plugin-system that provides audio extraction, segmentation, format conversion, and segment extraction.
Project description
cjm-media-plugin-ffmpeg
Install
pip install cjm_media_plugin_ffmpeg
Project Structure
nbs/
├── meta.ipynb # Metadata introspection for the FFmpeg media processing plugin used by `cjm-ctl` to generate the registration manifest.
└── plugin.ipynb # FFmpeg-based media processing plugin implementing the `MediaProcessingPlugin` interface.
Total: 2 notebooks
Module Dependencies
graph LR
meta[meta<br/>Metadata]
plugin[plugin<br/>FFmpeg Processing Plugin]
plugin --> meta
1 cross-module dependencies detected
CLI Reference
No CLI commands found in this project.
Module Overview
Detailed documentation for each module in the project:
Metadata (meta.ipynb)
Metadata introspection for the FFmpeg media processing plugin used by
cjm-ctlto generate the registration manifest.
Import
from cjm_media_plugin_ffmpeg.meta import (
get_plugin_metadata
)
Functions
def get_plugin_metadata() -> Dict[str, Any]: # Plugin metadata for manifest generation
"""Return metadata required to register this plugin with the PluginManager."""
cjm_data_dir = os.environ.get("CJM_DATA_DIR")
plugin_name = "cjm-media-plugin-ffmpeg"
if cjm_data_dir
"Return metadata required to register this plugin with the PluginManager."
FFmpeg Processing Plugin (plugin.ipynb)
FFmpeg-based media processing plugin implementing the
MediaProcessingPlugininterface.
Import
from cjm_media_plugin_ffmpeg.plugin import (
FFmpegPluginConfig,
FFmpegProcessingPlugin
)
Classes
@dataclass
class FFmpegPluginConfig:
"Configuration for the FFmpeg processing plugin."
output_dir: Optional[str] = field(...)
default_audio_format: str = field(...)
default_audio_bitrate: str = field(...)
prefer_stream_copy: bool = field(...)
class FFmpegProcessingPlugin:
def __init__(self):
"""Initialize the FFmpeg processing plugin."""
self.logger = logging.getLogger(f"{__name__}.{type(self).__name__}")
self.config: Optional[FFmpegPluginConfig] = None
"FFmpeg-based media processing plugin."
def __init__(self):
"""Initialize the FFmpeg processing plugin."""
self.logger = logging.getLogger(f"{__name__}.{type(self).__name__}")
self.config: Optional[FFmpegPluginConfig] = None
"Initialize the FFmpeg processing plugin."
def name(self) -> str: # Plugin identifier
return "ffmpeg"
@property
def version(self) -> str: # Plugin version
def version(self) -> str: # Plugin version
return "1.0.0"
@property
def supported_media_types(self) -> List[str]: # Supported input types
def supported_media_types(self) -> List[str]: # Supported input types
return ["audio", "video"]
def initialize(self, config: Optional[Any] = None) -> None
def initialize(self, config: Optional[Any] = None) -> None:
"""Initialize plugin with configuration."""
self.config = dict_to_config(FFmpegPluginConfig, config or {})
meta = get_plugin_metadata()
db_path = meta["db_path"]
self._data_dir = os.path.dirname(db_path)
self.storage = MediaProcessingStorage(db_path)
self.logger.info(f"Initialized FFmpeg plugin (format={self.config.default_audio_format})")
def get_config_schema(self) -> Dict[str, Any]: # JSON Schema for UI form generation
"Initialize plugin with configuration."
def get_config_schema(self) -> Dict[str, Any]: # JSON Schema for UI form generation
"""Return the JSON Schema for plugin configuration."""
return dataclass_to_jsonschema(FFmpegPluginConfig)
def get_current_config(self) -> Dict[str, Any]: # Current config as dict
"Return the JSON Schema for plugin configuration."
def get_current_config(self) -> Dict[str, Any]: # Current config as dict
"""Return the current configuration as a dictionary."""
return config_to_dict(self.config) if self.config else {}
def is_available(self) -> bool: # Whether ffmpeg is installed
"Return the current configuration as a dictionary."
def is_available(self) -> bool: # Whether ffmpeg is installed
"""Check if ffmpeg is available on this system."""
return FFMPEG_AVAILABLE
def cleanup(self) -> None
"Check if ffmpeg is available on this system."
def cleanup(self) -> None:
"""Clean up plugin resources."""
self.logger.info("FFmpeg plugin cleaned up")
# ------------------------------------------------------------------
# Helpers
# ------------------------------------------------------------------
def _get_output_dir(self,
output_dir: Optional[str] = None, # Explicit output dir override
subdirectory: Optional[str] = None, # Subdirectory within output dir
) -> str: # Resolved output directory path
"Clean up plugin resources."
def execute(self,
action: str = "get_info", # Action to perform
**kwargs
) -> Dict[str, Any]: # Action result
"Dispatch to the appropriate action handler."
def get_info(self,
file_path: Union[str, Path], # Path to media file
) -> MediaMetadata: # Probed metadata
"Get metadata for a media file via ffprobe."
def convert(self,
input_path: Union[str, Path], # Source file path
output_format: str, # Target format (e.g. 'mp3', 'wav')
**kwargs
) -> str: # Output file path
"Convert media to a different format."
def extract_segment(self,
input_path: Union[str, Path], # Source audio file
start: float, # Start time in seconds
end: float, # End time in seconds
output_path: Optional[str] = None, # Custom output path
) -> str: # Output file path
"Extract a temporal segment from a media file."
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cjm_media_plugin_ffmpeg-0.0.1.tar.gz.
File metadata
- Download URL: cjm_media_plugin_ffmpeg-0.0.1.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e7b887384295f9610b497863272ef8ec9e8c0f5307e75036eac929f41c3fd47
|
|
| MD5 |
a4762b44c5556ced2f099e203c0bdc8f
|
|
| BLAKE2b-256 |
2670b788f08acbf1041c7ae2e6438da74e7720d1b765578e34143f02fbc1778c
|
File details
Details for the file cjm_media_plugin_ffmpeg-0.0.1-py3-none-any.whl.
File metadata
- Download URL: cjm_media_plugin_ffmpeg-0.0.1-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d07256f59b47803e74d4dd975b191bba1c8baaa741367df4ec26db1aad1d2b9
|
|
| MD5 |
1856e1f4290574e38bd6d9ef96f88fe2
|
|
| BLAKE2b-256 |
107c2be9acc0243c00932711918a1e0886d1cf3b9b88b1756f4f408f19c88693
|