StackExchange был первым местом, где я долго искал ответы - к сожалению, я не смог найти (работающего) решения для моей текущей проблемы, поэтому я открыл этот вопрос.
Я пытаюсь создать PowerShell-Script (я новичок в PS), чтобы автоматически обрабатывать список файлов (т.е. все MP4-файлы, которые находятся в одной папке со скриптом) через FFmpeg.
TL; DR: что я не могу получить: используя команды фильтра (-vf "iamafilterargument"
), которые включают переменные.
Команда, которую я пытаюсь заставить работать, когда написано от руки в cmd:
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
Через cmd это работает так, как задумано. Теперь мой PS-скрипт:
$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!"
Тем не менее, я получаю это сообщение об ошибке от FFmpeg:(я намеренно оставил имя файла в файле - весь файл называется «cam4_2017-03-01_2238.mp4».)
Нераспознанная опция '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: у = 5: альфа = 0,5' . Ошибка разделения списка аргументов: опция не найдена
Я перепробовал все виды вещей:
- Использование двойных двойных кавычек ("") вместо обратных кавычек (`")
- Использование
&$encoder $filterbefehl
- Включение содержимого $ filterbefehl в
-ArgumentList
- Использование одинарных кавычек вместо двойных кавычек для $ filterbefehl
Приведенный выше результат является наиболее близким к рабочему сценарию, который я мог выполнить до сих пор. Большинство других моих попыток потерпели неудачу, потому что я не мог понять, как получить правильные цитаты («» и «» не работали).
Используемое программное обеспечение:- Win10 Pro (хотя мне бы хотелось, чтобы оно работало на Win> = 7) - Powershell 5.1 (сборка 14393) - FFmpeg-binariy с сайта Zeranoe - последняя версия (20170225-7e4f32f) (использование 3.2.2 не Сделать разницу)
Заранее спасибо за помощь!