1

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 не Сделать разницу)

Заранее спасибо за помощь!

1 ответ1

1

Ответ @ Mulvya был правильным - при исправлении -vf="<params>" в -vf "<params>" код работает.

О sidenote: Если кто-то еще пытается работать с drawtext и получает ошибку Fontconfig error: Cannot load default config file из FFmpeg - Проверьте, не находится ли ваш рабочий каталог на системном диске (например, D:\Path). Если это так, измените ваш код на что-то похожее:

$system_volume = "C:\"
$files_volume = "D:\Path"
cd $system_volume <ffmpeg drawtext-command as above, with FULL PATH for input and output files>
cd $files_volume <additional commands>

Спасибо еще раз за помощь!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .