ffmpeg não aceita nome de variável lido do arquivo [closed]

0

Estou tentando fazer o download em lote de vários vídeos usando o ffmpeg. Uma lista de endereços de sites e nomes de salvamento é armazenada em um arquivo de texto no seguinte formato.

"site",filename.mp4

O código que eu tenho está circulando pelo arquivo e tentando fazer o download de cada linha por linha.

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i  $dl -c copy $nm
done < $1

A saída esperada é que em cada loop o ffmpeg baixaria o arquivo indicado por cada linha e então passaria para a próxima iteração do loop.

Em vez disso, o ffmpeg exibe a mensagem de erro

"site": No such file or directory

Quando executo o mesmo comando diretamente no terminal com o nome do site e salve o nome inserido diretamente no comando, ele funciona sem nenhum problema.

Olhando para outras postagens aparentemente relacionadas a isso, tentei anexar

< /dev/null

ao final da chamada do ffmpeg, mas ainda tem o mesmo efeito.

    
por Javan 15.03.2018 / 15:24

1 resposta

0

Existem alguns problemas com o seu script, em que você usa citações no arquivo com URLs / locais de download.

Ou seja, quando você tem o arquivo da maneira que você faz, $dl se torna "site" and $ nm 'permanece como você esperaria.

Para fazer isso, você precisa alterar o arquivo para que os locais de download do site não tenham aspas e, em seguida, você precisa definir aspas em torno de $dl no script.

Então você acabaria com isso:

lista de arquivos de entrada:

site,foobar.baz

Script:

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i "$dl" -c copy $nm
done < $1

Você também pode querer envolver $nm entre aspas, caso você tenha um nome de arquivo com espaços, mas isso é uma decisão sua ou não.

    
por 15.03.2018 / 17:05