#779 怎么修改源代码 让内嵌字幕分为上下

*125.47* Posted at: 4 hours ago 👁16

怎么修改源代码 我想在中文字幕在视频下方 英文字幕在视频上方 而且中文和英文的字体大小我不想设置为一样大

1 Replies

本条内容由 DeepSeek 回复
根据您的需求,您想要修改源代码以实现中文字幕在视频下方、英文字幕在视频上方,并且中英文字体大小不同。这个功能在 pyVideoTrans 的当前版本(3.80)中,需要通过修改源代码来实现,因为UI界面尚未提供这种双字幕位置和独立字体大小的设置。

以下是具体的修改步骤和位置:

1. 找到并修改字幕嵌入相关的源代码文件

核心的修改位于 videotrans/box/video_soft.py 文件中的 run 函数。这个函数负责将字幕嵌入到视频中。

具体修改步骤:

1. 打开文件:用文本编辑器(如 VS Code、Notepad++ 等)打开 videotrans/box/video_soft.py

2. 定位关键函数:找到 run 函数。您可以通过搜索 def run( 来快速定位。

3. 修改字幕滤镜:在 run 函数内部,您会找到构建 FFmpeg 字幕滤镜(filter_complex)的部分。您需要将原来单一的 subtitles 滤镜拆分为两个,分别用于中文和英文字幕。

修改前的大致代码逻辑(可能类似):

# ... 其他代码 ...
filter_complex = f"subtitles='{srtfile}':force_style='Fontsize=18,PrimaryColour=&Hffffff&,Outline=1,Shadow=1,MarginV=20'"
# ... 其他代码 ...

修改后的逻辑示例:

您需要创建两个独立的字幕流,并指定它们的位置。

# 假设:
# - 中文SRT文件路径存储在变量 `zh_srtfile` 中
# - 英文SRT文件路径存储在变量 `en_srtfile` 中
# - 您希望中文字体大小为 20,英文字体大小为 16

# 构建滤镜复合链
filter_complex = (
    f"[0:v]subtitles='{zh_srtfile}':force_style='Fontsize=20,PrimaryColour=&Hffffff&,Outline=1,Shadow=1,MarginV=30'[v1]; "  # 中文字幕,MarginV 控制底部距离
    f"[v1]subtitles='{en_srtfile}':force_style='Fontsize=16,PrimaryColour=&Hffffff&,Outline=1,Shadow=1,MarginV=60'[v]"     # 英文字幕,MarginV 控制顶部距离 (数值更大使其位于上方)
)

关键参数解释:

  • [0:v]:表示输入的第一个视频流。
  • subtitles='...':指定要加载的 SRT 字幕文件。
  • force_style=:用于强制设置字幕样式。
  • Fontsize=20Fontsize=16:分别设置中英文字体大小。
  • MarginV:这是控制字幕垂直位置的关键参数。
  • 对于底部字幕(中文)MarginV 设置一个较小的正值(如 30),表示距离画面底部的像素值。
  • 对于顶部字幕(英文)MarginV 需要设置一个较大的正值(如 60),这个值通常是画面高度减去您希望字幕距离顶部的像素值。一个更精确的方法是使用 MarginV 配合 Alignment更推荐的做法是使用 Alignment
            # 更精确的控制方式
            filter_complex = (
                f"[0:v]subtitles='{zh_srtfile}':force_style='Alignment=2,Fontsize=20,PrimaryColour=&Hffffff&,Outline=1,Shadow=1,MarginV=20'[v1]; "  # Alignment=2 代表底部居中
                f"[v1]subtitles='{en_srtfile}':force_style='Alignment=8,Fontsize=16,PrimaryColour=&Hffffff&,Outline=1,Shadow=1,MarginV=20'[v]"     # Alignment=8 代表顶部居中
            )
  • Alignment 值参考:1=左下, 2=底部居中, 3=右下, 4=左上, 5=顶部居中, 6=右上, 7=屏幕居中, 8=中下, 9=中下(通常 8 被用作顶部居中,但FFmpeg版本不同可能有差异,建议测试 5 和 8)。
  • PrimaryColour, Outline, Shadow 等可以根据您的喜好调整。

4. 确保文件路径正确:您需要确保代码中能正确获取到中文和英文字幕的 SRT 文件路径。在视频翻译流程中,原始语言字幕和翻译后字幕的路径通常是可以获取的。您可能需要追踪一下代码,找到这些路径被存储的变量。

2. 修改视频翻译流程以传递双字幕路径

您还需要修改视频翻译的主流程文件(例如 videotrans/box/trans_create.py),确保在调用 video_soft.py 中的 run 函数时,能够同时传递原始语言字幕文件(英文)和翻译后字幕文件(中文)的路径。

3. 测试

修改完成后,保存文件,并重新运行软件进行测试。由于您修改了核心代码,建议先在简单的视频上进行测试,确保字幕位置、大小和内容都符合预期。

重要提示

  • 备份:在修改任何源代码之前,请务必备份原始文件。
  • FFmpeg 版本:不同的 FFmpeg 版本对字幕样式的支持可能略有不同,如果效果不理想,可以查阅 FFmpeg 官方文档关于 subtitles 滤镜和 ASS 样式(force_style 使用的就是 ASS 样式标签)的说明。
  • 复杂性:此修改涉及到底层视频处理逻辑,需要对代码结构有一定了解。如果您不熟悉 Python 和 FFmpeg,操作起来可能会有一定难度。

如果您在修改过程中遇到具体错误,欢迎提供更详细的错误信息或日志,以便进一步分析和协助。

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions