Я бы пошел с чистым решением CSS, используя несколько фонов.Это небольшой трюк для манипулирования, но с помощью некоторой переменной CSS вы можете легко настроить:
.box {
--th:2px; /*thickness of the transparent part*/
--l:4px; /*height of border*/
--r:25px; /*radius*/
--rad:transparent 50%,#000 50%,#000 64%,transparent 65%,transparent calc(66% + var(--th)),#000 calc(66% + var(--th));
--rad-s:var(--r) var(--r);
--border:#000 calc(var(--l)),transparent calc(var(--l)),transparent calc(var(--l) + var(--th));
--w:calc(100% - 2*var(--r) + 2*var(--th));
--h:calc(var(--l) + var(--th));
margin:10px;
display:inline-block;
padding:40px 20px;
background:
/*The 4 corners*/
linear-gradient(to bottom,var(--border)) center top/var(--w) var(--h),
linear-gradient(to top,var(--border)) center bottom/var(--w) var(--h),
linear-gradient(to right,var(--border)) center left/var(--h) var(--w),
linear-gradient(to left,var(--border)) center right/var(--h) var(--w),
/*The 4 borders */
radial-gradient(circle at top right,var(--rad)) top right/var(--rad-s),
radial-gradient(circle at top left,var(--rad)) top left/var(--rad-s),
radial-gradient(circle at bottom right,var(--rad)) bottom right/var(--rad-s),
radial-gradient(circle at bottom left,var(--rad)) bottom left/var(--rad-s),
/*The main background*/
linear-gradient(#000,#000) center/calc(100% - 2*var(--r)) calc(100% - 2*var(--h)),
linear-gradient(#000,#000) center/calc(100% - 2*var(--h)) calc(100% - 2*var(--r));
background-repeat:no-repeat;
color:#fff;
text-align:center;
}
body {
background:pink;
}
<div class="box">
Some text inside
</div>
<div class="box" style="--th:3px;--r:20px">
Some text inside
</div>
<div class="box" style="--th:4px;--r:40px;--l:8px">
Some text inside
</div>
<div class="box" style="--th:5px;--r:30px">
Some text inside
</div>
<div class="box" style="--th:1px;--r:15px;--l:3px">
Some text inside
</div>