share facebook facebook twitter menu hatena pocket slack

2018.09.10 MON

MediaConvert が回転しない!

木村 智一

WRITTEN BY 木村 智一

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

こんにちは、あまりの暑さに朝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 が回転しない!

木村 智一

木村 智一

動画一筋! 犬と闘う streampack チームリーダー

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。