Giter Club home page Giter Club logo

beutl's Introduction

🎬 Beutl

Daily build Discord

Beutlはクロスプラットフォームで動作する動画編集 (コンポジット) ソフトウェアです。

古いバージョン(BEditor)のソースコード

画像は開発中のバージョンです。

📖 機能

💻 クロスプラットフォーム

Beutl は常に最新の .NET を使用しているため、いろいろな OS で動作します。 Windows, Linuxをサポートしており、macOSも対応する予定です!

⏳ キーフレーム

キーフレームを使用して、フェードインアウト、スライドインなど基本的なアニメーションや、 さまざまなオブジェクトをアニメーションすることができます。

🔌 拡張機能

Beutl アカウントを作成して、拡張機能を取得したり、自身で開発した拡張機能を公開できます。 拡張機能では、エフェクト、オブジェクト、コーデック、UIなどを追加できます。

🧰 豊富なエフェクト

色フィルター、ぼかし、シャドウ、LUT などの基本的なエフェクトから 縁取り、内側シャドウ、ロングシャドウなどのマイナーなエフェクトがあります。 もちろんこれらは拡張機能で増やすことができます。

📥 インストール

こちらのドキュメントを参照してください。

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

Github Pages

FirebaseでのhostingからGithub Pagesに移行

日本語フォントの描画

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

GUIの変更

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

図形の追加

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

相対パスで保存

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

例外処理の見直し

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

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

  • Drawing

  • Media

  • Setting

  • Core

  • WPF(catchのみ)

ComponentElementの追加

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

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

BaseRenderingContextが動作していない

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

自分用Todo

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

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

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

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

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

その他

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

PropertyElementの追加

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

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

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

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

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

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

Timelineを見やすくする

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

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

状態

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

問題点

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

動画の入出力

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

1.xのリリースで追加

AviUtl Exedit Interop

AviUtl Exedit Interop

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

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

開発リポジトリ

編集データ管理

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

エフェクト類の修正

  • 膨張と収縮にサイズを変更するかのプロパティを追加
  • ぼかし, ガウスブラー, 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;

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

マネージド画像

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

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

詳細

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

#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

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

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

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

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

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

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

管理するディレクトリ

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

個別オブジェクトの実装

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);
}

GUIの変更

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

UIの最適化

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

プラグインのロード

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

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

最適化

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

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

作成系ウィンドウの変更

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

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

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.