Использование FFmpeg через PowerShell-корректное использование тире и кавычек в аргументах

StackExchange был первым местом для меня, чтобы искать ответы в течение длительного времени - к сожалению, я не мог найти (рабочее) решение для моей текущей проблемы, поэтому я открыл этот вопрос.

то, что я пытаюсь сделать, это создать PowerShell-скрипт (я совсем новичок в PS) Для автоматической обработки списка файлов (т. е. всех MP4-файлов, которые имеют ту же папку, что и скрипт) через FFmpeg.

TL;DR: что я не могу приступить к работе: использование filter-команд (-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:FFMPEGffmpeg.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.МР4".)

неизвестный параметр
'ВФ=то drawtext=свойство FontSize=12:шрифт файл=/ОС Windows/шрифты/шрифт Arial.ТТФ:текст=cam4_2017-03-01_2238:необходимо=черный:borderw=2:свойство fontcolor=белый:х=(ж-РД)/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 не сделал a разница)

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

22
задан flolilolilo
05.05.2023 12:06 Количество просмотров материала 3524
Распечатать страницу

1 ответ

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

замечание: если кто-то еще пытается работать с 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>

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

1
отвечен flolilolilo 2023-05-06 19:54

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх