[FFmpeg-trac] #1705(undetermined:new): Wrong pixel format for overlay
FFmpeg
trac at avcodec.org
Fri Aug 31 09:59:12 CEST 2012
#1705: Wrong pixel format for overlay
-------------------------------------+-------------------------------------
Reporter: jwjwjw | Type: defect
Status: new | Priority: normal
Component: | Version:
undetermined | unspecified
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
The overlay filter uses an intermediate yuv420p pixel format regardless of
the input format, format of the overlay, and intended output format. This
can be demonstrated by using an RGBA overlay graphic in a small-ish font
with a saturated colour on top of an RGB24 input file which is output also
using RGB24. The resulting file shows the telltale signs of 4:2:0
chrominance loss despite using RGB in all stages of the chain.
Both commands below produce the same output:
ffmpeg -i background.png -i overlay.png -filter_complex "overlay=0:0"
-pix_fmt rgb24 output.png
ffmpeg -i background.png -vf "movie=overlay.png [movie]; [in] [movie]
overlay=0:0 [out]" -pix_fmt rgb24 output.png
How to reproduce:
{{{
ffmpeg -i background.png -vf "movie=overlay.png [movie]; [in] [movie]
overlay=0:0 [out]" -pix_fmt rgb24 output.png
ffmpeg version N-43973-g028b6d2b Copyright (c) 2000-2012 the FFmpeg
developers
built on Aug 31 2012 06:26:09 with gcc 4.4.5 (Debian 4.4.5-8)
configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g
' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis
--enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc
--enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-
amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex
--enable-nonfree --disable-stripping --enable-avfilter --enable-
libschroedinger --disable-encoder=libschroedinger --enable-version3
--enable-libopenjpeg --enable-libvpx --extra-libs=-lgcrypt --disable-
altivec --disable-armv5te --disable-armv6 --disable-vis
libavutil 51. 70.100 / 51. 70.100
libavcodec 54. 54.100 / 54. 54.100
libavformat 54. 25.104 / 54. 25.104
libavdevice 54. 2.100 / 54. 2.100
libavfilter 3. 14.100 / 3. 14.100
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
[AVIOContext @ 0x1ad77c0] Statistics: 4205 bytes read, 0 seeks
Input #0, image2, from 'background.png':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0:0, 1, 1/25: Video: png, rgb24, 640x360, 25 tbr, 25 tbn, 25
tbc
[AVIOContext @ 0x1acca60] Statistics: 5980 bytes read, 0 seeks
[Parsed_movie_0 @ 0x1acfe00] seek_point:0 format_name:(null)
file_name:overlay.png stream_index:-1
[buffer @ 0x1acccc0] Setting entry with key 'video_size' to value
'640x360'
[buffer @ 0x1acccc0] Setting entry with key 'pix_fmt' to value '28'
[buffer @ 0x1acccc0] Setting entry with key 'time_base' to value '1/25'
[buffer @ 0x1acccc0] Setting entry with key 'pixel_aspect' to value '0/1'
[buffer @ 0x1acccc0] Setting entry with key 'sws_param' to value 'flags=2'
[buffer @ 0x1acccc0] Setting entry with key 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x1accec0] w:640 h:360 pixfmt:rgba
tb:1/25 fr:25/1 sar:0/1 sws_param:flags=2
[Parsed_overlay_1 @ 0x1accf80] auto-inserting filter 'auto-inserted scaler
0' between the filter 'graph 0 input from stream 0:0' and the filter
'Parsed_overlay_1'
[Parsed_overlay_1 @ 0x1accf80] auto-inserting filter 'auto-inserted scaler
1' between the filter 'Parsed_movie_0' and the filter 'Parsed_overlay_1'
[format @ 0x1ad78c0] auto-inserting filter 'auto-inserted scaler 2'
between the filter 'Parsed_overlay_1' and the filter 'format'
[auto-inserted scaler 0 @ 0x1ad6b40] w:640 h:360 fmt:rgba sar:0/1 -> w:640
h:360 fmt:yuv420p sar:0/1 flags:0x4
[auto-inserted scaler 1 @ 0x1ad97c0] w:640 h:360 fmt:rgba sar:1/1 -> w:640
h:360 fmt:yuva420p sar:1/1 flags:0x4
[Parsed_overlay_1 @ 0x1accf80] main w:640 h:360 fmt:yuv420p overlay x:0
y:0 w:640 h:360 fmt:yuva420p
[Parsed_overlay_1 @ 0x1accf80] main_tb:1/25 overlay_tb:1/25 -> tb:1/25
exact:1
[auto-inserted scaler 2 @ 0x1ad8620] w:640 h:360 fmt:yuv420p sar:0/1 ->
w:640 h:360 fmt:rgb24 sar:0/1 flags:0x4
Output #0, image2, to 'output.png':
Metadata:
encoder : Lavf54.25.104
Stream #0:0, 0, 1/90000: Video: png, rgb24, 640x360, q=2-31, 200 kb/s,
90k tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> png)
Press [q] to stop, [?] for help
[output stream 0:0 @ 0x1ad6fc0] EOF on sink link output stream
0:0:default.
No more output streams to write to, finishing.
frame= 1 fps=0.0 q=0.0 Lsize= 0kB time=00:00:00.04 bitrate=
0.0kbits/s
video:2kB audio:0kB subtitle:0 global headers:0kB muxing overhead
-100.000000%
}}}
--
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1705>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list