Opened 2 years ago
Closed 2 years ago
#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 , 2 years ago
Keywords: | crop removed |
---|---|
Priority: | normal → wish |
comment:2 by , 2 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed in 69c060bea21d3b4ce63b5fff40d37e98c70ab88f