Batch extrair miniaturas com ffmpeg

2

Eu preciso extrair em lote imagens em miniatura de centenas de arquivos .mpg usando o seguinte código de morcego, que funciona como um encanto, mas a única desvantagem é que o png de saída está com o nome do arquivo como "filename.mp4.png". então minha pergunta é como eu posso reescrever o código para que não haja .mp4 no arquivo png de saída?

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%A.png"
    
por user1599523 11.07.2016 / 16:00

2 respostas

1

É possível encontrar [ 1 ] que %%~n deve fornecer você o nome do arquivo sem extensão.

Tente se funcionar

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%~nA.png"

Observação: você pode ler mais em muitos documentos na Internet sobre as regras de expansão, a partir dessa resposta [ 1 ] e este antigo nt guide [ 2 ] .

    
por 11.07.2016 / 16:45
2

O que você está procurando é a expansão de parâmetros, especificamente, a remoção da substring. Tente isto:

for file in *.mp4; do echo ffmpeg -i "$file" -vf "select=gte(n\,300)" -vframes 1 "${file%.mp4}.png"; done

Se você tiver uma variável $file , poderá usar ${file%.mp4} para exibir o conteúdo, com o último .mp4 removido.

Aqui está um artigo com mais informações: link

EDIT: muito triste, mas eu pensei que a tag disse "BASH" em vez de "lote". Eu me perguntava sobre a sintaxe engraçada. No entanto, vou deixar isso aqui por agora. Se ninguém sabe uma maneira de fazer isso com o Windows, é bastante trivial com o BASH, então talvez você poderia pegar um shell BASH em algum lugar, se não houver alternativa melhor.

    
por 11.07.2016 / 16:10