Como inserir um arquivo de rede no ffmpeg

9

Meu problema é esse. Eu tenho acesso a um servidor que hospeda muitos arquivos de vídeo, a maioria deles é muito grande e não está bem compactada. Pretendo fazer uma cópia em tamanho menor de qualidade reduzida na minha máquina local para obter melhor acesso.

O problema é que o servidor não possui acesso ftp. Posso scp os arquivos na minha máquina e, em seguida, uso o ffmpeg para reduzir o tamanho, mas ficarei sem espaço se copiar todos os arquivos localmente.

Estou procurando uma maneira de inserir diretamente um arquivo de rede no ffmpeg, para que eu possa escrever um script que, durante a noite, receba todos os vídeos em tamanho reduzido.

saketrp
fonte
Você deve editar a pergunta: Como está, é um "XYProblem": pedindo para fazer Y, quando você realmente deseja fazer o X. Você realmente deseja inserir um arquivo de rede remotamente, não "usando scp" (parece: " como posso barbear minha barba usando uma bicicleta ": a verdadeira necessidade é barbear a barba, não usar uma bicicleta ^^) Não misture sua necessidade com os meios para fazê-lo (para que você possa encontrar meios melhores, usando as pessoas
Olivier Dulac /
Veja as respostas de Flup e cpugeniusmv para saber as maneiras certas de fazê-lo. No entanto, se você tiver um gargalo de rede, faria sentido compactar no lado do servidor e depois transferir a versão compactada pela rede (se ffmpeg existir nessa máquina).
orion

Respostas:

10

Você pode usar sshfspara fazer com que os arquivos remotos apareçam em um diretório na máquina local.

Você não diz qual distro você está usando no seu cliente, mas isso é descrito na documentação do sshfs do Ubuntu :

  1. Instale o sshfspacote ( aptitude install sshfs)
  2. Adicione seu usuário ao fusegrupo ( sudo gpasswd -a username fuse)
  3. Monte o sistema de arquivos usando o sshfscomando

Para usar sshfs, crie um diretório (nós chamaremos isso /mountpoint) e faça

sshfs -o idmap=user remote_user@remote_server:/remote/directory /mountpoint

Os arquivos remotos agora aparecerão /mountpoint, mas ainda estão no servidor remoto. Quaisquer alterações feitas serão feitas remotamente e não localmente.

Para desmontar o diretório, faça

fusermount -u /mountpoint
Flup
fonte
6

Se você tiver acesso ssh ao sistema remoto, poderá fazer algo como

ssh server cat path/to/video | ffmpeg -i - [...]

As -causas ffmpeg para ler de stdin, em vez de um arquivo.

Entretanto, nem todos os formatos suportam pipes. Consulte /programming/12999674/ffmpeg-which-file-formats-support-stdin-usage

cpugeniusmv
fonte
O dispositivo de vídeo pode não suportar o tamanho do bloco usado por 'cat' - se você receber um erro, use 'nc' em vez de 'cat' - consulte também stackoverflow.com/a/46362136/1755628
MikeW