O StackExchange foi o primeiro lugar para eu procurar respostas por um longo tempo - infelizmente, não consegui encontrar nenhuma solução (de trabalho) para o meu problema atual, então eu abri essa pergunta.
O que estou tentando fazer é criar um PowerShell-Script (sou bem novo no PS) para processar automaticamente uma lista de arquivos (ou seja, todos os arquivos MP4 que compartilham a mesma pasta que o script) via FFmpeg.
TL; DR: O que eu não consigo trabalhar: Usando comandos de filtro ( -vf "iamafilterargument"
) que incluem variáveis.
O comando que estou tentando trabalhar quando escrito à mão no cmd seria:
ffmpeg -i <input_file> -an -c:v libx264 -crf 16 -preset veryslow -vf "drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text='<input_filename>':bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5" <output_filename>.mkv
Via cmd, isso funciona exatamente como pretendido. Agora meu PS-Script:
$encoder = "C:\FFMPEG\ffmpeg.exe"
$dateien = Get-ChildItem .\*.mp4
$dateinamen = ForEach-Object {$dateien.BaseName}
for($i=0; $i -lt $dateien.Length; $i++){
$filterbefehl = " -i " + $dateien[$i] + " -an -map_metadata -1 -vf='"drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text=" + $dateinamen[$i] + ":bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5'" -c:v libx264 -intra -crf 16 -hide_banner " + $dateinamen[$i] + ".mkv"
Start-Process -FilePath $encoder -ArgumentList $filterbefehl -NoNewWindow; pause
}
Write-Host "Done!"
No entanto, recebo esta mensagem de erro do FFmpeg:
(Eu deixei o nome do arquivo intencionalmente - o arquivo inteiro é chamado "cam4_2017-03-01_2238.mp4".)
Unrecognized option
'vf=drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text=cam4_2017-03-01_2238:bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5'.
Error splitting the argument list: Option not found
Eu tentei todo tipo de coisa:
- Usando double-doublequotes ("") em vez de backticks ('")
- Usando
&$encoder $filterbefehl
- Incluindo o conteúdo de $ filterbefehl em
-ArgumentList
- Usando singlequotes em vez de doublequotes para $ filterbefehl
O resultado acima é o mais próximo de um script que eu consegui realizar até agora. A maioria das minhas outras tentativas falhou porque não consegui descobrir como obter as citações corretas (tanto "" quanto "" não funcionaram).
Software usado:
- Win10 Pro (embora eu gostaria que ele funcionasse em Win > = 7)
- Powershell 5.1 (Build 14393)
- FFmpeg-binariy do site da Zeranoe - última versão
(20170225-7e4f32f) (usando 3.2.2 não fez diferença)
Agradecemos antecipadamente por me ajudar!