Войти

Показать полную графическую версию : [решено] Передача значения переменной сторонней программе


DJ Mogarych
24-11-2018, 11:44
Привет!

Написал скрипт по перекодированию аудио в mp3, финальная строка в цикле такая:
ffmpeg -i ""$ifile"" $qualityaudio ""$path\$ofile$extout""

Если заключить её в кавычки, то строки просто выводятся на экран, причём, корректно сформированные:
ffmpeg -i "C:\Users\123\Music\Ben Webster - Art Tatum Quartet [1956]\15 Art Tatum and Ben Webster - All the things you are (Art Tatum 1953).flac"
-q:a 0 "C:\Users\123\Music\Ben Webster - Art Tatum Quartet [1956]\15 Art Tatum and Ben Webster - All the things you are (Art Tatum 1953).mp3"

Но я не могу заставить их выполняться, где-то по дороге теряется часть строки:
ffmpeg : ffmpeg version N-92510-gfa08345e88 Copyright (c) 2000-2018 the FFmpeg developers
C:\Users\123\Desktop\ffmpeg.ps1:11 знак:1
+ ffmpeg -i ""$ifile"" $qualityaudio ""$path\$ofile$extout""
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ffmpeg version ...mpeg developers:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

built with gcc 8.2.1 (GCC) 20181017
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray -
-enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine
--enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --e
nable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbe
nc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d1
1va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil 56. 23.101 / 56. 23.101
libavcodec 58. 39.100 / 58. 39.100
libavformat 58. 22.100 / 58. 22.100
libavdevice 58. 6.100 / 58. 6.100
libavfilter 7. 46.100 / 7. 46.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Trailing options were found on the commandline.
Input #0, flac, from 'C:\Users\123\Music\Ben Webster - Art Tatum Quartet [1956]\15 Art Tatum and Ben Webster - All the things you are (Art Tatum
1953).flac':
Metadata:
track :
15
DATE :
1956
TITLE :
All the things you are (Art Tatum 1953
)
ARTIST :
Art Tatum and Ben Webste
r
ALBUM :
The Art Tatum В· Ben Webster quartet
GENRE :
Jazz
NOTES :
Medieval CUE Splitter (www.medieval.it
)
album_artist :
VA
TOTALTRACKS :
15
Duration:
00:06:01.4
0
, start:

0.000000
, bitrate:

478 kb/s
Stream #0:
0
: Audio: flac, 44100 Hz, stereo, s16
At least one output file must be specified

В чём ошибка?

Busla
24-11-2018, 11:56
Оформите запуск через Start-Process

DJ Mogarych
24-11-2018, 12:13
Start-Process "ffmpeg -i ""$ifile"" $qualityaudio ""$path\$ofile$extout"""
даёт
Start-Process : Не удается выполнить команду из-за следующей ошибки: Не удается найти указанный файл.
C:\Users\123\Desktop\ffmpeg.ps1:11 знак:1
+ Start-Process "C:\scripts\ffmpeg\bin\ffmpeg.exe -i ""$ifile"" $qualit ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand


Start-Process ffmpeg -i ""$ifile"" $qualityaudio ""$path\$ofile$extout""
даёт
Start-Process : Не удается обработать параметр, так как имя параметра "i" неоднозначно. Возможные совпадения: -InformationAction -InformationVariable
.
C:\Users\123\Desktop\ffmpeg.ps1:11 знак:48
+ Start-Process C:\scripts\ffmpeg\bin\ffmpeg.exe -i ""$ifile"" $quality ...
+ ~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.StartProcessCommand

Kazun
24-11-2018, 12:23
ffmpeg -i $ifile -aq 0 $ifile.replace('.flac','.mp3')

Для -q:a 0, должно быть: '-q:a' 0

DJ Mogarych
24-11-2018, 13:47
Спасибо, с методом replace гораздо удобнее!
Интересно, что работать-то работает, но всё равно ругается, и шрифт красный:

ffmpeg : ffmpeg version N-92510-gfa08345e88 Copyright (c) 2000-2018 the FFmpeg developers
C:\Users\123\Desktop\ffmpeg.ps1:12 знак:1
+ ffmpeg -i ""$ifile"" '-q:a' $qualityaudio $ifile.replace($extin, $ext ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ffmpeg version ...mpeg developers:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Kazun
24-11-2018, 14:01
Тогда привести полный скрипт.

YuS_2
24-11-2018, 15:00
Можно использовать stop-parsing символ '--%'
man about_Special_Characters

DJ Mogarych
28-11-2018, 14:06
Kazun, всё в порядке, если запускать скрипт не в ISE.

android63rus
30-11-2018, 14:43
если запускать скрипт не в ISE. »
интересно, в чем разница?




© OSzone.net 2001-2012