Algumas opções podem ser dadas ao ffmpeg usando arquivos predefinidos, verifique a documentação aqui . Dessa forma, somente o nome do arquivo predefinido deve estar visível no htop. Algumas dicas sobre arquivos predefinidos podem ser encontradas em esta resposta . Pelo que eu reuni da documentação, você não poderá ocultar o parâmetro codec, apenas as opções dadas a esse codec. Mais exemplos práticos podem ser encontrados aqui .
A julgar pelo seu exemplo, você não dá nenhuma dessas opções que poderiam ser gravadas em um arquivo predefinido.
O arquivo de entrada pode ser passado via entrada padrão especificando o arquivo especial -
e canalizando o conteúdo do arquivo para ffmpeg da seguinte forma:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium out.mkv
A exibição htop deste comando é assim: htop extrato 1
O arquivo de saída pode, da mesma forma, ser alterado para o arquivo especial -
, que redirecionará o arquivo convertido para a saída padrão. Para fazer isso, você precisa especificar o formato do contêiner manualmente, pois o ffmpeg não poderá adivinhá-lo a partir do nome do arquivo.
Em seguida, você pode enviar os dados convertidos para o arquivo de destino. Isso pode parecer assim:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
A exibição htop deste comando é assim: htop extrato 2
Eu não sei em quais circunstâncias o htop exibiria o arquivo sendo canalizado, mas eu acho que isso é tratado dentro do shell, então é provável que ele também não apareça em shells que não sejam zsh
.
Para ocultar também o cat input.ext
do htop que você pode usar, por exemplo, um pequeno script python como este para ler o nome do arquivo de um arquivo de texto e copiar o conteúdo para o 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)
O uso pode ser assim, enquanto filename.txt é um arquivo de texto simples contendo uma linha de texto que possui o arquivo de vídeo a ser lido, kooky_720p.mp4
em nosso exemplo.
./pipe.py filename.txt | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
A exibição htop deste comando é assim: htop extrato 3
Acredito que este é o mais próximo que você poderá ocultar informações do htop. No entanto, lembre-se de que ainda é possível obter as informações sobre quais arquivos você está processando observando as manipulações de arquivos abertos, por exemplo, usando 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
Como você pode ver, ele lista o arquivo de vídeo que usei como exemplo aqui. O arquivo de saída aparecerá nas alças do processo ffmpeg.