Этим запросом крайне внимательно изучаете - удовлетворяет ли вас результат преобразования строк в result_mod_f1 из mod_f1, и result_mod_f2 из mod_f2.
select mod_f1, replace(mod_f1, '.png', '.webp') as result_mod_f1,
mod_f2, replace(mod_f2, '.png', '.webp') as result_mod_f2
from table
Если что-то не устраивает, переписываете replace-ы.
Если что-то переписали, то заменяете выражения в правых частях после знака =, чтобы преобразование mod_f1 соответствовало mod_f1, а преобразование mod_f2 для mod_f2.
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')*/
Снимаете комментарий, словно собираетесь открыть защитную крышку на красной кнопке атомной бомбы и выполняете запрос.
ПС: Желательно делать это в программном средстве, которое поддерживает режим незакрытой транзакции, чтобы можно было откатить.
ППС: Если таблица очень большая, то лучше обновлять порциями.
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')
where mod_f1 like '%.png%'
or mod_f2 like '%.png%'
LIMIT 1000 */