Escorp.Atom.Media 0.2.0

dotnet add package Escorp.Atom.Media --version 0.2.0
                    
NuGet\Install-Package Escorp.Atom.Media -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Escorp.Atom.Media" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Escorp.Atom.Media" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Escorp.Atom.Media" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Escorp.Atom.Media --version 0.2.0
                    
#r "nuget: Escorp.Atom.Media, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Escorp.Atom.Media@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Escorp.Atom.Media&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Escorp.Atom.Media&version=0.2.0
                    
Install as a Cake Tool

Atom.Media

Модуль для работы с мультимедиа контентом на основе FFmpeg.

Обзор

Atom.Media предоставляет высокоуровневый API для работы с видео и аудио потоками, включая:

  • Декодирование и кодирование видео/аудио потоков
  • Транскодирование между различными форматами (MP4, AVI, MKV, MOV, FLV, WEBM и др.)
  • Потоковая обработка с поддержкой V4L2 устройств (Linux)
  • Применение фильтров (масштабирование, обрезка, поворот, zoom и др.)
  • Генерация белого шума для тестирования

Требования

  • FFmpeg библиотеки (libavcodec, libavformat, libavutil, libavfilter, libswscale, libavdevice)
  • .NET 10.0+

Установка

dotnet add package Escorp.Atom.Media

Быстрый старт

Конвертация видео

using Atom.Media;
using System.Drawing;

// Конвертация MP4 в AVI
using var stream = new VideoStream("input.mp4", "output.avi");
stream.WaitForEnding();

Конвертация с указанием разрешения

using var stream = new VideoStream("input.mp4", "output.mkv", new Size(1920, 1080));
stream.WaitForEnding();

Запись в V4L2 устройство (Linux)

using var stream = new VideoStream("input.mp4", "/dev/video2");
stream.IsMuted = true; // Отключить аудио для V4L2
stream.WaitForEnding();

Асинхронная обработка

using var stream = new VideoStream("input.mp4", "output.mp4");
await stream.WaitForEndingAsync(TimeSpan.FromMinutes(5));

Применение фильтров

using Atom.Media;
using Atom.Media.Filters.Video;

using var stream = new VideoStream("input.mp4", "output.mp4");
stream.Filters = [
    new ZoomPanFilter(1.0f, 1.5f, TimeSpan.FromSeconds(5)), // Zoom эффект
    new CropFilter { Width = "iw-100", Height = "ih-100" }, // Обрезка
    new TransposeFilter(1) // Поворот на 90°
];
stream.WaitForEnding();

Генерация белого шума

// Генерация 10-секундного видео с белым шумом
using var stream = new VideoStream(string.Empty, "noise.mp4", new Size(1280, 720))
{
    FrameRate = 30
};
stream.WaitForEnding(TimeSpan.FromSeconds(10));

API Reference

VideoStream

Основной класс для работы с медиа потоками.

Свойство Тип Описание
Input string Путь к входному файлу или URL
Output string Путь к выходному файлу или устройству
Resolution Size Разрешение выходного видео
FrameRate int Частота кадров (по умолчанию 25)
AudioSampleRate int Частота аудиосемплов (по умолчанию 44100)
AudioChannels int Количество аудиоканалов (по умолчанию 2)
IsLooped bool Зацикленное воспроизведение
IsMuted bool Отключение аудио
ScaleMode ScaleMode Режим масштабирования
Filters IEnumerable<IFilter> Применяемые фильтры
IsActive bool Состояние активности записи
Метод Описание
WaitForEnding() Ожидание завершения обработки
WaitForEnding(TimeSpan) Ожидание с таймаутом
WaitForEndingAsync() Асинхронное ожидание
WaitForEndingAsync(TimeSpan, CancellationToken) Асинхронное ожидание с таймаутом и отменой
Seek(long, SeekOrigin) Перемотка потока
Close() Закрытие потока

ScaleMode

Режимы масштабирования видео.

Значение Описание
Stretch Растягивание под выходное разрешение
Fit Вписывание с сохранением пропорций (чёрные полосы)
Cover Заполнение с обрезкой лишних частей

Фильтры

ZoomPanFilter

Анимированный zoom-эффект.

new ZoomPanFilter(
    from: 1.0f,    // Начальный масштаб
    to: 1.5f,      // Конечный масштаб
    duration: TimeSpan.FromSeconds(5)
)
{
    X = "iw/2-(iw/zoom/2)", // Центрирование по X
    Y = "ih/2-(ih/zoom/2)"  // Центрирование по Y
}
CropFilter

Обрезка видео с опциональной анимацией.

new CropFilter
{
    Width = "iw-100",
    Height = "ih-100",
    X = "50", // Смещение по X
    Y = "50"  // Смещение по Y
}
TransposeFilter

Поворот видео.

new TransposeFilter(1) // 0=90° CCW, 1=90° CW, 2=90° CCW+VFlip, 3=90° CW+VFlip

Поддерживаемые форматы

Контейнеры

  • MP4, AVI, MKV, MOV, FLV, WEBM, WMV, MPEG

Видеокодеки

  • H.264, H.265/HEVC, VP8, VP9, MPEG-1/2/4, MJPEG, Theora, и другие

Аудиокодеки

  • AAC, MP3, Vorbis, Opus, FLAC, AC3, и другие

Изображения

  • JPEG, PNG, WEBP, BMP, GIF

Архитектура

Atom.Media/
├── VideoStream.cs          # Основной класс потока
├── VideoStreamException.cs # Исключения
├── MediaCodec.cs           # Перечисление кодеков
├── PixelFormat.cs          # Форматы пикселей
├── SampleFormat.cs         # Форматы аудиосемплов
├── ScaleMode.cs            # Режимы масштабирования
├── WhiteNoiseGenerator.cs  # Генератор шума
├── Extensions.cs           # Методы расширения
├── Filters/                # Система фильтров
│   ├── IFilter.cs          # Интерфейс фильтра
│   ├── Filter.cs           # Базовый класс
│   ├── IVideoFilter.cs     # Интерфейс видеофильтра
│   ├── VideoFilter.cs      # Базовый видеофильтр
│   ├── FilterEvalMode.cs   # Режимы оценки
│   └── Video/              # Реализации
│       ├── ZoomPanFilter.cs
│       ├── CropFilter.cs
│       └── TransposeFilter.cs
└── FFmpeg/                 # P/Invoke обёртки
    ├── Codec.cs            # libavcodec
    ├── Format.cs           # libavformat
    ├── Filter.cs           # libavfilter
    ├── SwScale.cs          # libswscale
    ├── Device.cs           # libavdevice
    ├── Util.cs             # libavutil
    └── Структуры...

Потокобезопасность

VideoStream использует внутренний Locker для синхронизации доступа к FFmpeg контекстам. Однако рекомендуется:

  • Не обращаться к свойствам потока из нескольких потоков одновременно
  • Использовать один экземпляр VideoStream на один медиа поток
  • Корректно освобождать ресурсы через Dispose() или using

Ограничения

  • V4L2 устройства поддерживаются только на Linux
  • Некоторые комбинации кодеков/контейнеров могут быть несовместимы
  • Для работы требуется установленный FFmpeg с соответствующими библиотеками

Лицензия

Часть фреймворка Atom. См. корневой LICENSE файл.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Escorp.Atom.Media:

Package Downloads
Escorp.Atom.Media.Video

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 230 12/25/2025
0.1.9 211 12/24/2025
0.1.8 212 12/24/2025
0.1.7 218 12/24/2025
0.1.6 215 12/23/2025
0.1.5 252 11/14/2025
0.1.4 241 11/14/2025
0.1.3 314 11/13/2025
0.1.2 217 9/5/2025
0.1.1 231 4/1/2025
0.1.0 231 4/1/2025