首页 > 解决方案 > 在批处理脚本中调用 Python 脚本并处理输出流

问题描述

以前我有一个.bat脚本可以触发 STB blaster 脚本,杀死任何打开的会话VLC,然后启动一个新会话,将采集卡原始视频输出编码到传输流中。此流用作我正在使用的 PVR 程序的输入。

批处理脚本如下所示:

"G:\Visual Studio 2017\C++ Projects\SkyQChannelChanger\Release\SkyQChannelChanger.exe" %1

taskkill /f /im vlc.exe /t

"G:\VLC\vlc" --ffmpeg-hw --avcodec-hw=any dshow:// :dshow-vdev="Video (00 Pro Capture HDMI 4K+)" :dshow-adev="Audio (2- 00 Pro Capture HDMI 4K+)" :dshow-threads=8 :dshow-aspect-ratio=16\:9 :dshow-size="3840x2160" :dshow-pixel_format=yuv444p16le :dshow-tune=film :dshow-preset=lossless :dshow-profile=main10 show-vcodec=x265 :dshow-fps=50 :dshow-crf=0 :dshow-acodec=mp4a :dshow-stereo-mode=5 :dshow-force-surround-sound=0 :dshow-ab=128 :dshow-samplerate=44100 :no-dshow-config :live-caching=300 --sout "#transcode{venc=ffmpeg,vcodec=mp2v,threads=8,aspect=16:9,width=3840,height=2160,fps=50,acodec=a52,ab=1500,channels=2,samplerate=48000,soverlay}:standard{access=file,dst=-,mux=ts}"

但是,我想将调用移动VLC到脚本调用的Python文件。.bat这意味着新的批处理脚本如下所示:

@echo off

"G:\Visual Studio 2017\C++ Projects\SkyQChannelChanger\Release\SkyQChannelChanger.exe" %1

taskkill /f /im vlc.exe /t

"G:\HTPC Scripts\NPVR Command Line\Command Line.py"

被调用的 Python 脚本如下所示:

import os
import sys
import subprocess

os.chdir('G:\\VLC\\')

startupinfo = None
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW

process = subprocess.Popen([
'vlc',
'--ffmpeg-hw',
'--avcodec-hw=any',
'dshow:// :dshow-vdev="Video (00 Pro Capture HDMI 4K+)" :dshow-adev="Audio (2- 00 Pro Capture HDMI 4K+)"',
':dshow-threads=8',
':dshow-aspect-ratio=16\:9',
':dshow-size="3840x2160"',
':dshow-pixel_format=yuv444p16le',
':dshow-tune=film',
':dshow-preset=lossless',
':dshow-profile=main10',
'show-vcodec=x265',
':dshow-fps=50',
':dshow-crf=0',
':dshow-acodec=mp4a',
':dshow-stereo-mode=5',
':dshow-force-surround-sound=0',
':dshow-ab=128',
':dshow-samplerate=44100',
':no-dshow-config',
':live-caching=300',
'--sout',
'"#transcode{venc=ffmpeg,vcodec=mp2v,threads=8,aspect=16:9,width=3840,height=2160,fps=50,acodec=a52,ab=1500,channels=2,samplerate=48000,soverlay}:standard{access=file,dst=-,mux=ts}"',
], stdout=subprocess.PIPE, startupinfo=startupinfo)

Python只要批处理脚本Python成功调用脚本并且Python脚本依次成功打开,批处理脚本和脚本似乎都可以工作VLC

但是,我真的不明白的问题是,如果有意义的话,Python似乎没有将编码的视频传递给外壳?

我的 PVR 软件现在无法检测到流。所以我的问题是,如何修改subprocess我的代码部分,以便它完全复制直接从命令行VLC调用命令?我尝试过使用,但这没有效果......shell=True

有任何想法吗?

谢谢

标签: python-3.xsubprocessvlc

解决方案


推荐阅读