Invocando o ffmpeg iterativamente

1

Eu chamo ffmpeg assim do terminal do Mac:

$ find . -type f -name *.webm | while IFS= read -r f; do echo "$f"; ffmpeg -i "$f" "${f%.webm}".mp4 2> ~/Desktop/err; done

Apenas o primeiro arquivo retornado por find é processado:

./artist/Moody Blues/_vid/Nights in white satin_lyrics.webm

Trecho de errar:

Enter command: |all |-1 [ ]

Parse error, at least 3 arguments were expected, only 1 given in string 's [360p].webm'

Enter command: |all |-1 [ ] Parse error, at least 3 arguments were expected, only 1 given in string 'hannel/Ash Wainman/_Inbox/BOHEMIAN RHAPSODY - ASH WAINMAN[HD,1280x720].webm'

Devemos ter 'canal' em vez de 'canal'.

    
por Erwann 05.02.2018 / 19:20

2 respostas

0

Como o LordNeckBeard sugere, adicionar -nostdin pára ffmpeg de tentar interação (ou, aparentemente, ler seu stdin herdado).

Isso é mencionado na página do manual:

-stdin
       Enable interaction on standard input. On by default unless standard input is used as an input. To explicitly disable interaction you need to specify "-nostdin".

       Disabling interaction on standard input is useful, for example, if ffmpeg is in the background process group. Roughly the same result can be achieved with "ffmpeg ... <
       /dev/null" but it requires a shell.
    
por 06.03.2018 / 05:41
0

Você está usando incorretamente find e desnecessariamente criando um loop de shell (dói ler!), porque você pode (deve) executar ffmpeg diretamente de dentro de find :

find . -type f -name *.webm \
-exec sh -c 'echo "$1"; ffmpeg -nostdin -i "$1" "${1%.webm}".mp4 2>> ~/Desktop/err' sh {} ';'

Com deferência a LordNeckBeard (embora a minha seja seguramente mais cabeluda).

    
por 06.03.2018 / 06:35

Tags