Некоторые параметры могут быть предоставлены ffmpeg с использованием предустановленных файлов, см. Документацию здесь. Таким образом, в htop должно быть видно только имя файла предустановки.
В этом ответе можно найти некоторые подсказки по предварительно настроенным файлам. Исходя из того, что я почерпнул из документации, вы не сможете скрыть параметр кодека, только параметры, заданные для этого кодека.
Больше практических примеров можно найти здесь.
Судя по вашему примеру, вы не предоставляете ни одной из этих опций, которые могли бы быть записаны в заданный файл.
Входной файл может быть передан через стандартный ввод, указав специальный файл -
и обжигающе содержимое файла FFmpeg следующим образом:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium out.mkv
Отображение htop этой команды выглядит следующим образом:htop extract 1
Выходной файл может, так же, будет изменен на специальный файл -
который будет перенаправлять преобразованный файл на стандартный вывод. Для этого вы должны указать формат контейнера вручную, так как ffmpeg не сможет угадать его по имени файла.
Затем вы можете передать преобразованные данные в файл назначения. Это может выглядеть так:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
Экран htop этой команды выглядит следующим образом: htop extract 2
Я не знаю, при каких обстоятельствах htop будет отображать файл, по которому идет передача, но я думаю, что это обрабатывается внутри оболочки, так что, вероятно, он также не будет отображаться в оболочках, отличных от zsh
.
Чтобы также скрыть cat input.ext
от htop, вы можете использовать, например, такой небольшой скрипт на python, чтобы прочитать имя файла из текстового файла и скопировать содержимое в stdout:
#!/usr/bin/env python
from __future__ import print_function
import shutil
import sys
# Print errors to stderr, since we will pipe to stdout
# For an explanation, see https://stackoverflow.com/questions/5574702/how-to-print-to-stderr-in-python
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
# Check if there is a filename given
if len(sys.argv) < 2:
eprint("Please specify an input file")
sys.exit(1)
# Open the file and read the first line
try:
fl = open(sys.argv[1], "r")
filename = fl.readline().strip()
fl.close()
except Exception as e:
eprint("Could not read filename from " + sys.argv[1])
eprint(e)
sys.exit(1)
# Pipe the content from the file to standard output
try:
with open(filename, "rb") as ffmpegInput:
if sys.version_info >= (3, 0):
# Python 3
shutil.copyfileobj(ffmpegInput, sys.stdout.buffer)
else:
# Python 2
shutil.copyfileobj(ffmpegInput, sys.stdout)
except Exception as e:
eprint("Could not pipe input file " + filename)
eprint(e)
sys.exit(1)
Использование может быть таким, тогда как filename.txt - это простой текстовый файл, содержащий одну строку текста, содержащую видеофайл для чтения, kooky_720p.mp4
в нашем примере.
./pipe.py filename.txt | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
Экран htop этой команды выглядит следующим образом: htop extract 3
Я верю, что это самое близкое к тому, что вы сможете скрыть информацию от htop. Помните, однако, что все еще можно получить информацию о том, какие файлы вы обрабатываете, посмотрев на дескрипторы открытых файлов, например, с помощью lsof
:
$ pidof python3
... 19013 ...
$ lsof -a -p 19013
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 19013 oliver cwd DIR 8,84 4096 31197648 /home/oliver/Videos/Kooky
python3 19013 oliver rtd DIR 8,66 4096 2 /
python3 19013 oliver txt REG 8,66 9992 7781733 /usr/bin/python3.6
python3 19013 oliver mem REG 8,66 11752 8020773 /usr/lib/python3.6/lib-dynload/grp.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 154344 7743563 /usr/lib/liblzma.so.5.2.3
python3 19013 oliver mem REG 8,66 36856 8012780 /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 66960 7739636 /usr/lib/libbz2.so.1.0.6
python3 19013 oliver mem REG 8,66 21400 8012783 /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 92056 7736853 /usr/lib/libz.so.1.2.11
python3 19013 oliver mem REG 8,66 36744 8012786 /usr/lib/python3.6/lib-dynload/zlib.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 21384 8020788 /usr/lib/python3.6/lib-dynload/_heapq.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 3268160 7787080 /usr/lib/locale/locale-archive
python3 19013 oliver mem REG 8,66 1358168 7735428 /usr/lib/libm-2.26.so
python3 19013 oliver mem REG 8,66 10048 7735415 /usr/lib/libutil-2.26.so
python3 19013 oliver mem REG 8,66 14144 7735429 /usr/lib/libdl-2.26.so
python3 19013 oliver mem REG 8,66 3327592 7785916 /usr/lib/libpython3.6m.so.1.0
python3 19013 oliver mem REG 8,66 2065840 7735493 /usr/lib/libc-2.26.so
python3 19013 oliver mem REG 8,66 145336 7735516 /usr/lib/libpthread-2.26.so
python3 19013 oliver mem REG 8,66 176880 7735494 /usr/lib/ld-2.26.so
python3 19013 oliver 0u CHR 136,1 0t0 4 /dev/pts/1
python3 19013 oliver 1w FIFO 0,11 0t0 1276096 pipe
python3 19013 oliver 2u CHR 136,1 0t0 4 /dev/pts/1
python3 19013 oliver 3r REG 8,84 4363354747 31198177 /home/oliver/Videos/Kooky/kooky_720p.mp4
Как вы можете видеть, здесь перечислены видеофайлы, которые я использовал здесь в качестве примера. Выходной файл будет отображаться в дескрипторах процесса ffmpeg.