Это известная проблема, и одно возможное решение предоставляется drop.levels()
в пакете gdata , где ваш пример становится
> drop.levels(subdf)
letters numbers
1 a 1
2 b 2
3 c 3
> levels(drop.levels(subdf)$letters)
[1] "a" "b" "c"
Существует также dropUnusedLevels
в пакете Hmisc . Однако он работает только путем изменения оператора подмножества [
и здесь неприменим.
В качестве следствия прямой подход на основе столбца является простым as.factor(as.character(data))
:
> levels(subdf$letters)
[1] "a" "b" "c" "d" "e"
> subdf$letters <- as.factor(as.character(subdf$letters))
> levels(subdf$letters)
[1] "a" "b" "c"
Я думаю, что вы ищете sendcmd , который поддерживается несколькими фильтрами. См. документацию по фильтрам FFmpeg (поиск по sendcmd).
Используйте фильтры zmq и azmq . В отличие от фильтра sendcmd, который использует предварительно записанные команды, (a) zmq позволяет произвольно отправлять команды фильтра.
Чтобы включить эти фильтры, необходимо установить библиотеку libzmq и заголовки и настроить ffmpeg
с помощью --enable-libzmq
.
Только фильтры, которые поддерживают команды, могут использоваться с этим фильтром. Обратитесь к выводу ffmpeg -filters
, чтобы просмотреть список фильтров, которые поддерживают команды. Кроме того, не все параметры фильтра считаются командами. Обратитесь к документации каждого фильтра для получения списка поддерживаемых команд.
Рассмотрим следующий фильтр-график, сгенерированный ffplay. В этом примере последний фильтр наложения имеет имя экземпляра. Все остальные фильтры будут иметь имена экземпляров по умолчанию.
ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l] overlay [bg+l];
[bg+l][r] overlay@my=x=100 "
Чтобы изменить цвет левой стороны видео, можно использовать следующую команду:
echo Parsed_color_0 c yellow | tools/zmqsend
Чтобы изменить правую сторону:
echo Parsed_color_1 c pink | tools/zmqsend
На изменить положение правой стороны:
echo overlay@my x 150 | tools/zmqsend
<час>