結論
どちらも動画の色深度が10bitであることに起因する問題だった。
①DaVinci Resolveで10bit動画が読み込めない問題
無償版のDaVinci Resolveは色深度が10bitの動画に対応していない。(※1)
そのため、色深度を8bitに変換してやることで読み込めるようになる。
そのため、以下のように-pix_fmt
オプションでyuv420p
(8bitの意)を指定してやる。
ffmpeg -i in.mp4 -c:a copy -pix_fmt yuv420p out.mp4
②ffmpegのh264_nvencで10 bit encode not supportedというエラーが出る問題
ffmpegのh264_nvencは10bitへのエンコードには対応していない。
(10 bit encode not supportedとエラーが出る)
が、8bitへのエンコードには対応している。
そのため、こちらも-pix_fmt
オプションでyuv420p
を指定して
ffmpeg -i in.mp4 -c:v h264_nvenc -c:a copy -pix_fmt yuv420p out.mp4
とすることでCPUを使うよりも高速にエンコードできる。
(音声部分も圧縮したい場合は-c:a copy
を外してください。)
経緯
①友人に以前撮影してもらった動画を編集用に送ってもらい
②容量削減のためエンコードし
(この時h264_nvenc
でエンコードしようとしたが、
10 bit encode not supportedとエラーを吐かれたため、仕方なくlibx264
でエンコードした)
③できたファイルをdavinci resolveに読み込ませた
→サムネイルが正常に表示されず、波形のみの表示になってしまった。
原因
友人の端末がiPhone12であり、
彼からもらった動画がドルビービジョンHDRで撮影されたものだった。
(iPhone12から対応した方式、既定でオンのようで色深度は10bitで撮影される (※2))
「いつも通り-c:v h264_nvenc
をつければ動くやろ...」とたかをくくっていたが、ffmpegのh264_nvencオプションは10bitへのエンコードには対応していないためエラーを吐いた。
そのためどうにかしようとしてlibx264を使ったら変換できてしまった(10bitはそのままに)ことが今回の問題につながった。
オチ
ちなみに、ずっと前に全く同じ問題に遭遇している方がTwitterにいらっしゃった。
もっと早くに調べていれば...
教訓
・オプションはネット上のを鵜呑みでコピペしないで、ちゃんと調べ中身を理解してから書く。
・エラーメッセージはちゃんと読んで、ちゃんと理解する。
・ソフトをDLする際は無償版と有償版の機能の違いを調べておく。
・異常が起こった際には、正常に読み込みできているものと異常なものをそれぞれ詳細表示ソフトにかけ、差異がないかを細かく比較していくと解決への糸口が見つかる。
・同じ会社の端末でも機種が違えば得られるデータも違う可能性があることに留意する。
・Google検索だけでなくTwitterでも調べてみる。
未だにわからないこと
・GPUだけでなくCPUも処理率100%になってしまう理由
・なぜh264_nvencは10bitへのエンコードに対応していないのか(技術上の制約がある?)
わかる人いたら教えてください...
注釈
※1 これは有償版のDaVinci Resolve Studioだと読み込める。
※2 iPhoneのHDRカメラ設定を調整するの「HDRビデオのオン/オフを切り替える」の項を参照のこと。