MoneyPrinterTurbo icon indicating copy to clipboard operation
MoneyPrinterTurbo copied to clipboard

合成字幕失败,UnicodeDecodeError

Open KimigaiiWuyi opened this issue 2 months ago • 9 comments

生成视频成功,合成字幕失败 观察到srt文件是UTF8编码

配置文件

#comfig.toml
subtitle_provider = "edge"

报错信息

## generating video: 1 => .\storage\tasks\e759a201-e7e9-47ec-80fa-ce0aa5c6cc7b\final-1.mp4
2024-04-01 17:52:10 | INFO | "./app\services\video.py:171": generate_video - start, video size: 1080 x 1920
2024-04-01 17:52:10 | INFO | "./app\services\video.py:172": generate_video -   ① video: .\storage\tasks\e759a201-e7e9-47ec-80fa-ce0aa5c6cc7b\combined-1.mp4
2024-04-01 17:52:10 | INFO | "./app\services\video.py:173": generate_video -   ② audio: .\storage\tasks\e759a201-e7e9-47ec-80fa-ce0aa5c6cc7b\audio.mp3
2024-04-01 17:52:10 | INFO | "./app\services\video.py:174": generate_video -   ③ subtitle: .\storage\tasks\e759a201-e7e9-47ec-80fa-ce0aa5c6cc7b\subtitle.srt
2024-04-01 17:52:10 | INFO | "./app\services\video.py:175": generate_video -   ④ output: .\storage\tasks\e759a201-e7e9-47ec-80fa-ce0aa5c6cc7b\final-1.mp4
2024-04-01 17:52:10 | INFO | "./app\services\video.py:185": generate_video - using font: E:/MoneyPrinterTurbo/resource/fonts/STHeitiMedium.ttc
2024-04-01 17:52:10.500 Uncaught app exception
Traceback (most recent call last):
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 542, in _run_script
    exec(code, module.__dict__)
  File "E:\MoneyPrinterTurbo\webui\Main.py", line 376, in <module>
    tm.start(task_id=task_id, params=params)
  File "E:\MoneyPrinterTurbo\app\services\task.py", line 138, in start
    video.generate_video(video_path=combined_video_path,
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 218, in generate_video
    sub = SubtitlesClip(
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\tools\subtitles.py", line 104, in __init__
    hasmask = bool(self.make_textclip("T").mask)
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 201, in generator
    clip = TextClip(
  File "<decorator-gen-102>", line 2, in __init__
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\decorators.py", line 89, in wrapper
    return f(*new_a, **new_kw)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\VideoClip.py", line 1262, in __init__
    subprocess_call(cmd, logger=None)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\tools.py", line 43, in subprocess_call
    raise IOError(err.decode("utf8"))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 115: invalid continuation byte

依赖信息

moviepy                       2.0.0.dev2

当前版本

PS E:\MoneyPrinterTurbo> git reflog
95bc244 (grafted, HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: clone: from github.com:harry0703/MoneyPrinterTurbo.git

KimigaiiWuyi avatar Apr 01 '24 09:04 KimigaiiWuyi

感谢反馈 可以把 srt 文件上传上来看看么(不要修改,原始的),谢谢

harry0703 avatar Apr 01 '24 12:04 harry0703

subtitle.zip 由于github无法上传srt文件,打了个压缩包

KimigaiiWuyi avatar Apr 01 '24 12:04 KimigaiiWuyi

看了下,srt的文件没问题 大概率是ImageMagick的问题,你看看你的ImageMagick版本是多少? 是按照文档,安装的这个版本么?

https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-29-Q16-x64-static.exe

harry0703 avatar Apr 01 '24 13:04 harry0703

应该没问题

PS C:\Program Files\ImageMagick-7.1.1-Q16> magick.exe --version
Version: ImageMagick 7.1.1-29 Q16 x64 0deac72:20240225 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Channel-masks(64-bit) Cipher DPC Modules OpenCL OpenMP(2.0)
Delegates (built-in): bzlib cairo flif freetype gslib heic jng jp2 jpeg jxl lcms lqr lzma openexr pangocairo png ps raqm raw rsvg tiff webp xml zip zlib
Compiler: Visual Studio 2022 (193833135)

KimigaiiWuyi avatar Apr 01 '24 13:04 KimigaiiWuyi

app/services/video.py

clip = TextClip(
            wrapped_txt,
            font=font_path,
            fontsize=params.font_size,
            color=params.text_fore_color,
            bg_color=params.text_background_color,
            stroke_color=params.stroke_color,
            stroke_width=params.stroke_width,
            print_cmd=True,  # 把这个地方的False改成True,然后看看 ImageMagick 输出的命令是什么,拷贝下来手动执行一下看看报什么错误
        )

harry0703 avatar Apr 01 '24 14:04 harry0703

执行报错

2024-04-02 09:49:28 | INFO | "./app\services\video.py:175": generate_video -   ④ output: .\storage\tasks\12da570a-3915-450a-8f99-fbbf15a242cd\final-1.mp4
2024-04-02 09:49:28 | INFO | "./app\services\video.py:185": generate_video - using font: E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc
C:\Program Files\ImageMagick-7.1.1-Q16-HDRI\magick.exe -background transparent -fill #FFFFFF -font E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc -pointsize 60 -stroke #000000 -strokewidth 1.5 -gravity center label:@C:\Users\WinOS\AppData\Local\Temp\tmpied44j1m.txt -type truecolormatte PNG32:C:\Users\WinOS\AppData\Local\Temp\tmp9cg3k8np.png
2024-04-02 09:49:28.561 Uncaught app exception
Traceback (most recent call last):
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 542, in _run_script
    exec(code, module.__dict__)
  File "E:\MoneyPrinterTurbo\webui\Main.py", line 376, in <module>
    tm.start(task_id=task_id, params=params)
  File "E:\MoneyPrinterTurbo\app\services\task.py", line 138, in start
    video.generate_video(video_path=combined_video_path,
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 218, in generate_video
    sub = SubtitlesClip(
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\tools\subtitles.py", line 104, in __init__
    hasmask = bool(self.make_textclip("T").mask)
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 201, in generator
    clip = TextClip(
  File "<decorator-gen-102>", line 2, in __init__
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\decorators.py", line 89, in wrapper
    return f(*new_a, **new_kw)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\VideoClip.py", line 1262, in __init__
    subprocess_call(cmd, logger=None)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\tools.py", line 43, in subprocess_call
    raise IOError(err.decode("utf8"))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 115: invalid continuation byte

进入到ImageMagick手动执行

PS C:\Program Files\ImageMagick-7.1.1-Q16> magick.exe -background transparent -fill #FFFFFF -font E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc -pointsize 60 -stroke #000000 -strokewidth 1.5 -gravity center label:@C:\Users\WinOS\AppData\Local\Temp\tmpied44j1m.txt -type truecolormatte PNG32:C:\Users\WinOS\AppData\Local\Temp\tmp9cg3k8np.png
magick.exe: missing output filename `-fill' at CLI arg 3 @ error/magick-cli.c/ProcessCommandOptions/753.

update.

这样子问题就已经定位了,-fill和-stroke之后的参数都必须用双引号括住 修改命令如下即恢复正常

magick.exe -background transparent -fill "#FFFFFF" -font E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc -pointsize 60 -stroke "#000000" -strokewidth 1.5 -gravity center label:@C:\Users\WinOS\AppData\Local\Temp\tmpied44j1m.txt -type truecolormatte PNG32:C:\Users\WinOS\AppData\Local\Temp\tmp9cg3k8np.png

我看代码涉及到moviepy的部分了,moviepy很久没有更新过了

KimigaiiWuyi avatar Apr 02 '24 01:04 KimigaiiWuyi

尝试修改为如下,添加双引号

clip = TextClip(
            wrapped_txt,
            font=font_path,
            fontsize=params.font_size,
            color=f'"{params.text_fore_color}"',
            bg_color=params.text_background_color,
            stroke_color=f'"{params.stroke_color}"',
            stroke_width=params.stroke_width,
            print_cmd=True,
        )

依旧报错

2024-04-02 10:04:39 | INFO | "./app\services\video.py:185": generate_video - using font: E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc
C:\Program Files\ImageMagick-7.1.1-Q16-HDRI\magick.exe -background transparent -fill "#FFFFFF" -font E:/MoneyPrinterTurbo/resource/fonts/STHeitiLight.ttc -pointsize 60 -stroke "#000000" -strokewidth 1.5 -gravity center label:@C:\Users\WinOS\AppData\Local\Temp\tmp8rd2nu3d.txt -type truecolormatte PNG32:C:\Users\WinOS\AppData\Local\Temp\tmp5kwnfe6y.png
2024-04-02 10:04:40.191 Uncaught app exception
Traceback (most recent call last):
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\VideoClip.py", line 1262, in __init__
    subprocess_call(cmd, logger=None)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\tools.py", line 43, in subprocess_call
    raise IOError(err.decode("utf8"))
OSError: magick.exe: unable to open image '"#FFFFFF"': Invalid argument @ error/blob.c/OpenBlob/3572.
magick.exe: no decode delegate for this image format `' @ error/constitute.c/ReadImage/746.


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 542, in _run_script
    exec(code, module.__dict__)
  File "E:\MoneyPrinterTurbo\webui\Main.py", line 376, in <module>
    tm.start(task_id=task_id, params=params)
  File "E:\MoneyPrinterTurbo\app\services\task.py", line 138, in start
    video.generate_video(video_path=combined_video_path,
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 218, in generate_video
    sub = SubtitlesClip(
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\tools\subtitles.py", line 104, in __init__
    hasmask = bool(self.make_textclip("T").mask)
  File "E:\MoneyPrinterTurbo\app\services\video.py", line 201, in generator
    clip = TextClip(
  File "<decorator-gen-102>", line 2, in __init__
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\decorators.py", line 89, in wrapper
    return f(*new_a, **new_kw)
  File "C:\Users\WinOS\AppData\Local\Programs\Python\Python310\lib\site-packages\moviepy\video\VideoClip.py", line 1272, in __init__
    raise IOError(error)
OSError: MoviePy Error: creation of None failed because of the following error:

magick.exe: unable to open image '"#FFFFFF"': Invalid argument @ error/blob.c/OpenBlob/3572.
magick.exe: no decode delegate for this image format `' @ error/constitute.c/ReadImage/746.
.

.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary. Check the documentation.

KimigaiiWuyi avatar Apr 02 '24 02:04 KimigaiiWuyi

作者有任何想法吗?

KimigaiiWuyi avatar Apr 03 '24 01:04 KimigaiiWuyi

我提交一个docker试试,每个人的电脑环境都不一样,我这里没法复现和调试

harry0703 avatar Apr 03 '24 03:04 harry0703