Help us shape the future of Go! Take the 2026 Go Developer Survey

ffmpeg

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

README

FFmpeg Package

A cross-platform Go wrapper for the FFmpeg command line tool supporting Linux, macOS (Darwin), and Windows (reserved for future implementation).

Features

  • Cross-platform support: Automatically selects the appropriate implementation based on runtime OS
  • Multi-threaded processing: Configurable concurrency and thread limits
  • GPU acceleration: Platform-specific hardware acceleration support
  • Progress callbacks: Real-time progress monitoring
  • Batch processing: Convert/extract multiple files in batches
  • Process management: Timeout controls and process limits
  • Audio conversion: Any format to WAV/MP3 with streaming support
  • Video conversion: Any format to MP4 with streaming support
  • Audio extraction: Extract audio from video files
  • Keyframe extraction: Extract keyframes from video files

Platform Support

  • Linux: Standard FFmpeg with NVIDIA GPU detection
  • macOS: VideoToolbox hardware acceleration for Apple Silicon and Intel Macs
  • Windows: Reserved for future implementation

Requirements

  • FFmpeg 6+ installed on the system
  • FFprobe (usually comes with FFmpeg)

Installation

go get github.com/yaoapp/gou/ffmpeg

Basic Usage

package main

import (
    "context"
    "log"
    "time"

    "github.com/yaoapp/gou/ffmpeg"
)

func main() {
    // Create FFmpeg instance (automatically selects OS-specific implementation)
    ff := ffmpeg.NewFFmpeg()

    // Configure
    config := ffmpeg.Config{
        MaxProcesses:   4,
        MaxThreads:     8,
        EnableGPU:      true,
        MaxProcessTime: 5 * time.Minute,
        WorkDir:        "/tmp",
    }

    // Initialize
    err := ff.Init(config)
    if err != nil {
        log.Fatal(err)
    }
    defer ff.Close()

    ctx := context.Background()

    // Convert audio
    err = ff.Convert(ctx, ffmpeg.ConvertOptions{
        Input:  "input.mp3",
        Output: "output.wav",
        Format: "wav",
    })
    if err != nil {
        log.Printf("Convert failed: %v", err)
    }

    // Extract audio from video
    err = ff.Extract(ctx, ffmpeg.ExtractOptions{
        Input:  "video.mp4",
        Output: "audio.wav",
        Type:   "audio",
        Format: "wav",
    })
    if err != nil {
        log.Printf("Extract failed: %v", err)
    }
}

Advanced Usage

Progress Monitoring
err = ff.Convert(ctx, ffmpeg.ConvertOptions{
    Input:  "input.mp4",
    Output: "output.wav",
    Format: "wav",
    OnProgress: func(info ffmpeg.ProgressInfo) {
        fmt.Printf("Progress: %.2f%% - Speed: %.2fx\n",
            info.Progress*100, info.Speed)
    },
})
Batch Processing
jobs := []ffmpeg.ConvertOptions{
    {Input: "file1.mp3", Output: "file1.wav", Format: "wav"},
    {Input: "file2.mp3", Output: "file2.wav", Format: "wav"},
    {Input: "file3.mp3", Output: "file3.wav", Format: "wav"},
}

err = ff.ConvertBatch(ctx, jobs)
Custom Configuration
config := ffmpeg.Config{
    FFmpegPath:     "/usr/local/bin/ffmpeg",
    FFprobePath:    "/usr/local/bin/ffprobe",
    WorkDir:        "/tmp/ffmpeg_work",
    MaxProcesses:   2,
    MaxThreads:     4,
    MaxProcessTime: 10 * time.Minute,
    EnableGPU:      true,
    GPUIndex:       0,  // Use specific GPU (0-based index, -1 for auto)
}
Job Management
// Add a job to the queue
job := ffmpeg.BatchJob{
    Type: ffmpeg.JobTypeConvert,
    Options: ffmpeg.ConvertOptions{
        Input:  "input.mp4",
        Output: "output.wav",
        Format: "wav",
    },
}

jobID := ff.AddJob(job)

// Check job status
retrievedJob, err := ff.GetJob(jobID)
if err == nil {
    fmt.Printf("Job Status: %s\n", retrievedJob.Status)
}

// Cancel a job
err = ff.CancelJob(jobID)

System Information

info, err := ff.GetSystemInfo()
if err == nil {
    fmt.Printf("OS: %s\n", info.OS)
    fmt.Printf("FFmpeg: %s\n", info.FFmpeg)
    fmt.Printf("FFprobe: %s\n", info.FFprobe)
    fmt.Printf("GPUs: %v\n", info.GPUs)
}

Architecture

The package uses a factory pattern with runtime OS detection:

  • types.go: Interface definitions and common types
  • linux.go: Linux-specific implementation
  • darwin.go: macOS-specific implementation
  • windows.go: Windows placeholder implementation
  • ffmpeg.go: Factory function and package documentation

The NewFFmpeg() function automatically returns the appropriate implementation based on runtime.GOOS.

Error Handling

All methods return errors for proper error handling. Windows implementation currently returns "not yet supported" errors as placeholders.

License

This package is part of the YaoApp project and follows the same license terms.

Documentation

Overview

Package ffmpeg provides a cross-platform wrapper for the FFmpeg command line tool.

This package supports Linux, macOS (Darwin), and Windows (reserved for future implementation). The implementation uses runtime OS detection to provide platform-specific optimizations:

  • Linux: Uses standard FFmpeg with NVIDIA GPU support detection
  • macOS: Uses VideoToolbox hardware acceleration for Apple Silicon and Intel Macs
  • Windows: Reserved for future implementation

Features:

  • Multi-threaded processing with configurable concurrency
  • GPU acceleration support (platform-dependent)
  • Progress callback support
  • Batch processing capabilities
  • Process management with timeouts
  • Audio conversion (any format to WAV/MP3)
  • Video conversion (any format to MP4)
  • Audio extraction from video
  • Keyframe extraction from video
  • Streaming support

Usage:

ffmpeg := NewFFmpeg()
config := Config{
	MaxProcesses: 4,
	MaxThreads:   8,
	EnableGPU:    true,
}
err := ffmpeg.Init(config)
if err != nil {
	log.Fatal(err)
}
defer ffmpeg.Close()

// Convert audio
err = ffmpeg.Convert(ctx, ConvertOptions{
	Input:  "input.mp3",
	Output: "output.wav",
	Format: "wav",
})

// Extract audio from video
err = ffmpeg.Extract(ctx, ExtractOptions{
	Input:  "video.mp4",
	Output: "audio.wav",
	Type:   "audio",
	Format: "wav",
})

The package requires FFmpeg 6+ to be installed on the system.

Index

Constants

View Source
const (
	DefaultAudioFormat = "wav" // Default audio output format
	DefaultVideoFormat = "mp4" // Default video output format

	// Job types for batch processing
	JobTypeConvert = "convert" // Conversion job type
	JobTypeExtract = "extract" // Extraction job type

	// Job status constants
	JobStatusPending   = "pending"   // Job is waiting to be processed
	JobStatusRunning   = "running"   // Job is currently being processed
	JobStatusCompleted = "completed" // Job has completed successfully
	JobStatusFailed    = "failed"    // Job has failed with an error
)

Default formats for audio and video conversion

Variables

This section is empty.

Functions

func Inspect

func Inspect() map[string]*ToolStatus

Inspect checks the availability and version of ffmpeg and ffprobe. It performs a silent, non-fatal check suitable for system status reporting. This function does NOT use the lazy-initialized default instance; it performs its own independent detection.

func ProcessChunkAudio

func ProcessChunkAudio(process *process.Process) interface{}

ProcessChunkAudio ffmpeg.ChunkAudio Split audio file into chunks using silence detection.

Args:

  • inputPath string - Path to the audio file
  • config map[string]interface{} - Chunk configuration (optional)

Config fields:

  • max_duration float64 - Max chunk duration in seconds (default: 600 = 10 min)
  • max_size int64 - Max chunk size in bytes (default: 25000000 = 25MB)
  • silence_threshold float64 - Silence detection threshold in dB (default: -40)
  • output_dir string - Output directory for chunks (optional, default: auto temp dir)
  • format string - Output format (default: "mp3")

Returns: *ChunkResult - Chunk information including paths, durations, sizes

Note: If output_dir is not specified, files are created in OS temp directory. TS scripts without "system" fs access MUST provide output_dir explicitly. The caller is responsible for cleaning up the output directory when done.

Usage:

var result = Process("ffmpeg.ChunkAudio", "/path/to/audio.mp3", {"max_duration": 600})
// Returns: {"chunks": [...], "total_chunks": 3, "total_size": 12345, "output_dir": "/tmp/..."}

func ProcessConvert

func ProcessConvert(process *process.Process) interface{}

ProcessConvert ffmpeg.Convert Convert media file to another format.

Args:

  • inputPath string - Path to the input media file
  • config map[string]interface{} - Convert configuration

Config fields:

  • format string - Output format (e.g. "mp3", "wav", "mp4")
  • output_path string - Output file path (optional, default: temp file)
  • bitrate string - Audio bitrate (e.g. "128k") (optional)
  • sample_rate int - Audio sample rate (e.g. 16000) (optional)

Returns: string - Path to the output file

Note: If output_path is not specified, files are created in OS temp directory. TS scripts without "system" fs access MUST provide output_path explicitly.

Usage:

var outputPath = Process("ffmpeg.Convert", "/path/to/input.mp4", {"format": "mp3", "bitrate": "128k"})
// Returns: "/tmp/out.mp3"

func ProcessExtractAudio

func ProcessExtractAudio(process *process.Process) interface{}

ProcessExtractAudio ffmpeg.ExtractAudio Extract audio track from a video file.

Args:

  • inputPath string - Path to the video file
  • config map[string]interface{} - Extract configuration (optional)

Config fields:

  • format string - Output audio format (default: "mp3")
  • output_path string - Output file path (optional, default: temp file)
  • bitrate string - Audio bitrate (e.g. "128k") (optional)
  • sample_rate int - Audio sample rate (e.g. 16000) (optional)

Returns: string - Path to the extracted audio file

Note: If output_path is not specified, files are created in OS temp directory. TS scripts without "system" fs access MUST provide output_path explicitly.

Usage:

var audioPath = Process("ffmpeg.ExtractAudio", "/path/to/video.mp4", {"format": "mp3"})
// Returns: "/tmp/audio.mp3"

func ProcessInfo

func ProcessInfo(process *process.Process) interface{}

ProcessInfo ffmpeg.Info Get media file information including duration, dimensions, codecs, and file size.

Args:

  • filePath string - Path to the media file

Returns: *MediaInfo - Media file information

Usage:

var info = Process("ffmpeg.Info", "/path/to/video.mp4")
// Returns: {"duration": 120.5, "width": 1920, "height": 1080, "audio_codec": "aac", ...}

Types

type BatchJob

type BatchJob struct {
	ID      string      `json:"id"`      // Unique job identifier
	Type    string      `json:"type"`    // Job type (convert, extract)
	Options interface{} `json:"options"` // Job options (ConvertOptions or ExtractOptions)
	Status  string      `json:"status"`  // Current job status
	Error   string      `json:"error"`   // Error message if job failed
}

BatchJob represents a single job in the batch processing queue. It contains the job metadata and processing options.

type ChunkInfo

type ChunkInfo struct {
	Index     int     `json:"index"`      // Chunk index (0-based)
	StartTime float64 `json:"start_time"` // Start time in seconds
	EndTime   float64 `json:"end_time"`   // End time in seconds
	Duration  float64 `json:"duration"`   // Duration in seconds
	FilePath  string  `json:"file_path"`  // Path to the chunk file
	FileSize  int64   `json:"file_size"`  // File size in bytes
	IsSilence bool    `json:"is_silence"` // Whether this chunk was created due to silence detection
}

ChunkInfo contains information about a generated chunk

type ChunkOptions

type ChunkOptions struct {
	Input                  string            `json:"input"`                    // Input file path
	OutputDir              string            `json:"output_dir"`               // Output directory for chunks
	OutputPrefix           string            `json:"output_prefix"`            // Prefix for output chunk files
	ChunkDuration          float64           `json:"chunk_duration"`           // Chunk duration in seconds
	SilenceThreshold       float64           `json:"silence_threshold"`        // Silence threshold in dB (e.g., -40)
	SilenceMinLength       float64           `json:"silence_min_length"`       // Minimum silence length in seconds to trigger a split
	Format                 string            `json:"format"`                   // Output format (wav, mp3, mp4, etc.)
	OverlapDuration        float64           `json:"overlap_duration"`         // Overlap between chunks in seconds
	EnableSilenceDetection bool              `json:"enable_silence_detection"` // Whether to use silence detection for chunking
	MaxChunkSize           int64             `json:"max_chunk_size"`           // Maximum chunk size in bytes (0 means no limit)
	Options                map[string]string `json:"options"`                  // Additional FFmpeg command line options
	OnProgress             ProgressCallback  `json:"-"`                        // Progress callback function
}

ChunkOptions contains all the options for audio/video chunking operations. It specifies input file, output directory, and chunking parameters.

type ChunkResult

type ChunkResult struct {
	Chunks      []ChunkInfo `json:"chunks"`       // List of generated chunks
	TotalChunks int         `json:"total_chunks"` // Total number of chunks created
	TotalSize   int64       `json:"total_size"`   // Total size of all chunks in bytes
	OutputDir   string      `json:"output_dir"`   // Output directory path
}

ChunkResult contains the results of a chunking operation

type Config

type Config struct {
	// Command paths
	FFmpegPath  string `json:"ffmpeg_path"`  // Path to the FFmpeg executable
	FFprobePath string `json:"ffprobe_path"` // Path to the FFprobe executable

	// Working directory
	WorkDir string `json:"work_dir"` // Directory where FFmpeg operations are performed

	// Concurrency settings
	MaxProcesses int `json:"max_processes"` // Maximum number of concurrent FFmpeg processes
	MaxThreads   int `json:"max_threads"`   // Maximum number of threads per FFmpeg process

	// Process limits
	MaxProcessTime time.Duration `json:"max_process_time"` // Maximum execution time per process (0 means no limit)

	// GPU settings
	EnableGPU bool `json:"enable_gpu"` // Whether to enable GPU acceleration
	GPUIndex  int  `json:"gpu_index"`  // GPU index to use (-1 means auto detect)
}

Config represents the configuration settings for FFmpeg wrapper. It contains all the necessary settings for FFmpeg operation including paths, concurrency limits, GPU settings, and process management options.

type ConvertOptions

type ConvertOptions struct {
	Input      string            `json:"input"`   // Input file path
	Output     string            `json:"output"`  // Output file path
	Format     string            `json:"format"`  // Output format (wav, mp3, mp4, etc.)
	Quality    string            `json:"quality"` // Quality setting for the output
	Options    map[string]string `json:"options"` // Additional FFmpeg command line options
	Stream     bool              `json:"stream"`  // Whether to support streaming
	OnProgress ProgressCallback  `json:"-"`       // Progress callback function
}

ConvertOptions contains all the options for media conversion operations. It specifies input/output files, format settings, and processing options.

type DarwinFFmpeg

type DarwinFFmpeg struct {
	// contains filtered or unexported fields
}

DarwinFFmpeg represents the macOS-specific implementation of FFmpeg wrapper. It provides full FFmpeg functionality with VideoToolbox hardware acceleration support.

func (*DarwinFFmpeg) AddJob

func (f *DarwinFFmpeg) AddJob(job BatchJob) string

AddJob adds a new job to the processing queue and returns the job ID. Generates a unique job ID if not provided and sets initial status to pending.

func (*DarwinFFmpeg) CancelJob

func (f *DarwinFFmpeg) CancelJob(id string) error

CancelJob cancels a running or queued job by its ID. If the job is currently running, attempts to terminate the associated process.

func (*DarwinFFmpeg) ChunkAudio

func (f *DarwinFFmpeg) ChunkAudio(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkAudio chunks audio file with optional silence detection

func (*DarwinFFmpeg) ChunkVideo

func (f *DarwinFFmpeg) ChunkVideo(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkVideo chunks video file with optional silence detection

func (*DarwinFFmpeg) Close

func (f *DarwinFFmpeg) Close() error

Close cleans up resources and closes the FFmpeg wrapper. Terminates all active processes and performs cleanup operations.

func (*DarwinFFmpeg) Convert

func (f *DarwinFFmpeg) Convert(ctx context.Context, options ConvertOptions) error

Convert performs media file conversion using the specified options. Supports VideoToolbox hardware acceleration on macOS with Apple Silicon and Intel Macs.

func (*DarwinFFmpeg) ConvertBatch

func (f *DarwinFFmpeg) ConvertBatch(ctx context.Context, jobs []ConvertOptions) error

ConvertBatch performs batch conversion of multiple media files. Processes each conversion job sequentially with proper error handling.

func (*DarwinFFmpeg) Extract

func (f *DarwinFFmpeg) Extract(ctx context.Context, options ExtractOptions) error

Extract extracts media content (audio or keyframes) from input files. Supports audio extraction and keyframe extraction with configurable output formats.

func (*DarwinFFmpeg) ExtractBatch

func (f *DarwinFFmpeg) ExtractBatch(ctx context.Context, jobs []ExtractOptions) error

ExtractBatch performs batch extraction from multiple media files. Processes each extraction job sequentially with proper error handling.

func (*DarwinFFmpeg) GetActiveProcesses

func (f *DarwinFFmpeg) GetActiveProcesses() int

GetActiveProcesses returns the number of currently active FFmpeg processes. Used for process limit enforcement and monitoring.

func (*DarwinFFmpeg) GetConfig

func (f *DarwinFFmpeg) GetConfig() Config

GetConfig returns the current configuration of the macOS FFmpeg instance.

func (*DarwinFFmpeg) GetJob

func (f *DarwinFFmpeg) GetJob(id string) (BatchJob, error)

GetJob retrieves a job by its ID from the processing queue. Returns an error if the job with the specified ID is not found.

func (*DarwinFFmpeg) GetMediaInfo

func (f *DarwinFFmpeg) GetMediaInfo(ctx context.Context, inputFile string) (*MediaInfo, error)

GetMediaInfo gets comprehensive information about a media file

func (*DarwinFFmpeg) GetSystemInfo

func (f *DarwinFFmpeg) GetSystemInfo() (SystemInfo, error)

GetSystemInfo retrieves system information including OS, FFmpeg version, and available GPUs. Detects Apple Silicon GPUs and AMD/Intel graphics cards available on macOS.

func (*DarwinFFmpeg) Init

func (f *DarwinFFmpeg) Init(config Config) error

Init initializes the macOS FFmpeg wrapper with the provided configuration. Automatically detects common FFmpeg installation paths on macOS and sets default values.

func (*DarwinFFmpeg) KillAllProcesses

func (f *DarwinFFmpeg) KillAllProcesses() error

KillAllProcesses terminates all active FFmpeg processes. Forcefully kills all running processes and clears the process map.

func (*DarwinFFmpeg) ListJobs

func (f *DarwinFFmpeg) ListJobs() []BatchJob

ListJobs returns a list of all jobs in the processing queue. Provides a snapshot of all jobs regardless of their current status.

type ExtractOptions

type ExtractOptions struct {
	Input      string            `json:"input"`   // Input file path
	Output     string            `json:"output"`  // Output file path
	Type       string            `json:"type"`    // Type of extraction (audio, keyframe)
	Format     string            `json:"format"`  // Output format
	Options    map[string]string `json:"options"` // Additional FFmpeg options
	Stream     bool              `json:"stream"`  // Whether to support streaming
	OnProgress ProgressCallback  `json:"-"`       // Progress callback function
}

ExtractOptions contains all the options for media extraction operations. It specifies what type of content to extract and how to process it.

type FFmpeg

type FFmpeg interface {
	// Initialize and configuration
	Init(config Config) error           // Initialize the FFmpeg wrapper with configuration
	GetConfig() Config                  // Get the current configuration
	GetSystemInfo() (SystemInfo, error) // Get system information and capabilities

	// Media information
	GetMediaInfo(ctx context.Context, inputFile string) (*MediaInfo, error) // Get media file information

	// Single operations
	Convert(ctx context.Context, options ConvertOptions) error // Convert a single media file
	Extract(ctx context.Context, options ExtractOptions) error // Extract content from a single media file

	// Chunking operations
	ChunkAudio(ctx context.Context, options ChunkOptions) (*ChunkResult, error) // Chunk audio file with silence detection
	ChunkVideo(ctx context.Context, options ChunkOptions) (*ChunkResult, error) // Chunk video file with silence detection

	// Batch operations
	ConvertBatch(ctx context.Context, jobs []ConvertOptions) error // Convert multiple media files
	ExtractBatch(ctx context.Context, jobs []ExtractOptions) error // Extract from multiple media files

	// Job management
	AddJob(job BatchJob) string         // Add a job to the processing queue
	GetJob(id string) (BatchJob, error) // Get job status by ID
	CancelJob(id string) error          // Cancel a job by ID
	ListJobs() []BatchJob               // List all jobs in the queue

	// Process management
	GetActiveProcesses() int // Get the number of active processes
	KillAllProcesses() error // Kill all active processes

	// Cleanup
	Close() error // Close and cleanup resources
}

FFmpeg defines the interface for all FFmpeg wrapper implementations. It provides a unified API for media processing operations across different platforms.

func NewDarwinFFmpeg

func NewDarwinFFmpeg() FFmpeg

NewDarwinFFmpeg creates and returns a new macOS FFmpeg instance. Initializes the internal maps for process and job management.

func NewFFmpeg

func NewFFmpeg() FFmpeg

NewFFmpeg creates a new FFmpeg instance based on the current operating system

func NewLinuxFFmpeg

func NewLinuxFFmpeg() FFmpeg

NewLinuxFFmpeg creates and returns a new Linux FFmpeg instance. Initializes the internal maps for process and job management.

func NewWindowsFFmpeg

func NewWindowsFFmpeg() FFmpeg

NewWindowsFFmpeg creates and returns a new Windows FFmpeg instance.

type LinuxFFmpeg

type LinuxFFmpeg struct {
	// contains filtered or unexported fields
}

LinuxFFmpeg represents the Linux-specific implementation of FFmpeg wrapper. It provides full FFmpeg functionality with NVIDIA GPU support detection.

func (*LinuxFFmpeg) AddJob

func (f *LinuxFFmpeg) AddJob(job BatchJob) string

AddJob adds a new job to the processing queue and returns the job ID. Generates a unique job ID if not provided and sets initial status to pending.

func (*LinuxFFmpeg) CancelJob

func (f *LinuxFFmpeg) CancelJob(id string) error

CancelJob cancels a running or queued job by its ID. If the job is currently running, attempts to terminate the associated process.

func (*LinuxFFmpeg) ChunkAudio

func (f *LinuxFFmpeg) ChunkAudio(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkAudio chunks audio file with optional silence detection

func (*LinuxFFmpeg) ChunkVideo

func (f *LinuxFFmpeg) ChunkVideo(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkVideo chunks video file with optional silence detection

func (*LinuxFFmpeg) Close

func (f *LinuxFFmpeg) Close() error

Close cleans up resources and closes the FFmpeg wrapper. Terminates all active processes and performs cleanup operations.

func (*LinuxFFmpeg) Convert

func (f *LinuxFFmpeg) Convert(ctx context.Context, options ConvertOptions) error

Convert performs media file conversion using the specified options. Supports multi-threading, GPU acceleration, and progress monitoring.

func (*LinuxFFmpeg) ConvertBatch

func (f *LinuxFFmpeg) ConvertBatch(ctx context.Context, jobs []ConvertOptions) error

ConvertBatch performs batch conversion of multiple media files. Processes each conversion job sequentially with proper error handling.

func (*LinuxFFmpeg) Extract

func (f *LinuxFFmpeg) Extract(ctx context.Context, options ExtractOptions) error

Extract extracts media content (audio or keyframes) from input files. Supports audio extraction and keyframe extraction with configurable output formats.

func (*LinuxFFmpeg) ExtractBatch

func (f *LinuxFFmpeg) ExtractBatch(ctx context.Context, jobs []ExtractOptions) error

ExtractBatch performs batch extraction from multiple media files. Processes each extraction job sequentially with proper error handling.

func (*LinuxFFmpeg) GetActiveProcesses

func (f *LinuxFFmpeg) GetActiveProcesses() int

GetActiveProcesses returns the number of currently active FFmpeg processes. Used for process limit enforcement and monitoring.

func (*LinuxFFmpeg) GetConfig

func (f *LinuxFFmpeg) GetConfig() Config

GetConfig returns the current configuration of the Linux FFmpeg instance.

func (*LinuxFFmpeg) GetJob

func (f *LinuxFFmpeg) GetJob(id string) (BatchJob, error)

GetJob retrieves a job by its ID from the processing queue. Returns an error if the job with the specified ID is not found.

func (*LinuxFFmpeg) GetMediaInfo

func (f *LinuxFFmpeg) GetMediaInfo(ctx context.Context, inputFile string) (*MediaInfo, error)

GetMediaInfo gets comprehensive information about a media file

func (*LinuxFFmpeg) GetSystemInfo

func (f *LinuxFFmpeg) GetSystemInfo() (SystemInfo, error)

GetSystemInfo retrieves system information including OS, FFmpeg version, and available GPUs. Detects NVIDIA and AMD GPUs available on the Linux system.

func (*LinuxFFmpeg) Init

func (f *LinuxFFmpeg) Init(config Config) error

Init initializes the Linux FFmpeg wrapper with the provided configuration. Sets default values for unspecified configuration options and verifies command availability.

func (*LinuxFFmpeg) KillAllProcesses

func (f *LinuxFFmpeg) KillAllProcesses() error

KillAllProcesses terminates all active FFmpeg processes. Forcefully kills all running processes and clears the process map.

func (*LinuxFFmpeg) ListJobs

func (f *LinuxFFmpeg) ListJobs() []BatchJob

ListJobs returns a list of all jobs in the processing queue. Provides a snapshot of all jobs regardless of their current status.

type MediaInfo

type MediaInfo struct {
	Duration   float64 `json:"duration"`    // Duration in seconds
	Width      int     `json:"width"`       // Video width in pixels
	Height     int     `json:"height"`      // Video height in pixels
	Bitrate    string  `json:"bitrate"`     // Bitrate
	FrameRate  float64 `json:"frame_rate"`  // Frame rate (fps)
	AudioCodec string  `json:"audio_codec"` // Audio codec
	VideoCodec string  `json:"video_codec"` // Video codec
	FileSize   int64   `json:"file_size"`   // File size in bytes
}

MediaInfo contains information about a media file

type ProgressCallback

type ProgressCallback func(info ProgressInfo)

ProgressCallback defines the function signature for progress monitoring callbacks. It receives ProgressInfo updates during FFmpeg operations.

type ProgressInfo

type ProgressInfo struct {
	Duration    time.Duration `json:"duration"`     // Total duration of the media file
	CurrentTime time.Duration `json:"current_time"` // Current processing time position
	Progress    float64       `json:"progress"`     // Progress percentage (0.0 - 1.0)
	Speed       float64       `json:"speed"`        // Processing speed multiplier
	Bitrate     string        `json:"bitrate"`      // Current bitrate
	FPS         float64       `json:"fps"`          // Frames per second
}

ProgressInfo contains real-time progress information for FFmpeg operations. It provides detailed information about the current state of media processing.

type SilencePeriod

type SilencePeriod struct {
	Start float64 `json:"start"` // Start time in seconds
	End   float64 `json:"end"`   // End time in seconds
}

SilencePeriod represents a detected silence period in audio

type SystemInfo

type SystemInfo struct {
	OS      string   `json:"os"`              // Operating system name
	GPUs    []string `json:"gpus"`            // List of available GPUs
	FFmpeg  string   `json:"ffmpeg_version"`  // FFmpeg version string
	FFprobe string   `json:"ffprobe_version"` // FFprobe version string
}

SystemInfo contains information about the system and available FFmpeg tools. It provides details about the operating system, FFmpeg versions, and hardware capabilities.

type ToolStatus

type ToolStatus struct {
	Name      string `json:"name"`              // Tool name (e.g. "ffmpeg", "ffprobe")
	Available bool   `json:"available"`         // Whether the tool is available
	Path      string `json:"path,omitempty"`    // Resolved executable path
	Version   string `json:"version,omitempty"` // Version string (first line of -version output)
	EnvVar    string `json:"env_var,omitempty"` // Environment variable name for custom path
	Error     string `json:"error,omitempty"`   // Error message if not available
}

ToolStatus represents the availability status of an external tool. Used by Inspect() to report tool detection results.

type WindowsFFmpeg

type WindowsFFmpeg struct {
	// contains filtered or unexported fields
}

WindowsFFmpeg represents the Windows-specific implementation of FFmpeg wrapper.

func (*WindowsFFmpeg) AddJob

func (f *WindowsFFmpeg) AddJob(job BatchJob) string

AddJob adds a new job to the processing queue.

func (*WindowsFFmpeg) CancelJob

func (f *WindowsFFmpeg) CancelJob(id string) error

CancelJob cancels a job by ID.

func (*WindowsFFmpeg) ChunkAudio

func (f *WindowsFFmpeg) ChunkAudio(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkAudio chunks audio file with optional silence detection.

func (*WindowsFFmpeg) ChunkVideo

func (f *WindowsFFmpeg) ChunkVideo(ctx context.Context, options ChunkOptions) (*ChunkResult, error)

ChunkVideo chunks video file with optional silence detection.

func (*WindowsFFmpeg) Close

func (f *WindowsFFmpeg) Close() error

Close cleans up resources.

func (*WindowsFFmpeg) Convert

func (f *WindowsFFmpeg) Convert(ctx context.Context, options ConvertOptions) error

Convert performs media file conversion.

func (*WindowsFFmpeg) ConvertBatch

func (f *WindowsFFmpeg) ConvertBatch(ctx context.Context, jobs []ConvertOptions) error

ConvertBatch performs batch conversion.

func (*WindowsFFmpeg) Extract

func (f *WindowsFFmpeg) Extract(ctx context.Context, options ExtractOptions) error

Extract extracts media content from input files.

func (*WindowsFFmpeg) ExtractBatch

func (f *WindowsFFmpeg) ExtractBatch(ctx context.Context, jobs []ExtractOptions) error

ExtractBatch performs batch extraction.

func (*WindowsFFmpeg) GetActiveProcesses

func (f *WindowsFFmpeg) GetActiveProcesses() int

GetActiveProcesses returns the number of active processes.

func (*WindowsFFmpeg) GetConfig

func (f *WindowsFFmpeg) GetConfig() Config

GetConfig returns the current configuration.

func (*WindowsFFmpeg) GetJob

func (f *WindowsFFmpeg) GetJob(id string) (BatchJob, error)

GetJob retrieves a job by ID.

func (*WindowsFFmpeg) GetMediaInfo

func (f *WindowsFFmpeg) GetMediaInfo(ctx context.Context, inputFile string) (*MediaInfo, error)

GetMediaInfo gets comprehensive information about a media file.

func (*WindowsFFmpeg) GetSystemInfo

func (f *WindowsFFmpeg) GetSystemInfo() (SystemInfo, error)

GetSystemInfo retrieves system information including OS and FFmpeg version.

func (*WindowsFFmpeg) Init

func (f *WindowsFFmpeg) Init(config Config) error

Init initializes the Windows FFmpeg wrapper with the provided configuration.

func (*WindowsFFmpeg) KillAllProcesses

func (f *WindowsFFmpeg) KillAllProcesses() error

KillAllProcesses terminates all active processes.

func (*WindowsFFmpeg) ListJobs

func (f *WindowsFFmpeg) ListJobs() []BatchJob

ListJobs returns all jobs.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL