VRCImageHelper icon indicating copy to clipboard operation
VRCImageHelper copied to clipboard

JPEG圧縮時のサンプリング指定をしたい

Open fnkey009 opened this issue 1 year ago • 1 comments

いつもお世話になっております。 Ver 0.9.7を利用させていただいております。

要望なのですが、JPEG圧縮時のサブサンプリング指定できるように実装していただけないでしょうか。 今の処理だと4:2:0でエンコードしていると思うのですが、赤色がくすんでしまうので、 現状は(容量は大きいですが)PNGで保存しています。(4:4:4で保存できればベストです。)

個人的にソースコードを確認・いじってみたものの、 処理に使用している.NET標準のJPEGエンコーダーではサブサンプリング指定はできないようでした。 ffmpegならできるのかと思いましたが、こちらはドキュメント漁ってもよくわからない状態でした。

Issueの投稿するのが初めてなので、不躾な投稿となってしまっていたら申し訳ありません。 よろしくお願いします。

fnkey009 avatar Mar 25 '25 05:03 fnkey009

メモ

  • https://www.nuget.org/packages/BitMiracle.LibJpeg.NET/ でできそうな気がする?

    • https://bitmiracle.github.io/libjpeg.net/help/articles/KB/special-color-spaces.html
    • ↑を使ってる実装例 https://github.com/danielgindi/Codenet/blob/main/Drawing.Encoders.Jpeg/Encoders/JpegEncoder.cs
      • MITLなのでこのファイルもらってきて拡張したらできそう
    • 設定画面でどう指定するとよいか
      • オプションのとこJPEGならかわりにドロップダウンとかにする?
  • ffmpegで試してみる

    • もしかすると -pix_fmt yuvj444p でいい?
      • デフォルトで444っぽい
    • https://github.com/test-images/png/blob/main/202105/cs-black-000.png で試す
      • -pix_fmt yuvj420p Image
      • yuvj444p Image
      • 指定なし Image
  • やること

    • JPEGのエンコードもffmpegを利用するようにする?
      • JPEG と JPEG(高) とかに分ける?
        • 同じ数値だとffmpegのmjpegのがザラついてる気がする
        • ffmpegを必須にするかどうか
          • 分けよう
    • 設定画面まわりの変更
  • とりあえずffmpegにはできたが、色空間はこれで正しいのかがよくわからない

m-hayabusa avatar Apr 05 '25 00:04 m-hayabusa