我正在将 ffmpeg 作为子进程运行,并使用 stderr 来获取各种数据位,例如字幕流 ID。它适用于大多数视频,但带有日语字幕的视频会导致错误:
“charmap”编解码器无法解码位置 xxx 中的字节:字符映射到
大量谷歌搜索表明问题在于日语需要 unicode,而英语则不需要。提供的解决方案涉及文件问题,但我找不到对 stderr 执行相同操作的方法。相关代码如下:
#######################################
命令= [ffmpeg,"-y","-i",fileSelected,"-acodec","pcm_s16le","-vn","-t","3","-f","null"," -”]
打印(命令)
proc = subprocess.Popen(command,stderr=PIPE,Jstdin=subprocess.PIPE,universal_newlines=True,startupinfo=startupinfo)
stream = ""
for line in proc.stderr:
try:
print("line",line)
except exception as error:
print("print",error)
line = line[:-1]
if "Stream #" in line:
estream = line.split("#",1)[1]
estream =estream.split(" (",1)[0]
print("estream",estream)
stream = stream + estream +"\n" #.split("(",1)[0]
stream = stream + estream +"\n"
################################################## #
您可以将编码规定为:
proc = subprocess.Popen(command, stderr=PIPE, stdin=subprocess.PIPE, universal_newlines=True, startupinfo=startupinfo, encoding='utf-8')
您最好不要使用
universal_newlines
,因为这有时会导致流问题。
我还将您的流提取移动到您的
try: except:
块中,以便提供合理的崩溃。
希望这有帮助