#11649: -noautorotate -display_rotation 0 passes through rotation metadata with
JPEG inputs
-------------------------------------+-------------------------------------
Reporter: Wes Castro | Owner: (none)
Type: defect | Status: new
Priority: normal | Component:
| undetermined
Version: unspecified | Resolution:
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Description changed by Wes Castro:
Old description:
> Summary of the bug:
> When invoking FFmpeg with a JPEG input that contains `Orientation` EXIF
> metadata tag and `-noautorotate -display_rotation 0` with an MP4 output,
> the output will have a display_matrix indicating a rotation starting with
> FFmpeg 7.1. It is expected that the output will not be physically rotated
> and not contain any display_matrix.
>
> How to reproduce:
> Use attached test file (1920x1080 JPEG image with Orientation=6 in EXIF
> metadata (rotated 90 degs CCW)
> {{{
> ffmpeg -noautorotate -display_rotation 0 -i rotated_image.jpg output.mp4
> }}}
>
> FFprobe of output produced by FFmpeg 7.0:
> {{{
> ffprobe version n7.0 Copyright (c) 2007-2024 the FFmpeg developers
> built with gcc 11 (GCC)
> configuration: --enable-gpl
> libavutil 59. 8.100 / 59. 8.100
> libavcodec 61. 3.100 / 61. 3.100
> libavformat 61. 1.100 / 61. 1.100
> libavdevice 61. 1.100 / 61. 1.100
> libavfilter 10. 1.100 / 10. 1.100
> libswscale 8. 1.100 / 8. 1.100
> libswresample 5. 1.100 / 5. 1.100
> libpostproc 58. 1.100 / 58. 1.100
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/wescastro/out.mp4':
> Metadata:
> major_brand : isom
> minor_version : 512
> compatible_brands: isomiso2mp41
> encoder : Lavf61.1.100
> Duration: 00:00:00.04, start: 0.000000, bitrate: 8507 kb/s
> Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v /
> 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 8335 kb/s, 25 fps, 25
> tbr, 12800 tbn (default)
> Metadata:
> handler_name : VideoHandler
> vendor_id : [0][0][0][0]
> encoder : Lavc61.3.100 mpeg4
> }}}
>
> FFprobe of output produced by FFmpeg 7.1
> {{{
> ffprobe version n7.1 Copyright (c) 2007-2024 the FFmpeg developers
> built with gcc 11 (GCC)
> configuration: --enable-gpl
> libavutil 59. 39.100 / 59. 39.100
> libavcodec 61. 19.100 / 61. 19.100
> libavformat 61. 7.100 / 61. 7.100
> libavdevice 61. 3.100 / 61. 3.100
> libavfilter 10. 4.100 / 10. 4.100
> libswscale 8. 3.100 / 8. 3.100
> libswresample 5. 3.100 / 5. 3.100
> libpostproc 58. 3.100 / 58. 3.100
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/wescastro/out.mp4':
> Metadata:
> major_brand : isom
> minor_version : 512
> compatible_brands: isomiso2mp41
> encoder : Lavf61.7.100
> Duration: 00:00:00.04, start: 0.000000, bitrate: 9138 kb/s
> Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v /
> 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 8335 kb/s, 25 fps, 25
> tbr, 12800 tbn (default)
> Metadata:
> handler_name : VideoHandler
> vendor_id : [0][0][0][0]
> encoder : Lavc61.19.100 mpeg4
> Side data:
> ICC Profile
> displaymatrix: rotation of -90.00 degrees
> }}}
>
> FFmpeg 7.1.1 and 7.2-dev produce the same output with `displaymatrix:
> rotation of -90.00 degrees`. On the master branch
> (5b1301004bdade13e3fee22081459e339ddd2637) the command line is completely
> broken and exits with a failure:
> {{{
> ffmpeg version N-120020-g5b1301004b Copyright (c) 2000-2025 the FFmpeg
> developers
> built with gcc 11 (GCC)
> configuration: --enable-gpl
> libavutil 60. 3.100 / 60. 3.100
> libavcodec 62. 4.100 / 62. 4.100
> libavformat 62. 1.100 / 62. 1.100
> libavdevice 62. 0.100 / 62. 0.100
> libavfilter 11. 0.100 / 11. 0.100
> libswscale 9. 0.100 / 9. 0.100
> libswresample 6. 0.100 / 6. 0.100
> Input #0, image2, from 'test_image_rotated.jpg':
> Duration: 00:00:00.04, start: 0.000000, bitrate: 9414 kb/s
> Stream #0:0: Video: mjpeg (Progressive), yuvj444p(pc,
> bt470bg/unknown/unknown), 1920x1080, 25 fps, 25 tbr, 25 tbn
> Side data:
> displaymatrix: rotation of -0.00 degrees
> Stream mapping:
> Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg4 (native))
> Press [q] to stop, [?] for help
> [vf#0:0 @ 0x300b080] Task finished with error code: -17 (File exists)
> [vf#0:0 @ 0x300b080] Terminating thread with return code -17 (File
> exists)
> [vost#0:0/mpeg4 @ 0x300ddc0] [enc:mpeg4 @ 0x300e7c0] Could not open
> encoder before EOF
> [vost#0:0/mpeg4 @ 0x300ddc0] Task finished with error code: -22 (Invalid
> argument)
> [vost#0:0/mpeg4 @ 0x300ddc0] Terminating thread with return code -22
> (Invalid argument)
> [out#0/mp4 @ 0x3007840] Nothing was written into output file, because at
> least one of its streams received no packets.
> frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A
> speed=N/A elapsed=0:00:00.01
> Conversion failed!
> }}}
New description:
Summary of the bug:
When invoking FFmpeg with a JPEG input that contains `Orientation` EXIF
metadata tag and `-noautorotate -display_rotation 0` with an MP4 output,
the output will have a display_matrix indicating a rotation starting with
FFmpeg 7.1. It is expected that the output will not be physically rotated
and not contain any display_matrix.
How to reproduce:
Use attached test file (1920x1080 JPEG image with Orientation=6 in EXIF
metadata (rotated 90 degs CCW)
{{{
ffmpeg -noautorotate -display_rotation 0 -i test_image_rotated.jpg
output.mp4
}}}
FFprobe of output produced by FFmpeg 7.0:
{{{
ffprobe version n7.0 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --enable-gpl
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/wescastro/out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf61.1.100
Duration: 00:00:00.04, start: 0.000000, bitrate: 8507 kb/s
Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v /
0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 8335 kb/s, 25 fps, 25
tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc61.3.100 mpeg4
}}}
FFprobe of output produced by FFmpeg 7.1
{{{
ffprobe version n7.1 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --enable-gpl
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.100 / 61. 19.100
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/wescastro/out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf61.7.100
Duration: 00:00:00.04, start: 0.000000, bitrate: 9138 kb/s
Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v /
0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 8335 kb/s, 25 fps, 25
tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc61.19.100 mpeg4
Side data:
ICC Profile
displaymatrix: rotation of -90.00 degrees
}}}
FFmpeg 7.1.1 and 7.2-dev produce the same output with `displaymatrix:
rotation of -90.00 degrees`. On the master branch
(5b1301004bdade13e3fee22081459e339ddd2637) the command line is completely
broken and exits with a failure:
{{{
ffmpeg version N-120020-g5b1301004b Copyright (c) 2000-2025 the FFmpeg
developers
built with gcc 11 (GCC)
configuration: --enable-gpl
libavutil 60. 3.100 / 60. 3.100
libavcodec 62. 4.100 / 62. 4.100
libavformat 62. 1.100 / 62. 1.100
libavdevice 62. 0.100 / 62. 0.100
libavfilter 11. 0.100 / 11. 0.100
libswscale 9. 0.100 / 9. 0.100
libswresample 6. 0.100 / 6. 0.100
Input #0, image2, from 'test_image_rotated.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 9414 kb/s
Stream #0:0: Video: mjpeg (Progressive), yuvj444p(pc,
bt470bg/unknown/unknown), 1920x1080, 25 fps, 25 tbr, 25 tbn
Side data:
displaymatrix: rotation of -0.00 degrees
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg4 (native))
Press [q] to stop, [?] for help
[vf#0:0 @ 0x300b080] Task finished with error code: -17 (File exists)
[vf#0:0 @ 0x300b080] Terminating thread with return code -17 (File exists)
[vost#0:0/mpeg4 @ 0x300ddc0] [enc:mpeg4 @ 0x300e7c0] Could not open
encoder before EOF
[vost#0:0/mpeg4 @ 0x300ddc0] Task finished with error code: -22 (Invalid
argument)
[vost#0:0/mpeg4 @ 0x300ddc0] Terminating thread with return code -22
(Invalid argument)
[out#0/mp4 @ 0x3007840] Nothing was written into output file, because at
least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
elapsed=0:00:00.01
Conversion failed!
}}}
--
--
Ticket URL: <https://trac.ffmpeg.org/ticket/11649#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".