Opened 9 years ago
Closed 4 years ago
#6370 closed defect (fixed)
Change in rotate metadata treatment between ffmpeg 3.2 and ffmpeg 3.3
| Reported by: | tamc | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | ffmpeg |
| Version: | git-master | Keywords: | rotate regression |
| Cc: | deim@seznam.cz | Blocked By: | |
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description
Hello
I'm not sure if this is a deliberate change, but given a h264 video with rotate=90 in its meta data, when you then rotated the video using the command below, the output video used to have no rotate metadata. As of 3.3, it retains the metadata which makes the output display incorrectly.
Summary of the bug:
How to reproduce:
ffmpeg version 3.2.4:
ffmpeg -noautorotate -i original.mp4 -metadata:s:v rotate=0 -vf scale=640:480,transpose=clock -f mp4 -y rotated.mp4
... output all ok ...
ffprobe -i rotated.mp4
... snip ...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rotated.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.56.101
Duration: 00:00:08.24, start: 0.000000, bitrate: 1298 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x640, 1181 kb/s, 14.92 fps, 14.92 tbr, 11456 tbn, 29.83 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
handler_name : SoundHandler
ffmpeg version 3.3:
ffmpeg -noautorotate -i original.mp4 -metadata:s:v rotate=0 -vf scale=640:480,transpose=clock -f mp4 -y rotated.mp4
... all looks ok ...
ffprobe -i rotated.mp4
... snip ...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rotated.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Duration: 00:00:08.24, start: 0.000000, bitrate: 1299 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x640, 1182 kb/s, 14.92 fps, 14.92 tbr, 11456 tbn, 29.83 tbc (default)
Metadata:
rotate : 90 <---- DIFFERENCE HERE
handler_name : VideoHandler
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
handler_name : SoundHandler
Note the difference in the metadata in the second output.
I've verified that HEAD appears to give the same result at 3.3
Is this a bug? Or have we been using ffmpeg incorrectly?
Our goal is to resize videos and transpose them so they are the same way up (we use ffprobe to check their incoming rotation, and then apply the appropriate transpose flags)
Attachments (2)
Change History (15)
by , 9 years ago
| Attachment: | original.mp4 added |
|---|
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Please test current FFmpeg git head and provide the command line that allows to reproduce the issue together with the complete, uncut console output to make this a valid ticket.
comment:3 by , 9 years ago
Sorry my original ticket wasn't clear.
Tested against current git head.
Steps to reproduce:
- Download the attached original.mp4 (or any other h264 file with a "rotate : 90" in its metadata
ffmpeg -noautorotate -i original.mp4 -metadata:s:v rotate=0 -vf scale=640:480,transpose=clock -f mp4 -y rotated.mp4ffprobe -i rotated.mp4- Note the (for me, unexpected) presence of
Metadata: rotate : 90in the output.
That metadata was not there in previous versions of ffmpeg.
Full output:
ffmpeg -noautorotate -i original.mp4 -metadata:s:v rotate=0 -vf scale=640:480,transpose=clock -f mp4 -y rotated.mp4
ffmpeg version git-2017-05-04-d2657d2 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-d2657d2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 61.100 / 55. 61.100
libavcodec 57. 93.100 / 57. 93.100
libavformat 57. 72.101 / 57. 72.101
libavdevice 57. 7.100 / 57. 7.100
libavfilter 6. 88.100 / 6. 88.100
libavresample 3. 6. 0 / 3. 6. 0
libswscale 4. 7.101 / 4. 7.101
libswresample 2. 8.100 / 2. 8.100
libpostproc 54. 6.100 / 54. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
creation_time : 2017-05-04T15:44:25.000000Z
Duration: 00:00:02.05, start: 0.000000, bitrate: 3126 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x480, 2962 kb/s, 14.91 fps, 14.92 tbr, 90k tbn, 180k tbc (default)
Metadata:
rotate : 90
creation_time : 2017-05-04T15:44:25.000000Z
handler_name : Core Media Video
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 111 kb/s (default)
Metadata:
creation_time : 2017-05-04T15:44:25.000000Z
handler_name : Core Media Audio
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x7fe46000ea00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7fe46000ea00] profile High, level 2.2
[libx264 @ 0x7fe46000ea00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=14 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'rotated.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
encoder : Lavf57.72.101
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 480x640, q=-1--1, 14.92 fps, 11456 tbn, 14.92 tbc (default)
Metadata:
encoder : Lavc57.93.100 libx264
creation_time : 2017-05-04T15:44:25.000000Z
handler_name : Core Media Video
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
displaymatrix: rotation of -90.00 degrees
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2017-05-04T15:44:25.000000Z
handler_name : Core Media Audio
encoder : Lavc57.93.100 aac
frame= 31 fps=0.0 q=-1.0 Lsize= 306kB time=00:00:02.05 bitrate=1216.8kbits/s speed=3.18x
video:279kB audio:24kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.774942%
[libx264 @ 0x7fe46000ea00] frame I:1 Avg QP:23.06 size: 16177
[libx264 @ 0x7fe46000ea00] frame P:10 Avg QP:24.86 size: 12260
[libx264 @ 0x7fe46000ea00] frame B:20 Avg QP:26.12 size: 7304
[libx264 @ 0x7fe46000ea00] consecutive B-frames: 6.5% 12.9% 29.0% 51.6%
[libx264 @ 0x7fe46000ea00] mb I I16..4: 9.2% 63.4% 27.4%
[libx264 @ 0x7fe46000ea00] mb P I16..4: 5.8% 30.1% 8.8% P16..4: 32.4% 15.7% 4.9% 0.0% 0.0% skip: 2.3%
[libx264 @ 0x7fe46000ea00] mb B I16..4: 1.1% 4.6% 1.5% B16..8: 40.0% 17.1% 4.6% direct:13.2% skip:17.9% L0:58.6% L1:26.7% BI:14.8%
[libx264 @ 0x7fe46000ea00] 8x8 transform intra:66.1% inter:69.7%
[libx264 @ 0x7fe46000ea00] coded y,uvDC,uvAC intra: 75.3% 74.5% 22.0% inter: 41.5% 44.1% 0.4%
[libx264 @ 0x7fe46000ea00] i16 v,h,dc,p: 11% 49% 9% 30%
[libx264 @ 0x7fe46000ea00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 9% 45% 11% 4% 5% 4% 10% 4% 8%
[libx264 @ 0x7fe46000ea00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 48% 9% 4% 5% 4% 11% 3% 5%
[libx264 @ 0x7fe46000ea00] i8c dc,h,v,p: 38% 39% 16% 8%
[libx264 @ 0x7fe46000ea00] Weighted P-Frames: Y:20.0% UV:10.0%
[libx264 @ 0x7fe46000ea00] ref P L0: 63.7% 12.7% 19.2% 4.3% 0.2%
[libx264 @ 0x7fe46000ea00] ref B L0: 89.0% 8.8% 2.2%
[libx264 @ 0x7fe46000ea00] ref B L1: 98.8% 1.2%
[libx264 @ 0x7fe46000ea00] kb/s:1096.54
[aac @ 0x7fe460010200] Qavg: 14239.845
ffprobe -i rotated.mp4
ffprobe version git-2017-05-04-d2657d2 Copyright (c) 2007-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-d2657d2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 61.100 / 55. 61.100
libavcodec 57. 93.100 / 57. 93.100
libavformat 57. 72.101 / 57. 72.101
libavdevice 57. 7.100 / 57. 7.100
libavfilter 6. 88.100 / 6. 88.100
libavresample 3. 6. 0 / 3. 6. 0
libswscale 4. 7.101 / 4. 7.101
libswresample 2. 8.100 / 2. 8.100
libpostproc 54. 6.100 / 54. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rotated.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.72.101
Duration: 00:00:02.08, start: 0.000000, bitrate: 1203 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x640, 1099 kb/s, 14.92 fps, 14.92 tbr, 11456 tbn, 29.83 tbc (default)
Metadata:
rotate : 90 <--- UNEXPECTED, BUG?
handler_name : VideoHandler
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 95 kb/s (default)
Metadata:
handler_name : SoundHandler
comment:4 by , 9 years ago
| Component: | undetermined → ffmpeg |
|---|---|
| Priority: | normal → important |
| Reproduced by developer: | set |
| Status: | new → open |
Regression since ddef3d902f0e4cbd6be6b3e5df7ec158ce51488b
comment:5 by , 9 years ago
| Keywords: | regression added |
|---|
comment:6 by , 9 years ago
| Cc: | added |
|---|
comment:7 by , 9 years ago
| Cc: | removed |
|---|
comment:8 by , 9 years ago
| Cc: | added |
|---|
comment:9 by , 8 years ago
| Keywords: | rotate added |
|---|
by , 8 years ago
| Attachment: | 0001-Fix-rotation-metadata-override-when-transcoding.patch added |
|---|
Fix rotation override when transcoding
comment:13 by , 4 years ago
| Resolution: | → fixed |
|---|---|
| Status: | open → closed |
Should be fixed with b9058765d7422bb801af0e67fb58ba47e523f831



I realise I should have put the output of ffprobe on the original.mp4 file so you can see that it starts with the rotate metadata, which is removed in ffmpeg 3.2 but kept in ffmpeg 3.3:
ffprobe -i original.mp4 ..snip... Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2016-03-18T15:03:53.000000Z Duration: 00:00:08.19, start: 0.000000, bitrate: 3099 kb/s Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x480, 2971 kb/s, 14.91 fps, 14.92 tbr, 90k tbn, 180k tbc (default) Metadata: rotate : 90 creation_time : 2016-03-18T15:03:53.000000Z handler_name : VideoHandle Side data: displaymatrix: rotation of -90.00 degrees Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 123 kb/s (default) Metadata: creation_time : 2016-03-18T15:03:53.000000Z handler_name : SoundHandle