🎨

image_pickerで動画を選択するとmp4に変換されるのを無効にしたい。

2023/03/27に公開

Flutter の image_picker を使ってカメラロールから動画を選択するとmp4に変換されて保存されます。
通常の動画なら特に問題はありませんが、iPhoneの場合HDRで撮影された HEVC(H.265) の動画が渡されることがあります。この HEVC(H.265) の動画を h264 SDR mp4 にそのまま変換すると、トーンマッピングなどがなにもされていないようで白っぽい動画になってしまいます。
これを防ぎたいので image_picker の ios コードを見て mp4 に変換する部分を改良しました。

packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerPlugin.m
の 232 行目を見るとMP4に変換するようにコーディングされていることがわかります。

  imagePickerController.mediaTypes = @[
    (NSString *)kUTTypeMovie, (NSString *)kUTTypeAVIMovie, (NSString *)kUTTypeVideo,
    (NSString *)kUTTypeMPEG4
  ];

(NSString *)kUTTypeMovie, 以降のコードを削除します。

  imagePickerController.mediaTypes = @[(NSString *)kUTTypeMovie];

https://github.com/ioridev/plugins/commit/753103ea2a6c10fe4bea59f28a70585618a3fb0f

これで動画が変換されずにHDR動画のまま選択できるようになりました。

また、このままでは動画の解像度が下げられてしまうのでこちらの記事も参考にしてください。
https://zenn.dev/ioridev/articles/3fd5a5f583c131

Discussion