web-dev-qa-db-ja.com

iPhoneで録画されたビデオがWindowsシステムでローテーションされる

IPhoneでビデオを録画し、Linuxサーバーにアップロードしています。ユーザーはこれらのビデオをウェブサイトで見ることができます。ユーザーがMacまたはiDevicesでビデオを見ている場合、ビデオは正常に見えますが、ユーザーがWindowsシステムでそのビデオを見ている場合、これらのビデオは回転しています。

これは、Windowsシステムが読み取れない録画ビデオ内のAppleのフラグが原因であると推測しています。 Windowsシステムでローテーションされないように、何らかの方法でビデオを録画できますか?または、FFmpegを使用して適切なインターフェイスの向きでビデオを再エンコードする方法はありますか?

私はFFmpegまたはiOSの両方の方法を受け入れています。

5
Saurabh

IOSカメラがビデオを記録する方法を変更することはできません。回転フラグを設定します。OSXとWindows(および他のプレーヤー)の両方でビデオを正しく表示するには、次のことを行う必要があります。

  • 回転フラグを削除します。これで、ビデオは横向きになりましたが、それでも間違って表示されています。
  • ビデオを再エンコードして回転させます。

ffmpegをダウンロード (OSの静的ビルドで問題ありません)。

次に、 transpose フィルターが必要です。例:.

ffmpeg -i portrait.mov \
-c:v libx264 -filter:v "transpose=1" \
-c:a copy \
-metadata:s:v:0 rotate=0 out.mp4

いくつかの注意:

  • ここで、transpose=1は90°回転します。ビデオが逆さまになっている場合は、オプションを組み合わせる必要があります。 -filter:v "transpose=2,transpose=2"またはその他を使用できます。ここを参照してください: FFmpegでビデオを180°(垂直/逆さま)反転する方法は?

  • -metadata:s:v:0 rotate=0オプションを使用すると、最初のビデオストリームの回転メタデータが再び0に設定され(以前は90でした)、OSXと他のOSの両方でビデオが正常に表示されるようになります。

  • 当然、移調するとビデオが再エンコードされ、品質が低下します。 -crfの後に-c:v libx264オプションを追加して、品質を制御する 一定レート係数 を設定します。より良い品質を得るには、より低い値を使用してください。 23は実際にはデフォルトであるため、指定する必要はまったくありませんが、-c:v libx264 -crf 18のように、ビデオの見栄えが悪くなる場合は、18程度の低いものを選択することをお勧めします。

  • 場合によっては、回転フラグを削除して、元のビデオビットストリームをそのままにしておきたいことがあります。これを行うには、-c:v libx264 -filter:v "transpose=1"-c:v copyに置き換えます。

  • 詳細については、 x264エンコーディングガイド を確認してください。

7
slhck