A resposta do Znuff é ótima (aceita e ganha) e abriu caminho para minha própria solução.
Como é específico do Unix e eu tive que trabalhar no Win, aqui está a minha solução para o Windows 7 e acima:
Eu usei dois arquivos em lote (Master.cmd e Slave.cmd) para percorrer todas as imagens e gravar os nomes dos arquivos nelas.
Master.cmd:
forfiles /p "MyImagesSubPath" /m "2014-02-15*.png" /c "cmd /c ..\Slave.cmd @file @fname
Slave.cmd:
ffmpeg -i "%~1" -vf "crop=1072:1192:24:101, drawtext=text=%~2: fontcolor=white: fontsize=60: box=1: [email protected]: x=50:y=50: fontfile=c\:\\Windows\\Fonts\\myfont.ttf" "mod_%~1"
Explicação:
É necessário usar dois lotes por vários motivos:
1. O parâmetro / c de forfiles aceita apenas uma linha de comando de tamanho limitado (253 caracteres)
2. Aninhar o comando FFmpeg no parâmetro forfiles / c exigiria um nível insano de caráter excaping.
O filtro de nome de arquivo "2014 -... png" no Master.cmd é usado para evitar que o loop reprocesse sua própria saída (chamada "mod _... png") em um loop infinito. Você deve adaptar essa string de filtro para corresponder às suas imagens de origem.
O lote escravo é executado dentro do subdiretório "MyImagesSubPath" abaixo do diretório de lotes (isto é, onde você tem que colocar suas imagens de origem). Slave.cmd recebe o nome do arquivo com e sem extensão (.png) como seus dois parâmetros.
O parâmetro filename sem extensão é usado como texto a ser gravado na imagem. As imagens resultantes são armazenadas com o prefixo "mod_" no mesmo caminho das imagens originais.
Os nomes dos arquivos podem conter espaços em branco.