AVBlocks Python SDK
Before using any AVBlocks functionality, initialize the library:
from avblocks import Library Library.initialize() # Set license information. AVBlocks runs in demo mode if license is not set. # Library.set_license("<license-string>") # Your code here Library.shutdown()A MediaSocket represents an input or output media endpoint. It describes:
- The media file location (
fileproperty) - The stream type (
stream_typeproperty) - One or more media pins (
pinscollection)
from avblocks import MediaSocket, StreamType socket = MediaSocket() socket.file = "input.mp4" socket.stream_type = StreamType.UncompressedVideoA MediaPin represents a single media stream (audio or video) within a MediaSocket. Each pin contains:
- Stream information (
stream_infoproperty) - describes the format and characteristics of the stream - Stream configuration for encoding/decoding
Key Properties:
stream_info- Contains detailed format information (VideoStreamInfo or AudioStreamInfo)
Example for video input:
from avblocks import MediaPin, VideoStreamInfo, StreamType, ColorFormat, ScanType pin = MediaPin() vsi = VideoStreamInfo() pin.stream_info = vsi vsi.stream_type = StreamType.UncompressedVideo vsi.frame_width = 176 vsi.frame_height = 144 vsi.color_format = ColorFormat.YUV420 vsi.frame_rate = 30.0 vsi.scan_type = ScanType.Progressive socket.pins.add(pin)MediaInfo is used to extract metadata and stream information from media files without processing the content.
Key Features:
- Extract audio/video stream details
- Read file metadata (title, artist, album, etc.)
- No transcoding required
from avblocks import MediaInfo info = MediaInfo() info.inputs[0].file = "input.mp4" if info.open(): # Access stream information for pin in info.outputs[0].pins: stream_info = pin.stream_info # Process stream info # Access metadata for attr in info.outputs[0].metadata: print(f"{attr.name}: {attr.value}") info.close() else: # Handle error error = info.errorfrom avblocks import MediaInfo, MediaType info = MediaInfo() info.inputs[0].file = input_file if info.open(): for pin in info.outputs[0].pins: si = pin.stream_info if si.media_type == MediaType.Video: vsi = si # VideoStreamInfo print(f"Video: {vsi.frame_width}x{vsi.frame_height}") print(f" Frame Rate: {vsi.frame_rate}") print(f" Color Format: {vsi.color_format}") elif si.media_type == MediaType.Audio: asi = si # AudioStreamInfo print(f"Audio: {asi.sample_rate}Hz, {asi.channels} channels") print(f" Bits Per Sample: {asi.bits_per_sample}") info.close()from avblocks import MediaInfo info = MediaInfo() info.inputs[0].file = input_file if info.open(): for attr in info.outputs[0].metadata: print(f"{attr.name}: {attr.value}") info.close()from avblocks import (MediaSocket, MediaPin, VideoStreamInfo, Transcoder, StreamType, ColorFormat, ScanType) # Create input socket for raw YUV in_vsi = VideoStreamInfo() in_vsi.stream_type = StreamType.UncompressedVideo in_vsi.scan_type = ScanType.Progressive in_vsi.frame_width = 176 in_vsi.frame_height = 144 in_vsi.color_format = ColorFormat.YUV420 in_vsi.frame_rate = 30.0 in_pin = MediaPin() in_pin.stream_info = in_vsi in_socket = MediaSocket() in_socket.stream_type = StreamType.UncompressedVideo in_socket.file = "input.yuv" in_socket.pins.add(in_pin) # Create output socket for H.264 out_vsi = VideoStreamInfo() out_vsi.stream_type = StreamType.H264 out_vsi.frame_width = 176 out_vsi.frame_height = 144 out_vsi.frame_rate = 30.0 out_pin = MediaPin() out_pin.stream_info = out_vsi out_socket = MediaSocket() out_socket.stream_type = StreamType.H264 out_socket.file = "output.h264" out_socket.pins.add(out_pin) # Encode transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if transcoder.open(): if transcoder.run(): print("Encoding successful") transcoder.close()from avblocks import MediaSocket, Transcoder, Preset in_socket = MediaSocket() in_socket.file = "input.yuv" # ... configure input out_socket = MediaSocket() out_socket.file = "output.mp4" out_socket.preset = Preset.Video.Generic.MP4.Base_H264_AAC transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import (MediaSocket, MediaPin, VideoStreamInfo, Transcoder, StreamType, ColorFormat) # Create input socket for H.264 in_socket = MediaSocket() in_socket.stream_type = StreamType.H264 in_socket.file = "input.h264" # Create output socket for raw YUV out_vsi = VideoStreamInfo() out_vsi.stream_type = StreamType.UncompressedVideo out_vsi.color_format = ColorFormat.YUV420 out_pin = MediaPin() out_pin.stream_info = out_vsi out_socket = MediaSocket() out_socket.stream_type = StreamType.UncompressedVideo out_socket.file = "output.yuv" out_socket.pins.add(out_pin) # Decode transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import MediaSocket, Transcoder, StreamType, StreamSubType in_socket = MediaSocket() in_socket.file = "input.wav" out_socket = MediaSocket() out_socket.stream_type = StreamType.Aac out_socket.stream_sub_type = StreamSubType.AacAdts out_socket.file = "output.aac" transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import MediaSocket, Transcoder, StreamType in_socket = MediaSocket() in_socket.file = "input.wav" out_socket = MediaSocket() out_socket.file = "output.mp3" out_socket.stream_type = StreamType.Mp3 transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import MediaSocket, Transcoder, StreamType # Extract video and audio streams from MP4 # Input in_socket = MediaSocket() in_socket.file = "input.mp4" # Output for video stream video_out = MediaSocket() video_out.stream_type = StreamType.H264 video_out.file = "video.mp4" # Output for audio stream audio_out = MediaSocket() audio_out.file = "audio.mp4" audio_out.stream_type = StreamType.Aac transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(video_out) transcoder.outputs.add(audio_out) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import MediaSocket, Transcoder # Combine separate audio and video files into MP4 container # Video input video_in = MediaSocket() video_in.file = "video.h264.mp4" # Audio input audio_in = MediaSocket() audio_in.file = "audio.aac.mp4" # Combined output out_socket = MediaSocket() out_socket.file = "output.mp4" transcoder = Transcoder() transcoder.inputs.add(video_in) transcoder.inputs.add(audio_in) transcoder.outputs.add(out_socket) if transcoder.open(): transcoder.run() transcoder.close()from avblocks import Transcoder, ErrorInfo def print_error(action: str, error: ErrorInfo): if error: print(f"Error: {action}") print(f" Facility: {error.facility}") print(f" Code: {error.code}") print(f" Message: {error.message}") print(f" Hint: {error.hint}") transcoder = Transcoder() transcoder.inputs.add(in_socket) transcoder.outputs.add(out_socket) if not transcoder.open(): print_error("Open Transcoder", transcoder.error) return False if not transcoder.run(): print_error("Run Transcoder", transcoder.error) transcoder.close() return False transcoder.close()See samples/README.md for a complete list of working examples including:
- Media Info: Extract stream information and metadata
- Encoding: AAC, MP3, H.264/AVC, with presets
- Decoding: H.264 to YUV
- Container Operations: Demux/Mux MP4 files
- Misc: Re-encoding, slideshow generation
macOS:
source configure.shLinux:
source configure.shWindows:
. .\configure.ps1See README in the samples subdirectory.
See License Options for details.
We offer discounts for:
- Competitive product
- Startup
- Educational institution
- Open source project