IPhoneでビデオを録画し、Linuxサーバーにアップロードしています。ユーザーはこれらのビデオをウェブサイトで見ることができます。ユーザーがMacまたはiDevicesでビデオを見ている場合、ビデオは正常に見えますが、ユーザーがWindowsシステムでそのビデオを見ている場合、これらのビデオは回転しています。
これは、Windowsシステムが読み取れない録画ビデオ内のAppleのフラグが原因であると推測しています。 Windowsシステムでローテーションされないように、何らかの方法でビデオを録画できますか?または、FFmpegを使用して適切なインターフェイスの向きでビデオを再エンコードする方法はありますか?
私はFFmpegまたはiOSの両方の方法を受け入れています。
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エンコーディングガイド を確認してください。