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 / Шрифти / 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
- Використовуючи одинарні лапки замість подвійних лапок для $ filter befehl
Вищенаведений результат є найбільш наближеним до робочого сценарію, який я міг досягти дотепер. Більшість моїх інших спроб не вдалося, тому що я не міг розібратися, як отримати відповідні котирування ("" і "" не працювали).
Використане програмне забезпечення: - Win10 Pro (хоча я б хотів, щоб він працював на Win & gt; = 7) - Powershell 5.1 (Build 14393) - FFmpeg-binariy з сайту Zeranoe - остання версія (20170225-7e4f32f) (використання 3.2.2 не змінилося)
Заздалегідь спасибі за допомогу!
fontfile
- Я перевірю це пізніше. Дуже незручно - невдача через помилку новачка ;-)
fontfile
шлях до шрифту?
Fontconfig error: Cannot load default config file
- Мені знадобилося деякий час, щоб з'ясувати, що ця помилка з'являється, якщо ваш робочий каталог не знаходиться на системному диску (наприклад, D: Path). Тому мій код зараз включає: $system_volume = "C:\" $files_volume = "D:\Path" cd $system_volume <ffmpeg command as above, with FULL PATH for input and output files> cd $files_volume <additional commands>
(весь сценарій дуже довгий, оскільки це була лише одна частина всієї речі - пізніше, я об'єднав файли, ...) Ще раз спасибі за допомогу!
=
в-vf=