#9851 closed enhancement (fixed)

cropdetect: add ability to change option like limit at runtime

Reported by: Ashyni Owned by:
Priority: wish Component: avfilter
Version: git-master Keywords: cropdetect
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Hello,

I have been working on a dynamic-crop.lua script for the player mpv for a while.
https://github.com/Ashyni/mpv-scripts#dynamic-croplua

The script auto adjusts the limit option of the cropdetect filter every time a metadata show sign of dark scene to try to find a coherent crop if any.

Every limit change re-init cropdetect filter and cause an impact in performance depending on the gpu-api used by mpv from 50% in fps drop (opengl, more impact with gpu-context=angle) to almost no visible impact (vulkan/d3d11).

Maybe something can be done on mpv side, but i wonder if it's possible to make changing options like limit/reset at runtime a better solution for this use case when cropdetect filter is always active from start to end of the video.

mpv 0.34.0-384-gd2467f61be

built on Sun Jul 24 12:31:39 2022

FFmpeg version: git-2022-07-23-1cb7fd317
FFmpeg library versions:

libavutil 57.30.100
libavcodec 59.39.100
libavformat 59.29.100
libswscale 6.8.101
libavfilter 8.46.100
libswresample 4.8.100

Some logs:

[ 477.682][v][ffmpeg] filter: x1:0 x2:1919 y1:0 y2:1079 w:1920 h:1080 x:0 y:0 pts:107941000 t:107.941000 crop=1920:1080:0:0
[ 477.724][v][ffmpeg] filter: x1:0 x2:1919 y1:0 y2:1079 w:1920 h:1080 x:0 y:0 pts:107983000 t:107.983000 crop=1920:1080:0:0
[ 477.767][v][ffmpeg] filter: x1:1919 x2:0 y1:1079 y2:0 w:-1918 h:-1078 x:1920 y:1080 pts:108025000 t:108.025000 crop=-1918:-1078:1920:1080
[ 477.808][v][ffmpeg] filter: x1:1919 x2:0 y1:1079 y2:0 w:-1918 h:-1078 x:1920 y:1080 pts:108066000 t:108.066000 crop=-1918:-1078:1920:1080
[ 477.808][d][cplayer] Run command: vf, flags=72, args=[operation="pre", value="@dynamic_crop-cropdetect:lavfi-cropdetect=limit=24/255:round=2:reset=1:skip=1"]
[ 477.809][d][ffmpeg] filter: limit:0.094118 round:2 skip:1 reset_count:1
[ 477.809][v][vf] User filter list:
[ 477.809][v][vf]   lavfi-cropdetect (dynamic_crop-cropdetect)
[ 477.809][v][vf]   lavfi-crop (dynamic_crop-crop)
[ 477.849][v][vf] [lavfi-cropdetect] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 477.849][d][ffmpeg] mpv_src_default_in: w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 fr:992008/41375 sar:1/1
[ 477.892][v][ffmpeg] filter: x1:1919 x2:0 y1:741 y2:759 w:-1918 h:18 x:1920 y:742 pts:108150000 t:108.150000 crop=-1918:18:1920:742
[ 477.933][v][ffmpeg] filter: x1:1919 x2:0 y1:741 y2:758 w:-1918 h:16 x:1920 y:742 pts:108191000 t:108.191000 crop=-1918:16:1920:742
[ 477.933][d][cplayer] Run command: vf, flags=72, args=[operation="pre", value="@dynamic_crop-cropdetect:lavfi-cropdetect=limit=22/255:round=2:reset=1:skip=1"]
[ 477.934][d][ffmpeg] filter: limit:0.086275 round:2 skip:1 reset_count:1
[ 477.935][v][vf] User filter list:
[ 477.935][v][vf]   lavfi-cropdetect (dynamic_crop-cropdetect)
[ 477.935][v][vf]   lavfi-crop (dynamic_crop-crop)
[ 477.974][v][vf] [lavfi-cropdetect] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 477.974][d][ffmpeg] mpv_src_default_in: w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 fr:992008/41375 sar:1/1
[ 478.017][v][ffmpeg] filter: x1:885 x2:1510 y1:437 y2:784 w:624 h:346 x:886 y:438 pts:108275000 t:108.275000 crop=624:346:886:438
[ 478.058][v][ffmpeg] filter: x1:884 x2:1509 y1:438 y2:784 w:626 h:346 x:884 y:438 pts:108317000 t:108.317000 crop=626:346:884:438
[ 478.058][d][cplayer] Run command: vf, flags=72, args=[operation="pre", value="@dynamic_crop-cropdetect:lavfi-cropdetect=limit=20/255:round=2:reset=1:skip=1"]
[ 478.059][d][ffmpeg] filter: limit:0.078431 round:2 skip:1 reset_count:1
[ 478.060][v][vf] User filter list:
[ 478.060][v][vf]   lavfi-cropdetect (dynamic_crop-cropdetect)
[ 478.060][v][vf]   lavfi-crop (dynamic_crop-crop)
[ 478.099][v][vf] [lavfi-cropdetect] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 478.099][d][ffmpeg] mpv_src_default_in: w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 fr:992008/41375 sar:1/1
[ 478.141][v][ffmpeg] filter: x1:820 x2:1673 y1:139 y2:940 w:854 h:800 x:820 y:140 pts:108400000 t:108.400000 crop=854:800:820:140
[ 478.184][v][ffmpeg] filter: x1:818 x2:1672 y1:139 y2:940 w:854 h:800 x:818 y:140 pts:108442000 t:108.442000 crop=854:800:818:140
[ 478.184][d][cplayer] Run command: vf, flags=72, args=[operation="pre", value="@dynamic_crop-cropdetect:lavfi-cropdetect=limit=18/255:round=2:reset=1:skip=1"]
[ 478.185][d][ffmpeg] filter: limit:0.070588 round:2 skip:1 reset_count:1
[ 478.185][v][vf] User filter list:
[ 478.185][v][vf]   lavfi-cropdetect (dynamic_crop-cropdetect)
[ 478.185][v][vf]   lavfi-crop (dynamic_crop-crop)
[ 478.224][v][vf] [lavfi-cropdetect] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 478.224][d][ffmpeg] mpv_src_default_in: w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 fr:992008/41375 sar:1/1
[ 478.265][v][ffmpeg] filter: x1:0 x2:1919 y1:138 y2:941 w:1920 h:804 x:0 y:138 pts:108525000 t:108.525000 crop=1920:804:0:138
[ 478.308][v][ffmpeg] filter: x1:0 x2:1919 y1:138 y2:941 w:1920 h:804 x:0 y:138 pts:108567000 t:108.567000 crop=1920:804:0:138
[ 478.348][v][ffmpeg] filter: x1:0 x2:1919 y1:138 y2:941 w:1920 h:804 x:0 y:138 pts:108608000 t:108.608000 crop=1920:804:0:138
[ 478.391][v][ffmpeg] filter: x1:0 x2:1919 y1:138 y2:941 w:1920 h:804 x:0 y:138 pts:108650000 t:108.650000 crop=1920:804:0:138
[ 478.391][v][cplayer] Set property: geometry="1920" -> 1
[ 478.391][d][cplayer] Run command: vf, flags=72, args=[operation="append", value="@dynamic_crop-crop:lavfi-crop=w=1920:h=804:x=0:y=138"]
[ 478.393][v][vf] User filter list:
[ 478.393][v][vf]   lavfi-cropdetect (dynamic_crop-cropdetect)
[ 478.393][v][vf]   lavfi-crop (dynamic_crop-crop)
[ 478.433][v][ffmpeg] filter: x1:0 x2:1919 y1:138 y2:941 w:1920 h:804 x:0 y:138 pts:108692000 t:108.692000 crop=1920:804:0:138
[ 478.433][v][vf] [lavfi-crop] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 478.433][d][ffmpeg] mpv_src_default_in: w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 fr:992008/41375 sar:1/1
[ 478.433][d][ffmpeg] filter: w:1920 h:1080 sar:1/1 -> w:1920 h:804 sar:1/1
[ 478.433][v][vf] [autorotate] 1920x804 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 478.433][v][vf] [convert] 1920x804 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[ 478.433][v][vf] [out] 1920x804 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264

Change History (2)

comment:1 by Carl Eugen Hoyos, 20 months ago

Keywords: crop removed
Priority: normalwish

comment:2 by Elon Musk, 15 months ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.