ffmpeg captura de tela arquivos recursivamente

1
if [ -d "$1" ]; then
 echo If files are media, screenshots will be made to ~/Screenshots
 for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:08:0.0 -i "$media"  -vframes 1 ~/Screenshots/$(basename "$media").screenshot1.png; done
 for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:12:0.0 -i "$media"  -vframes 1 ~/Screenshots/$(basename "$media").screenshot2.png; done
 for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:20:0.0 -i "$media"  -vframes 1 ~/Screenshots/$(basename "$media").screenshot3.png; done
fi

Estou tentando fazer 3 capturas de tela de todos os arquivos mkv / mp4 para ~ / screenshots. Mas continuo falhando e não consigo encontrar a fonte do problema? Parece falhar apenas quando há espaços no nome dos arquivos, mas eu citei tudo.

    
por Freedo 05.04.2018 / 09:52

1 resposta

1

O problema vem de você repetir os resultados de find . Veja aqui para mais informações. Para provar isso, basta fazer o seguinte da sua pasta de mídia e ver como os nomes dos arquivos ficam confusos:

for media in $(find -name '*.mkv' -or -name '*.mp4'); do echo "$media"; done

Você pode substituir seu find por globs, da seguinte forma:

for media in "$1"/*.mp4; do stuff; done
for media in "$1"/*.mkv; do stuff; done

Ou para simplificar o uso da expansão de chaves:

for media in "$1"/*.{mp4,mkv}; do stuff; done
    
por 11.04.2018 / 17:08

Tags