NetCommons3 / Videos

Videos for NetCommons3
0 stars 2 forks source link

動画の回転処理 #60

Open akagane99 opened 9 years ago

akagane99 commented 9 years ago

投稿された動画が上下さかさまとか、スマートフォンで動画撮影だと結構ある。 動画にはその上下をパラメータとして持っているらしい。 ffmpegは優秀なので、そのパラメータを食わせてあげれば、上下反転が直るらしい。

要調査。 対応先送り。

akagane99 commented 8 years ago

開発環境のubuntuのapt-getで取得できるffmpeg ffprobeが0.8と古いためか、ffprobeで動画の回転情報(TAG:rotate)が表示されない。

ubuntu 14.04 だったらどうか、要確認。

環境

ubuntu 12.04 LTS

$ ffprobe -version
avprobe version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2007-2014 the Libav developers
  built on Apr  1 2016 14:24:20 with gcc 4.6.3
avprobe 0.8.17-4:0.8.17-0ubuntu0.12.04.2
libavutil    51. 22. 3 / 51. 22. 3
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0
akagane99 commented 8 years ago

手元のwindows版FFMPEG1.1.1だったらTAG:rotate 表示された。

>ffprobe -version

ffprobe version 1.1.1
built on Jan 20 2013 23:11:23 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig
opencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enabl
libavutil      52. 13.100 / 52. 13.100
libavcodec     54. 86.100 / 54. 86.100
libavformat    54. 59.106 / 54. 59.106
libavdevice    54.  3.102 / 54.  3.102
libavfilter     3. 32.100 /  3. 32.100
libswscale      2.  1.103 /  2.  1.103
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  2.100 / 52.  2.100

>ffprobe -show_streams IMG_1823.MOV

ffprobe version 1.1.1 Copyright (c) 2007-2013 the FFmpeg developers
  built on Jan 20 2013 23:11:23 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi
ibopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --ena
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'IMG_1823.MOV':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2016-04-28 02:46:07
  Duration: 00:00:01.33, start: 0.000000, bitrate: 17427 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 17304 kb/s, 30 fps, 30 tbr, 600 tbn, 1
    Metadata:
      rotate          : 90
      creation_time   : 2016-04-28 02:46:07
      handler_name    : Core Media Data Handler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 82 kb/s
    Metadata:
      creation_time   : 2016-04-28 02:46:07
      handler_name    : Core Media Data Handler
    Stream #0:2(und): Data: none (mebx / 0x7862656D)
    Metadata:
      creation_time   : 2016-04-28 02:46:07
      handler_name    : Core Media Data Handler
    Stream #0:3(und): Data: none (mebx / 0x7862656D)
    Metadata:
      creation_time   : 2016-04-28 02:46:07
      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]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1/1200
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
has_b_frames=0
sample_aspect_ratio=0:1
display_aspect_ratio=0:1
pix_fmt=yuv420p
level=40
timecode=N/A
is_avc=1
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/600
start_pts=0
start_time=0.000000
duration_ts=800
duration=1.333333
bit_rate=17304210
nb_frames=40
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:rotate=90
TAG:creation_time=2016-04-28 02:46:07
TAG:language=und
TAG:handler_name=Core Media Data Handler
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=unknown
codec_type=audio
codec_time_base=1/44100
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=fltp
sample_rate=44100
channels=1
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/44100
start_pts=0
start_time=0.000000
duration_ts=61440
duration=1.393197
bit_rate=82084
nb_frames=60
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:creation_time=2016-04-28 02:46:07
TAG:language=und
TAG:handler_name=Core Media Data Handler
[/STREAM]
[STREAM]
index=2
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=data
codec_time_base=0/1
codec_tag_string=mebx
codec_tag=0x7862656d
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/600
start_pts=0
start_time=0.000000
duration_ts=800
duration=1.333333
bit_rate=48
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:creation_time=2016-04-28 02:46:07
TAG:language=und
TAG:handler_name=Core Media Data Handler
[/STREAM]
[STREAM]
index=3
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=data
codec_time_base=0/1
codec_tag_string=mebx
codec_tag=0x7862656d
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/600
start_pts=0
start_time=0.000000
duration_ts=800
duration=1.333333
bit_rate=60
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:creation_time=2016-04-28 02:46:07
TAG:language=und
TAG:handler_name=Core Media Data Handler
[/STREAM]
akagane99 commented 8 years ago

▼ スマホで撮影した映像をffmpegで正しい向きに変換する(+縮小変換) - Qiita http://qiita.com/naga3/items/639da87ad56c67549eee

akagane99 commented 8 years ago

結論から、動画回転の対応はやらない。

Ffmpegのバージョンによって、使えるオプションの違いや、動作が異なり、対応しきれないため。 同じ動画回転をするオプション指定しても、【環境2】であれば正しい向きに動画出力したが、 【環境1】では傾いたままだった。

詳細

【環境1 - apt-getでffmpegインストール】

ubuntu 12.04 LTS

$ ffmpeg -version
ffmpeg version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2000-2014 the Libav developers

動画の詳細情報を取得するコマンドffprobeで、動画の幅、高さ、rotateが取得したいが、 バージョン古いため、一部オプション指定が使えず、取得できない

$ ffprobe -show_entries stream_tags=rotate: -of default=noprint_wrappers=1 IMG_1823.MOV
avprobe version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2007-2014 the Libav developers
  built on Apr  1 2016 14:24:20 with gcc 4.6.3
Unrecognized option 'show_entries'
Failed to set value 'stream_tags=rotate:' for option 'show_entries'
$ ffprobe -show_streams -print_format json IMG_1823.MOV
avprobe version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2007-2014 the Libav developers
  built on Apr  1 2016 14:24:20 with gcc 4.6.3
Unrecognized option 'print_format'
Failed to set value 'json' for option 'print_format'

【環境2 - コンパイルしてffmpegインストール】

ubuntu 12.04 LTS

$ /usr/local/ffmpeg_build/bin/ffmpeg -version
ffmpeg version git-2016-05-13-cb928fc Copyright (c) 2000-2016 the FFmpeg developers

rotateが90,180,270でも、-vf hflip 指定で正しい傾きに動画変換できた。

$ /usr/local/ffmpeg_build/bin/ffmpeg -i IMG_1823.MOV -vf hflip -metadata:s:v:0 rotate=0 IMG_1823-hflip.mp4

しかし、rotateが90で-vf transpose=1(時計回りに90度回転)を指定しても回転してくれなかった。

akagane99 commented 7 years ago

rotateが取得できたら回転処理する