Help us understand the problem. What is going on with this article?

MediaConvert が回転しない!

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

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

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

追記

2019/2/21 に MediaConvert に動画回転機能が追加されたので、現在はちゃんと回転します。

AWS Elemental MediaConvert が新たに動画の回転と広告マーカーの挿入をサポート

困ったこと

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

理想

スクリーンショット 2018-08-03 13.14.23.png

現実

スクリーンショット 2018-08-03 13.00.34.png

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

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

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

Screen-Shot-2015-06-10-at-16.48.07.png

出典: 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 で再エンコして縦長(1080x1920)にして、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 にしておけば勝手にやってくれます。
カシコイ!!!

スクリーンショット 2018-08-03 14.37.34.png

tomopyonsama
セロー買うたった 林道林道
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした