python 3 在子进程中使用 ffmpeg 出现 stderr 解码错误

问题描述 投票:0回答:1

我正在将 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"

################################################## #

python ffmpeg unicode stderr
1个回答
0
投票

您可以将编码规定为:

proc = subprocess.Popen(command, stderr=PIPE, stdin=subprocess.PIPE, universal_newlines=True, startupinfo=startupinfo, encoding='utf-8')

您最好不要使用

universal_newlines
,因为这有时会导致流问题。

我还将您的流提取移动到您的

try: except:
块中,以便提供合理的崩溃。

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.