Я использую командный файл для доступа к моему переносимому исполняемому файлу VLC для преобразования mp4 в mp3:
set arg1=%1 REM -> arg1={my_mp4_full_path}
set arg2=%2 REM -> arg2={my_mp3_full_path}
echo %arg1%
echo %arg2%
REM batch file is in the same directory as "VLCPlayer" folder
"%~dp0\VLCPlayer\VLCPortable.exe" -I dummy %arg1% --sout=#transcode{acodec=mp3,ab=128,vcodec=dummy}:std{access="file",mux="raw",dst=%arg2%} vlc://quit
Когда я запускаю этот скрипт в первый раз, происходит сбой vlc, и я получаю не воспроизводимый файл mp3Однако, когда я снова запускаю скрипт, он работает, и я получаю воспроизводимый mp3.Есть ли способ исправить это или сделать его последовательным?Я не понимаю, почему запуск его дважды приведет к разным результатам.
Нет, у меня на компьютере нет ffmpeg
, это неузнаваемая внутренняя или внешняя команда.
Обратите внимание, что я сталкиваюсьта же проблема при использовании powershell для выполнения той же задачи, когда я импортирую свою функцию из сценария .psm1:
function ConvertToMp3(
[switch] $inputObject,
[string] $vlc = '{PAth_TO_PORTABLE_VLC}\VLCPortable.exe')
{
PROCESS {
$codec = 'mp3';
$oldFile = $_;
$newFile = $oldFile.FullName.Replace($oldFile.Extension, ".$codec").Replace("'","");
&"$vlc" -I dummy "$oldFile" ":sout=#transcode{acodec=$codec,
vcodec=dummy}:standard{access=file,mux=raw,dst=`'$newFile`'}" vlc://quit | out-null;
# delete the original file
Remove-Item $oldFile;
}
}
Я получаю тот же случайный вывод, который иногда работает, иногда происходит сбой.
Обновление: Я чувствую, что должен добавить больше информации о том, как я использую пакетный файл: у меня есть скрипт Python Convert.py
, и я вызываю свой пакетный файл внутри, используя os.system()
:
mp4_to_convert = arguments.file
full_path_mp4 = os.path.join(outdir,mp4_to_convert)
mp3_to_convert_to = mp4_to_convert.replace(".mp4",".mp3")
full_path_mp3 = os.path.join(outdir,mp3_to_convert_to)
command_string = """Convert_Script.bat \"{}\" \"{}\"""".format(full_path_mp4, full_path_mp3)
os.system(command_string)
Это документация os.system()
:
os.system (команда)
Выполнить команду (строку) в подоболочке,Это реализуется путем вызова стандартной функции Си system () и имеет те же ограничения.Изменения в sys.stdin и т. Д. Не отражаются в среде выполняемой команды.Если команда генерирует какой-либо вывод, он будет отправлен в стандартный поток вывода интерпретатора.
В Unix возвращаемое значение является состоянием выхода процесса, закодированного в формате, указанном для wait ().Обратите внимание, что POSIX не определяет значение возвращаемого значения функции C system (), поэтому возвращаемое значение функции Python зависит от системы.
В Windows возвращаемое значение - это возвращаемоесистемная оболочка после запуска команды.Оболочка задается переменной среды Windows COMSPEC: обычно это cmd.exe, который возвращает состояние завершения выполнения команды;в системах, использующих не встроенную оболочку, обратитесь к документации по оболочке.
Любые указатели или предложения будут полезны, заранее благодарю за помощь.