あ…ありのまま今起こった事を話すぜ! 俺は縦長動画をアップしたのに、いつのまにか横長になっていた。 な…何を言っているのかわからねーと思うが、俺も何をされたのかわからなかった…

こんにちは、あまりの暑さに朝5時に犬の散歩を済ます streampack の木村です。
もうね、6時過ぎると暑いんですよ!

それはさておき、MediaConvert を使っていて困ったことがあったので記事にします。

困ったこと

えとですね、スマホで縦長で撮影した動画を MediaConvert で変換すると横長になっちゃうんですよ・・・

理想

現実

Big Buck Bunny
©copyright 2008, Blender Foundation | www.bigbuckbunny.org

これがですね、MediaConvert 側で設定をいくらこねくり回しても、もうどうにもならんのですよ。

とりあえず元動画の情報を見てみます

$ ffprobe IMG_0012.MOV
ffprobe version n4.0.1-5-gb5106c5aa2 Copyright (c) 2007-2018 the FFmpeg developers
  built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
  configuration: --enable-version3 --enable-gpl --enable-libvmaf --enable-libx264 --enable-libx265 --enable-libvpx --enable-libaom --prefix=/usr/local --enable-nonfree --enable-static --disable-shared --extra-cflags='-I/usr/local/include -I/usr/include -I/Users/kimura/git/aom/aom_build' --extra-ldflags=-L/usr/local/lib --enable-libfreetype --extra-libs=-lpthread
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
  libpostproc    55.  1.100 / 55.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'IMG_0012.MOV':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2018-08-03T03:23:32.000000Z
    com.apple.quicktime.location.ISO6709: +35.6666+139.7495+080.740/
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPhone 7
    com.apple.quicktime.software: 11.4.1
    com.apple.quicktime.creationdate: 2018-08-03T12:23:32+0900
  Duration: 00:00:15.91, start: 0.000000, bitrate: 11856 kb/s
    Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080, 11737 kb/s, 59.96 fps, 59.94 tbr, 600 tbn, 600 tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2018-08-03T03:23:32.000000Z
      handler_name    : Core Media Data Handler
      encoder         : HEVC
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 95 kb/s (default)
    Metadata:
      creation_time   : 2018-08-03T03:23:32.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2018-08-03T03:23:32.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2018-08-03T03:23:32.000000Z
      handler_name    : Core Media Data Handler
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 0 for input stream 3

はい、おかしな部分が二箇所ございます。

抜粋

Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080, 11737 kb/s, 59.96 fps, 59.94 tbr, 600 tbn, 600 tbc (default)
    Metadata:
      rotate          : 90

動画解像度が 1920×1080、それとメタデータに rotate : 90 が記載されています。

どうやらこういうことらしいですわ。

出典: https://addpipe.com/blog/mp4-rotation-metadata-in-mobile-video-files/

つまりスマホで撮影すると向きにかかわらず FHD の場合の解像度は 1920x1080 で固定され、回転情報は rotate で付与される。
あとは再生側でよしなにやってね。
ということ。

まあ、ここまでは良いですよ。 つか知ってたし!

んじゃ MediaConvert で変換時に90度回転させればいいんでね? 

設定をこねくり回したり、不親切なドキュメントを読み漁りましたが、肝心の動画を回転させる機能が見当たりません。
ものすげー調べたところ、やっぱ無いじゃん。

無い証拠

https://forums.aws.amazon.com/thread.jspa?messageID=851588#851588

あうあう、詰んだ・・・

対応策

すいません、これしか思い浮かばなかった。
ffmpeg で再エンコして縦長(1080×1920)にして、rotate 情報を消す!

縦長にする

ffmpeg では読み込んだ時点で rotate 情報を解釈するので何もしなくて結構です。
いつもどおり -i で入力指定して出力すれば縦長で吐き出されます。

-vf transpose-vf hflip,vflip などは要りません。

rotate 情報を消す

以下オプションを指定します。

-metadata:s:v:0 rotate=0

実行例 (HEVC 10Mbps で再エンコ)

$ ffmpeg -i IMG_0012.MOV -vcodec libx265 -vb 10000000 -tag:v hvc1 -acodec copy -metadata:s:v:0 rotate=0 IMG_0012_rev.MOV

できあがったファイルを MediaConvert に食わせると冒頭の理想になります。

ただ、再エンコなので手間と時間がかかる・・・

おまけ Elastic Transcoder

ちなみに Elastic Transcoder だとクルクル回せるので問題ないです。
回さなくても Output Rotationauto にしておけば勝手にやってくれます。
カシコイ!!!

元記事はこちら

MediaConvert が回転しない!