smartblur = enable='between(t,10,3*60)',
curves = enable='gte(t,3)' : preset=cross_process
Выражения типа between()
и gte()
описаны в Expression evaluationffmpeg -filters
покажет, какие из фильтров подерживают timeline (буква "T").colorchannelmixer
и eq
из вашей команды — поддерживают:Filters:
T.. = Timeline support
.S. = Slice threading
..C = Command support
A = Audio input/output
V = Video input/output
N = Dynamic number and/or type of input/output
| = Source or sink filter
TSC colorchannelmixer V->V Adjust colors by mixing color channels.
T.C eq V->V Adjust brightness, contrast, gamma, and saturation.
function getLargestExpressionResult(a, b) {
let x, max = a + b;
x = a - b;
if (x > max) max = x;
x = a * b;
if (x > max) max = x;
x = a / b;
if (x > max) max = x;
return max;
}
Затем попробуйте оптимизировать, сократить, написать красивее и т.п., если время позволяет.const getLargestExpressionResult = (a, b) => '+-*/'
.split('')
.map(op => eval([+a, op, +b].join('')))
.sort((a, b) => a - b)
.pop();
Это плохой переусложнённый пример, т.к. тут много строк и eval()
— потенциальная дыра в безопасности.eval()
© когда в нем часто перерисовывается DOM деревоне совсем: когда действительно прям весь DOM должен меняться часто-постоянно, фишки теневого DOM мало улучшат ситуацию.
const data = [{"id":1,"status":"CREATED"},{"id":2,"status":"CANCELED"}];
const RU_CREATED = 'СОЗДАНО';
const RU_CANCELED = 'ОТМЕНЕНО';
const translate = (data, lang) => data.forEach(item => {
console.log(`id: ${item.id}, status: ${eval(lang + '_' + item.status)}`);
});
translate(data, 'RU');
// id: 1, status: СОЗДАНО
// id: 2, status: ОТМЕНЕНО
В проде конечно не стоит использовать eval()
, и вместо этого сделать не константы, а «словарь» — объект с ключами как статусы, и значениями их переводами: const dict = {
RU: {
CREATED: 'СОЗДАНО',
CANCELED: 'ОТМЕНЕНО',
},
DE: {
CREATED: 'ERSTELLT',
CANCELED: 'ABGESAGT',
},
};
[-][HH:]MM:SS[.m...]
— ваш вариант, вполне легитимный.-ss 2208ms
if (data) { ... длинная простыня кода }
, при отсутствии else
лучше заменить на:if (! data) return;
...тот же код, на уровень левее
if()
и тем более внутри цикла for()
ffmpeg \
-i head-1920.jpg \
-vf rgbashift=rh=20:bh=-20 \
-hide_banner -y \
test-result.jpg
0000DD, 0000C8
«расстояние» будет такое:(0x00 - 0x00)^2 + (0x00 - 0x00)^2 + (0xDD - 0xC8)^2 = 441
Так посчитать до каждого из определённых цветов, найти минимум.b1.addEventListener('click', () => {
const tasks = [
{text: "Заварить кофе", isDone: false},
{text: "Пожарить яичницу", isDone: false},
{text: "продрать глаза", isDone: true},
];
Сохранять в LS сериализованный в JSON этот массив:const itemKey = 'tasks';
localStorage.setItem(itemKey, JSON.stringify(tasks));