GES is not rotating a *.mov file which is tagged for rotation

Mathieu Duponchelle mathieu at centricular.com
Wed Jun 5 22:35:41 UTC 2019


Hah, nice !

On 6/6/19 12:34 AM, Thibault Saunier wrote:
> GES should do it automatically since https://gitlab.freedesktop.org/gstreamer/gst-editing-services/commit/77dac21488f2217c9fc0cb7a7bfba1f5c0ef8789 can check if that works:
>
> ||||
> gst-launch-1.0 uridecodebin uri=file://your/file.move ! videoflip ! video-direction=auto ! videoconvert ! autovideosink
>
> Regards,
>
> Thibault
>
> On Wed, Jun 5, 2019 at 6:30 PM Mathieu Duponchelle <mathieu at centricular.com <mailto:mathieu at centricular.com>> wrote:
>
>     GES itself will not do that, as a standard GES source only uses uridecodebin. The way image-orientation
>     works is that the demuxer (qtdemux here) will parse the tag and forward it downstream. Other elements
>     such as videoflip can then use it to actually perform the rotation. See the difference in behaviour between
>     the following pipelines:
>
>     gst-launch-1.0 uridecodebin uri=file:///home/meh/Downloads/rotate-180.mov ! xvimagesink
>     gst-launch-1.0 uridecodebin uri=file:///home/meh/Downloads/rotate-180.mov ! videoflip video-direction=auto ! xvimagesink
>
>     It could be argued that GES should always add a videoflip element with video-direction=auto, but for now
>     you can probably add videoflip as an effect :)
>
>     On 6/5/19 11:24 PM, David Ing wrote:
>>     Also, here is the output of gst-discoverer-1.0 --verbose
>>
>>     I highlighted the relevant section which is image orientation: rotate-180.
>>
>>     $ gst-discoverer-1.0 --verbose rotate-180.mov
>>     Analyzing file:///C:/Users/ding/Desktop/rotate-180.mov
>>     Done discovering file:///C:/Users/ding/Desktop/rotate-180.mov
>>
>>     Topology:
>>       container: video/quicktime
>>         audio: audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1208, rate=(int)44100, channels=(int)1
>>           Tags:
>>             audio codec: MPEG-4 AAC audio
>>             maximum bitrate: 64000
>>             bitrate: 64000
>>             datetime: 2016-03-14T08:26:08Z
>>             QT atom: buffer of 34 bytes
>>             container format: Quicktime
>>
>>           Codec:
>>             audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1208, rate=(int)44100, channels=(int)1
>>           Additional info:
>>             None
>>           Stream ID: a2bd37016805819d7874188ad12d70943361aa53b0c7253a2b9813b7f8ab3cb5/002
>>           Language: <unknown>
>>           Channels: 1 (unknown layout)
>>           Sample rate: 44100
>>           Depth: 32
>>           Bitrate: 64000
>>           Max bitrate: 64000
>>         video: video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001067640029ac5680780227e59a8080808101000528ee04f2c0, width=(int)1920, height=(int)1080, framerate=(fraction)24/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
>>           Tags:
>>             image orientation: rotate-180
>>             video codec: H.264 / AVC
>>             bitrate: 17149794
>>             datetime: 2016-03-14T08:26:08Z
>>             QT atom: buffer of 34 bytes
>>             container format: Quicktime
>>
>>           Codec:
>>             video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001067640029ac5680780227e59a8080808101000528ee04f2c0, width=(int)1920, height=(int)1080, framerate=(fraction)24/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
>>           Additional info:
>>             None
>>           Stream ID: a2bd37016805819d7874188ad12d70943361aa53b0c7253a2b9813b7f8ab3cb5/001
>>           Width: 1920
>>           Height: 1080
>>           Depth: 24
>>           Frame rate: 24/1
>>           Pixel aspect ratio: 1/1
>>           Interlaced: false
>>           Bitrate: 17149794
>>           Max bitrate: 0
>>
>>     Properties:
>>       Duration: 0:00:10.955000000
>>       Seekable: yes
>>       Live: no
>>       Tags:
>>           audio codec: MPEG-4 AAC audio
>>           maximum bitrate: 64000
>>           bitrate: 64000
>>           datetime: 2016-03-14T08:26:08Z
>>           QT atom: buffer of 34 bytes
>>           container format: Quicktime
>>           image orientation: rotate-180
>>           video codec: H.264 / AVC
>>
>>     WARNING: no real random source present!
>>
>>     On Wed, Jun 5, 2019 at 12:51 PM David Ing <ding at panopto.com <mailto:ding at panopto.com>> wrote:
>>
>>         I have an old *.mov file ...
>>
>>         https://drive.google.com/file/d/1qNm2ISC5qnI3VN0MwemCcb_QjweJAjYF/view?usp=sharing
>>
>>         ... which is tagged in a way that indicates it should be rotated when it is displayed.  Below (at end of this message) is an excerpt from an ffprobe command which demonstrates the how the file is tagged (I highlighted the relevant output).
>>
>>         I am using the file as a GESUriClip inside of a GESTimeline, and the rotation is not being applied.  It comes through upside-down.
>>
>>         *My question is*:  Is this a bug?  Or am I expected to detect the tags manually and then modify the "video-direction" property of GESVideoSource myself?
>>
>>         ---------------------------------
>>         $ *ffprobe -v quiet -show_streams rotate-180.mov*
>>         [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=2191/105200
>>         codec_tag_string=avc1
>>         codec_tag=0x31637661
>>         width=1920
>>         height=1080
>>         coded_width=1920
>>         coded_height=1088
>>         has_b_frames=0
>>         sample_aspect_ratio=N/A
>>         display_aspect_ratio=N/A
>>         pix_fmt=yuv420p
>>         level=41
>>         color_range=tv
>>         color_space=bt709
>>         color_transfer=bt709
>>         color_primaries=bt709
>>         chroma_location=left
>>         field_order=unknown
>>         timecode=N/A
>>         refs=1
>>         is_avc=true
>>         nal_length_size=4
>>         id=N/A
>>         r_frame_rate=24/1
>>         avg_frame_rate=52600/2191
>>         time_base=1/600
>>         start_pts=0
>>         start_time=0.000000
>>         duration_ts=6573
>>         duration=10.955000
>>         bit_rate=17150952
>>         max_bit_rate=N/A
>>         bits_per_raw_sample=8
>>         nb_frames=263
>>         nb_read_frames=N/A
>>         nb_read_packets=N/A
>>         DISPOSITION:default=1
>>         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
>>         DISPOSITION:timed_thumbnails=0
>>         TAG:rotate=180
>>         TAG:creation_time=2016-03-14T08:26:08.000000Z
>>         TAG:language=und
>>         TAG:handler_name=Core Media Video
>>         TAG:encoder=H.264
>>         [SIDE_DATA]
>>         side_data_type=Display Matrix
>>         displaymatrix=
>>         00000000:       -65536           0           0
>>         00000001:            0      -65536           0
>>         00000002:    125829120    70778880  1073741824
>>
>>         rotation=-180
>>         [/SIDE_DATA]
>>         [/STREAM]
>>
>>
>>     _______________________________________________
>>     gstreamer-devel mailing list
>>     gstreamer-devel at lists.freedesktop.org <mailto:gstreamer-devel at lists.freedesktop.org>
>>     https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>     _______________________________________________
>     gstreamer-devel mailing list
>     gstreamer-devel at lists.freedesktop.org <mailto:gstreamer-devel at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190606/790914cc/attachment-0001.html>


More information about the gstreamer-devel mailing list