Giter Site home page Giter Site logo

b-editor / beutl Goto Github PK

View Code? Open in Web Editor NEW
212.0 8.0 11.0 251 MB

Cross-platform video editing (compositing) software.

Home Page: https://beutl.beditor.net

License: MIT License

C# 99.76% HTML 0.04% Batchfile 0.01% PowerShell 0.07% Shell 0.06% Inno Setup 0.07%
c-sharp csharp dotnet video-editor video-editing-software composition

beutl's Introduction

🎬 Beutl

English / Japanese

Daily build Discord

Beutl (pronounced /bjútəl/) is a cross-platform video editing (compositing) software.

Source code of the old version (BEditor)

The image is from a development version.

📖 Features

💻 Cross-Platform

Beutl uses the latest .NET, enabling it to run on various operating systems. It supports Windows, Linux, and macOS.

⏳ Keyframes

Using keyframes, you can create basic animations such as fade-ins and slide-ins, as well as animate various objects.

🔌 Extensions

Create a Beutl account to acquire extensions or publish your own developed extensions. Extensions can add effects, objects, codecs, UI, and more.

🧰 Rich Effects

From basic effects like color filters, blurs, shadows, and LUTs, to minor effects like outlines, inner shadows, and long shadows, Beutl offers a wide range of effects. These can be further expanded through extensions.

📥 Installation

Refer to the documentation here.

License

Patrons

beutl's People

Contributors

dependabot[bot] avatar indigo-san avatar minalogi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

beutl's Issues

ディレクトリのマネージャーを作る

user/pluginsなどのディレクトリが消される可能性があるのでディレクトリを管理するクラスを作る

管理するディレクトリ

  • user/colors
  • user/plugins
  • user/backup
  • user/logs

エフェクト類の修正

  • 膨張と収縮にサイズを変更するかのプロパティを追加
  • ぼかし, ガウスブラー, MedianBlurを分ける

BEditorでプロジェクトファイルを新規作成・読み込むとクラッシュする。

問題の再現
再現方法(?):

  1. プロジェクトファイルを新規作成します。
  2. 一瞬編集画面(タイムライン?)が表示されてから、「BEditor.Graphics.GraphicsException」がスローされてクラッシュ
    または:
  3. すでに作成されたプロジェクトファイルを開く
  4. すぐにフリーズしてクラッシュする

スクリーンショット
プロジェクトファイル新規作成時に一瞬表示されるエラー
クラッシュ前に一瞬表示されるエラー

PC :

  • OS: Windows10 Pro InsiderPreview Build: 21313.1000(64Bit);
  • CPU: Ryzen3 3100;
  • Ram: DDR4-3200 16GB;
  • GPU: Geforce GTX1650;

その他
スタートウィンドウを表示しない設定にして編集画面から新規プロジェクトを作成しても同じ挙動になる。

AviUtl Exedit Interop

AviUtl Exedit Interop

KENくん氏のソフトウェアAviUtlとExeditとの相互運用のために以下の機能を持つ拡張機能を作る

  • exoファイルの入出力
  • エイリアスファイルの入出力
  • luaスクリプリティング(対応出来ないapiは無視)

開発リポジトリ

GUIの変更

  • PropertyMetadataからプロパティの値をリセットする機能を実装する
  • IBindableを検索するウィンドウ

個別オブジェクトの実装

ImageObjectの時点で個別オブジェクト

  • MultipleImageObjectを実装
  • Renderメソッド内で画像をforeachする

エフェクトの途中から個別オブジェクトになる場合

  • MultipleImageEffectを実装
public interface IMultipleImageObject
{
    public IEnumerable<Image<BGRA32>> Render(EffectRenderArgs args);

    public void Rendered(EffectRenderArgs<Image<BGRA32>[]> args, int index, bool islast)
}
public interface IMultipleImageEffect
{
    public IEnumerable<Image<BGRA32>> Render(EffectRenderArgs<Image<BGRA32>> args);
}

UIの最適化

古いバージョンの頃の処理が放置されているので、UIの再構築をする。

作成系ウィンドウの変更

  • プロジェクト作成
  • シーン、クリップ、エフェクト追加

などのウィンドウをスタートウィンドウのようなサイズにする

ComponentElementの追加

PropertyElementを継承する特に意味のないUIコンポネートを作成する

  • ButtonComponent【ボタン】
  • LabelComponent【stringを表示するUI】

日本語フォントの描画

Skiasharpで日本語フォントを描画すると豆腐になるので、
次のバージョンからファイルの読み込みを以前のものに復元する

DataContractシリアライザーが機能していない

状態

  • DataContractシリアライザのコンストラクタにKnownTypesを指定しても、反映されない
  • KnownTypeAttributeを使うとシリアル化できる

問題点

  • Attributeは動的に変更できないのでプラグインによって追加されたエフェクトのシリアル化ができない

プラグインのロード

プラグインの読み込みをユーザーが許可するまで読み込まない方法に変更

  • ロードするかはSettingsに保存する
  • Settingsに見つからないプラグインがある場合、確認のダイアログを表示

動画の入出力

FFmpegを利用して動画の入出力をする

1.xのリリースで追加

Github Pages

FirebaseでのhostingからGithub Pagesに移行

クロスプラットフォーム開発

.NET MAUIに向けてMVVMをしっかり作る

クロスプラットフォームの対応状況

  • BEditor.Audio
  • BEditor.Core
  • BEditor.Media
  • BEditor.Drawing
  • BEditor.Graphics
  • BEditor.Primitive
  • BEditor.WPF - WPFがWindows限定
  • BEditor.WPF.Controls - WPFがWindows限定

#32 スクリプトで編集

CLIツールの bedit open で編集する時、replっぽくする

メモ

  • C#スクリプトを使う
  • セミコロンなし
  • メソッド
    • Save([file])
    • List(clips or scenes or effects)
    • Prop(path)
    • Add(range, layer, type[, setcurrent = false])
    • Add(type)
    • Add(width, height, background)
    • Remove(clip)
    • Remove(effect)
    • Move(layer)
    • Move(range)
    • HideLayer(layer)
    • ShowFrame()
    • Undo([count = 1])
    • Redo([count = 1])
    • Encode(file)
    • EncodeImg(file, frame)
  • プロパティ
    • Directory get
    • Name get
    • Samplingrate get
    • Framerate get
    • Scene
    • Scenes
    • Clip
    • Clips

図形の追加

  • 三角形
  • 五角形
  • 六角形
  • パス
  • 角丸四角形(BEditor.Drawingには追加済み)

IObserveble, IObserverを弱参照で管理する

Subscribeメソッドの戻り値が処理されない場合、オブジェクトの解放が遅れるので、以下のようにする

private readonly List<WeakReference<IObserver<T>>> _observers = new();

public IDisposable Subscribe(IObserver<T> observer)
{
    _observer.Add(new(observer));
    // ...
}

PropertyElementの追加

PropertyElementを継承するプロパティを追加する

  • ValueProperty【値のみ入力】
  • TextProperty【1行のみの文字列】
  • FolderProperty【フォルダ選択】
  • DialogProperty【Groupを継承したダイアログ】

例外処理の見直し

  • 全体的な例外処理を見直す

  • 例外のメッセージを多言語対応する

  • Drawing

  • Media

  • Setting

  • Core

  • WPF(catchのみ)

最適化

描画を編集データによって最適化する

  • サイズ: 100, ライン幅: <= 50, 種類: 四角形
    • 画像をFill
  • 透明度が0%
    • 描画しない

Timelineを見やすくする

  • レイヤーの表示/非表示を分かりやすくする
  • レイヤーのスケールを直接調節できるようにする
  • クリップが重なった場合に空いているスペースに移動

GUIの変更

  • ReactiveExtensionに対応しているPropertyElementのGUIの変更
  • UndoRedoコマンドをクエリで検索し実行できるようにする
  • SceneManagerが中途半端なので廃止(ObjectViewerに移動)

マネージド画像

BEditor.Core.Media.ImageクラスがOpenCv.Matのラッパークラスみたくなっているので、

  • 画像処理 = OpenCv
  • メモリ管理 = .NET
    のようにする

詳細

  • class = Drawing.Image<T>
  • Tはピクセルの構造体
  • C++とのInterop用の構造体 = Drawing.Interop.ImageStruct
  • 出来るならC#でも実装する(フリップ,領域拡張などの領域操作)

コマンドラインツールを作る

コマンドラインで操作するツールを作る

実装コマンド (プロジェクトを操作)

  • encode - 動画に出力する
  • encode_img - 画像に出力する
  • json - json形式で出力する
  • クリップ、シーン、エフェクトの追加など

その他

  • 設定の表示
  • 読み込むフォントの列挙
  • 読み込むプラグインの列挙

相対パスで保存

FileProperty, FolderProperty をプロジェクトからの相対パスと絶対パスで選べるようにする

編集データ管理

SceneクラスのSceneNameとIHasName.Nameで同じ値を返しているので、
SceneNameに "."を含めるとプロパティのバインディングが壊れる

BaseRenderingContextが動作していない

OpenTK のアップデートの影響でGLControlからGameWindowのオフスクリーン描画に移行したが
描画されずにGL.ReadPixelで空の画像が返ってしまう

自分用Todo

  • 通常の運用(GameWindow)で描画されるか調べる
  • 描画されない場合GLFWの関数を直接呼び出す

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.