Opened 6 years ago
Last modified 23 months ago
#7437 new enhancement
clap atom values ignored by ffmpeg
| Reported by: | kieranjol | Owned by: | |
|---|---|---|---|
| Priority: | wish | Component: | avformat |
| Version: | git-master | Keywords: | mov cropping |
| Cc: | Christian Ebert | Blocked By: | |
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
Sample file - https://we.tl/t-KoBK9MnSLu
My MOV file contains a clap atom that defines the clean aperture width as 703/576, but an actual width of 720/576. QuickTime player will perform a crop and only display the 703/576 area. When remuxing to Matroska or other containers, I would have assumed that the expected behaviour would involve this cropping information being written to the remuxed file, probably using the various PixelCrop values within Matroska ( https://matroska.org/technical/specs/index.html ) Specifically, this value is stored in the QuickTime file using numerators and demoninators as such:
$ mediainfo --Details=1 clap.mov | grep clap -n10 284-ECE5C05C Clean Aperture (40 bytes) 285-ECE5C05C Header (8 bytes) 286-ECE5C05C Size: 40 (0x00000028) 287:ECE5C060 Name: clap 288-ECE5C064 apertureWidth_N: 41472 (0x0000A200) 289-ECE5C068 apertureWidth_D: 59 (0x0000003B) 290-ECE5C06C apertureHeight_N: 576 (0x00000240) 291-ECE5C070 apertureHeight_D: 1 (0x00000001) 292-ECE5C074 horizOff_N: 0 (0x00000000) 293-ECE5C078 horizOff_D: 1 (0x00000001) 294-ECE5C07C vertOff_N: 0 (0x00000000) 295-ECE5C080 vertOff_D: 1 (0x00000001)
It is somewhat related to this issue https://trac.ffmpeg.org/ticket/1485
How to reproduce:
Using my sample file - I would expect the following command to include the cropping information but it does not. ffprobe does not seem to read this cropping info, so mediainfo is useful to check the clap values. My sample was generated directly from a VHS capture using the Blackmagic Intensity Shuttle, with lots of dropped frames which doesn't relate to this issue
% $ ffmpeg -i clap.mov -c copy mkv.mkv
ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-ffplay --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libtesseract --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.3.0/include/openjpeg-2.3
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
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clap.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2018-09-13T08:48:41.000000Z
Duration: 00:00:01.00, start: 0.000000, bitrate: 80686 kb/s
Stream #0:0(eng): Video: v210 (v210 / 0x30313276), yuv422p10le(smpte170m/bt470bg/bt709, top coded first (swapped)), 720x576, 79626 kb/s, SAR 59:54 DAR 295:216, 9 fps, 25 tbr, 25k tbn, 25k tbc (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Alias Data Handler
encoder : Uncompressed 10-Bit YUV
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Alias Data Handler
timecode : 00:00:00:00
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Alias Data Handler
reel_name : 001
timecode : 00:00:00:00
Output #0, matroska, to 'mkv.mkv':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
encoder : Lavf58.12.100
Stream #0:0(eng): Video: v210 (v210 / 0x30313276), yuv422p10le(smpte170m/bt470bg/bt709, top coded first (swapped)), 720x576 [SAR 59:54 DAR 295:216], q=2-31, 79626 kb/s, 9 fps, 25 tbr, 1k tbn, 25k tbc (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Alias Data Handler
encoder : Uncompressed 10-Bit YUV
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s24le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Alias Data Handler
timecode : 00:00:00:00
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 9 fps=0.0 q=-1.0 Lsize= 9834kB time=00:00:00.40 bitrate=200899.4kbits/s speed=10.3x
video:9720kB audio:112kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.017699%
Patches should be submitted to the ffmpeg-devel mailing list and not this bug tracker.
Change History (13)
comment:1 by , 5 years ago
comment:2 by , 5 years ago
| Keywords: | mov added |
|---|
Is the issue you see reproducible with current FFmpeg git head?
comment:3 by , 5 years ago
Hi Carl, yes it is. I see no evidence of crop values in the matroska file and ffprobe does not detect clean aperture values in the source
$ ./ffmpeg -i clap.mov -c copy mkv.mkv
ffmpeg version N-92510-gfa08345e88 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration:
libavutil 56. 23.101 / 56. 23.101
libavcodec 58. 39.100 / 58. 39.100
libavformat 58. 22.100 / 58. 22.100
libavdevice 58. 6.100 / 58. 6.100
libavfilter 7. 46.100 / 7. 46.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clap.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2018-09-13T08:48:41.000000Z
Duration: 00:00:01.00, start: 0.000000, bitrate: 80686 kb/s
Stream #0:0(eng): Video: v210 (v210 / 0x30313276), yuv422p10le(smpte170m/bt470bg/bt709, top coded first (swapped)), 720x576, 79626 kb/s, SAR 59:54 DAR 295:216, 9 fps, 25 tbr, 25k tbn, 25k tbc (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Video Media Handler
encoder : Uncompressed 10-Bit YUV
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Sound Media Handler
timecode : 00:00:00:00
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : Time Code Media Handler
reel_name : 001
timecode : 00:00:00:00
Output #0, matroska, to 'mkv.mkv':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
encoder : Lavf58.22.100
Stream #0:0(eng): Video: v210 (v210 / 0x30313276), yuv422p10le(smpte170m/bt470bg/bt709, top coded first (swapped)), 720x576 [SAR 59:54 DAR 295:216], q=2-31, 79626 kb/s, 9 fps, 25 tbr, 1k tbn, 25k tbc (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Video Media Handler
encoder : Uncompressed 10-Bit YUV
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s24le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Sound Media Handler
timecode : 00:00:00:00
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 9 fps=0.0 q=-1.0 Lsize= 9834kB time=00:00:00.40 bitrate=200899.4kbits/s speed=5.21x
video:9720kB audio:112kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.017719%
$ ./ffprobe -show_streams -show_format -select_streams v:0 clap.mov
ffprobe version N-92510-gfa08345e88 Copyright (c) 2007-2018 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration:
libavutil 56. 23.101 / 56. 23.101
libavcodec 58. 39.100 / 58. 39.100
libavformat 58. 22.100 / 58. 22.100
libavdevice 58. 6.100 / 58. 6.100
libavfilter 7. 46.100 / 7. 46.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clap.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2018-09-13T08:48:41.000000Z
Duration: 00:00:01.00, start: 0.000000, bitrate: 80686 kb/s
Stream #0:0(eng): Video: v210 (v210 / 0x30313276), yuv422p10le(smpte170m/bt470bg/bt709, top coded first (swapped)), 720x576, 79626 kb/s, SAR 59:54 DAR 295:216, 9 fps, 25 tbr, 25k tbn, 25k tbc (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Video Media Handler
encoder : Uncompressed 10-Bit YUV
timecode : 00:00:00:00
Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : ?Apple Sound Media Handler
timecode : 00:00:00:00
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
creation_time : 2018-09-13T08:48:41.000000Z
handler_name : Time Code Media Handler
reel_name : 001
timecode : 00:00:00:00
Unsupported codec with id 0 for input stream 2
[STREAM]
index=0
codec_name=v210
codec_long_name=Uncompressed 4:2:2 10-bit
profile=unknown
codec_type=video
codec_time_base=1/9
codec_tag_string=v210
codec_tag=0x30313276
width=720
height=576
coded_width=720
coded_height=576
has_b_frames=0
sample_aspect_ratio=59:54
display_aspect_ratio=295:216
pix_fmt=yuv422p10le
level=-99
color_range=unknown
color_space=smpte170m
color_transfer=bt709
color_primaries=bt470bg
chroma_location=unspecified
field_order=tb
timecode=N/A
refs=1
id=N/A
r_frame_rate=25/1
avg_frame_rate=9/1
time_base=1/25000
start_pts=0
start_time=0.000000
duration_ts=25000
duration=1.000000
bit_rate=79626240
max_bit_rate=N/A
bits_per_raw_sample=10
nb_frames=9
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:creation_time=2018-09-13T08:48:41.000000Z
TAG:language=eng
TAG:handler_name=Apple Video Media Handler
TAG:encoder=Uncompressed 10-Bit YUV
TAG:timecode=00:00:00:00
[/STREAM]
[FORMAT]
filename=clap.mov
nb_streams=3
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=1.000000
size=10085813
bit_rate=80686504
probe_score=100
TAG:major_brand=qt
TAG:minor_version=537199360
TAG:compatible_brands=qt
TAG:creation_time=2018-09-13T08:48:41.000000Z
[/FORMAT]
comment:4 by , 5 years ago
Hi Carl,
This handling of Clap Atom into the FFV1 Matroska is also a major factor for the BFI, as we aim to transcode MOVs to FFV1 Matroska for preservation in our repository. We would aim to retain the Clap Atom into the PixelCrop or alternative if there is a preferred approach to map clap atom to Matroska output.
All the best,
Stephen
follow-up: 6 comment:5 by , 5 years ago
| Keywords: | cropping added |
|---|---|
| Version: | unspecified → git-master |
Regarding the title of this ticket: Do I understand correctly that the issue you see is only reproducible when remuxing to matroska?
follow-up: 7 comment:6 by , 5 years ago
Replying to cehoyos:
Regarding the title of this ticket: Do I understand correctly that the issue you see is only reproducible when remuxing to matroska?
Kind of. I think ultimately the issue is that ffmpeg does not detect clean aperture values, and when remuxing to any container, this context is lost. I am specifically interested in the mapping of these values to Matroska, and I would consider the PixelCrop values to be the suitable destination for these values. You could say that there should be a mapping to AVI/MXF etc but I don't know about those containers.
Some extra info : https://mailarchive.ietf.org/arch/msg/cellar/QL7-L5ljb4MtlnvZEUsggYsKbjc
follow-up: 8 comment:7 by , 5 years ago
Replying to kieranjol:
Replying to cehoyos:
Regarding the title of this ticket: Do I understand correctly that the issue you see is only reproducible when remuxing to matroska?
Kind of.
Really?
I think ultimately the issue is that ffmpeg does not detect clean aperture values
Can we agree that this issue is completely unrelated to matroska and the (first) issue is simply that FFmpeg ignores the clap atom in mov files?
follow-up: 9 comment:8 by , 5 years ago
Replying to cehoyos:
Replying to kieranjol:
Replying to cehoyos:
Regarding the title of this ticket: Do I understand correctly that the issue you see is only reproducible when remuxing to matroska?
Kind of.
Really?
I think ultimately the issue is that ffmpeg does not detect clean aperture values
Can we agree that this issue is completely unrelated to matroska and the (first) issue is simply that FFmpeg ignores the clap atom in mov files?
Yes, firstly - FFmpeg should be able to read the clap atom prior to this issue being fixed. I think this issue should stay open as I think there should be a mapping between clap and PixelCrop. Should I start a new issue that's just 'FFmpeg ignores clap atom'?
comment:9 by , 5 years ago
Replying to kieranjol:
Replying to cehoyos:
Replying to kieranjol:
Replying to cehoyos:
Regarding the title of this ticket: Do I understand correctly that the issue you see is only reproducible when remuxing to matroska?
Kind of.
Really?
I think ultimately the issue is that ffmpeg does not detect clean aperture values
Can we agree that this issue is completely unrelated to matroska and the (first) issue is simply that FFmpeg ignores the clap atom in mov files?
Yes, firstly - FFmpeg should be able to read the clap atom prior to this issue being fixed. I think this issue should stay open as I think there should be a mapping between clap and PixelCrop. Should I start a new issue that's just 'FFmpeg ignores clap atom'?
Just to clarify, I agree that this issue is jumping too far ahead and that the clap atom support needs to come first. The request for a mapping requires clap support. But I think the mapping is important so I'd like to leave the ticket open.
follow-up: 11 comment:10 by , 5 years ago
| Component: | undetermined → avformat |
|---|---|
| Priority: | normal → wish |
| Summary: | clap atom values ignored by ffmpeg when remuxing to matroska → clap atom values ignored by ffmpeg |
| Type: | defect → enhancement |
comment:11 by , 5 years ago
Replying to cehoyos:
Please can I add a big +1 to this request Carl. Many thanks!
comment:12 by , 4 years ago
http://ffmpeg.org/pipermail/ffmpeg-devel/2020-April/261465.html a patch that refers to this ticket was posted to ffmpeg-devel btw
comment:13 by , 23 months ago
| Cc: | added |
|---|



https://archive.org/details/kieran_Clap
You should be able to download the original mov here.