找回密码
 立即注册
查看: 2472|回复: 10

ass字幕如何合成到视频流中

  • TA的每日心情
    开心
    前天 18:42
  • 签到天数: 517 天

    [LV.9]以坛为家II

    4

    主题

    56

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    58405
    QQ
    Force_cc 发表于 2020-6-24 23:16:33 | 显示全部楼层 |阅读模式
    本来想剪一些好康的画面,遇到了这个问题。


    我用的是pr,百度出来大概都是ffmpeg生成透明底的mov,但是这个方法有个问题,当在aegisub的淡入淡出命令{\fad(0.0)}的时候,生成的字幕视频无法达到想要的效果。


    命令
    1. ffmpeg -y -f lavfi -i "[email protected]:size=1920x1080,format=rgba,subtitles=subtitle.ass:alpha=1" -c:v png -t "01:52:13.735" subtitle.mov -stats
    复制代码



    想要的:


    生成的却是


    我在搜索过程中得到另一个命令,虽然可以实现我对字幕的要求,但是需要对原视频的视频流进行转码处理,生成的文件变得很小,个人感觉损失了一部分画质。
    1. ffmpeg -i video.mp4 -vf ass=subtitle.ass -y dest.mp4
    复制代码


    其他方法,比如说在安装了avisynth的前提下,在pr中添加插件,名为“PremiereAVSPlugin”,可以利用avs脚本实现在pr中添加一条透明背景的视频流字幕,但是在我的pr版本下,在最后编译视频的时候出现了错误“premiere cs avs importer x64 错误代码:5”,到这里我就很绝望了,虽然我知道可能是版本问题,,,
    1. avs脚本:
    复制代码


    还有一种方法是在aegisub中添加ass2MP4的插件,但由于原理和第一个命令是相同的,所以只能选择放弃
    https://mp.weixin.qq.com/s/GQr5_YJwGq-Ls1CK6LxCVg

    没想到我这种小白第一次剪好康的视频遇到个这么大麻烦,啊啊啊(╯‵□′)╯︵┻━┻

    现在就很绝望,想知道大家有没有方法把ass合成到视频流中,或者有没有其他的可以导入ass的视频编辑软件0.0

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    内向的青年,纵有满腔的热情,却无从诉说,终究造成无可挽回的悲剧。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-6-12 01:51
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    1

    主题

    59

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    7839
    kyriakos 发表于 2020-6-25 00:24:09 | 显示全部楼层
    vapoursynth?
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969753

    卓越贡献

    tonyhsie 发表于 2020-6-25 03:15:54 | 显示全部楼层
    既然有 avisynth

    那就放個 VSFilter.dll 在 plugin 裡

    avs 檔的最後加一行
    TextSub("E:\op.ass")


    這樣就把 ass 字幕加進這個 avs 裡了
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-6-5 17:57
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    49

    主题

    466

    回帖

    2581

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    1787395

    崭露头角活跃达人新人登场渐入佳境

    菜姬 发表于 2020-6-25 07:36:49 | 显示全部楼层
    只要想把“ass合成到视频流中”,就要“进行转码处理”
    1. ffmpeg -i video.mp4 -vf ass=subtitle.ass -y dest.mp4
    复制代码

    可以在这个命令上添加一些压制参数 比如-c:v libx264 -preset slower -crf 20 这种

    当然你把视频和字幕混流成一个mkv也可以
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 18:42
  • 签到天数: 517 天

    [LV.9]以坛为家II

    4

    主题

    56

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    58405
    QQ
    Force_cc  楼主| 发表于 2020-6-25 10:13:53 | 显示全部楼层

    感谢推荐φ(* ̄0 ̄)
    内向的青年,纵有满腔的热情,却无从诉说,终究造成无可挽回的悲剧。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 18:42
  • 签到天数: 517 天

    [LV.9]以坛为家II

    4

    主题

    56

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    58405
    QQ
    Force_cc  楼主| 发表于 2020-6-25 10:16:04 | 显示全部楼层
    菜姬 发表于 2020-6-25 07:36
    只要想把“ass合成到视频流中”,就要“进行转码处理”

    可以在这个命令上添加一些压制参数 比如-c:v libx2 ...

    感谢回复,我在找找ffmpeg的命令格式(●'◡'●)
    内向的青年,纵有满腔的热情,却无从诉说,终究造成无可挽回的悲剧。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 18:42
  • 签到天数: 517 天

    [LV.9]以坛为家II

    4

    主题

    56

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    58405
    QQ
    Force_cc  楼主| 发表于 2020-6-25 10:18:08 | 显示全部楼层
    tonyhsie 发表于 2020-6-25 03:15
    既然有 avisynth

    那就放個 VSFilter.dll 在 plugin 裡

    感谢回复,我会试试这个...(* ̄0 ̄)ノ
    内向的青年,纵有满腔的热情,却无从诉说,终究造成无可挽回的悲剧。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 18:42
  • 签到天数: 517 天

    [LV.9]以坛为家II

    4

    主题

    56

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    58405
    QQ
    Force_cc  楼主| 发表于 2020-6-25 11:05:12 | 显示全部楼层
    tonyhsie 发表于 2020-6-25 03:15
    既然有 avisynth

    那就放個 VSFilter.dll 在 plugin 裡

    感谢,原来我的pr 的错误代码5 是因为没有加载这个dll,我只是在avs脚本里添加了LoadPlugin("VSFilter.dll")
    内向的青年,纵有满腔的热情,却无从诉说,终究造成无可挽回的悲剧。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 12:25
  • 签到天数: 71 天

    [LV.6]常住居民II

    2

    主题

    11

    回帖

    0

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36562
    ssh_0224 发表于 2024-6-19 21:50:00 | 显示全部楼层
    本帖最后由 ssh_0224 于 2024-6-20 10:38 编辑
    Force_cc 发表于 2020-6-25 10:13
    感谢推荐φ(* ̄0 ̄)

    我打包好了硬压ass的VapourSynth脚本“ass_render.py”,以及所有用到的软件(ffmpeg、python、VapourSynth)和几个找到的ass渲染插件,使用说明和命令行在下面的链接里:
    https://wwm.lanzouq.com/i6zvu228qahg



    最近恰好自己也有这方面需求,所以研究了下,现在分享给各位。


    下面是ass_render.py”中的vpy代码(文件扩展名可以是“.py”也可以是“.vpy”,注意保存时,文本编码为UTF-8),已经装好软件和插件的VapourSynth老用户可以借鉴一下:
    1. # 将“drive:\\path\\to\\video_file”字样替换为你的视频路径
    2. # 将“drive:\\path\\to\\subtitle_file(.ass/.srt)”字样替换为你的ass文件路径
    3. # 用“\\”分隔路径,或者可以试试“/”。

    4. from vapoursynth import core

    5. #设置缓存大小
    6. core.max_cache_size = 1024000

    7. #解码原视频中的视频流,转换为原始视频流
    8. video_clip_handle = core.bs.VideoSource(source = "drive:\\path\\to\\video_file")

    9. #向原始视频流中硬压ass字幕
    10. # 下面这个,是我这边试过,个人认为质量最好的ass渲染器
    11. video_clip_handle = core.sub.TextFile(video_clip_handle,"drive:\\path\\to\\subtitle_file(.ass/.srt)")

    12. # 还可以试试下面这几个ass渲染器,一行代表一个ass渲染器,要用哪个就把这行最前面的“#”去掉
    13. # 同时不要忘记给之前用过,现在不用的行加上“#”注释掉,否则会重复渲染,多个字幕会叠在一起
    14. #video_clip_handle = core.vsfm.TextSubMod(video_clip_handle,"drive:\\path\\to\\subtitle_file(.ass/.srt)")
    15. #video_clip_handle = core.xyvsf.TextSub(video_clip_handle,"drive:\\path\\to\\subtitle_file(.ass/.srt)")
    16. #video_clip_handle = core.assrender.TextSub(video_clip_handle,"drive:\\path\\to\\subtitle_file(.ass/.srt)")

    17. video_clip_handle.set_output()
    复制代码

    以及预览ass渲染效果和导出硬压视频的CMD命令行:
    1. # 先确保“ass_render.py”里的文件路径已经替换完毕!且所有软件和插件已经安装到位!
    2. # 先确保“ass_render.py”里的文件路径已经替换完毕!且所有软件和插件已经安装到位!
    3. # 先确保“ass_render.py”里的文件路径已经替换完毕!且所有软件和插件已经安装到位!


    4. # 在当前ass_render.py路径下运行cmd,然后按需复制以下命令(没有“#”注释的两行),
    5. # 注意替换原视频的路径!!
    6. # 如果原视频也在同目录下,只需要替换为原视频文件名即可

    7. # 预览ass字幕渲染效果的命令(没有声音)
    8. #(全屏,按ESC退出预览,左右方向键快进,因为视频是源码流的形式,建议只快进,快退可能会出问题)
    9. vspipe -c y4m "ass_render.py" - | ffplay -i -


    10. # 导出压缩好的视频,输出的视频在当前目录下的“output.mkv”
    11. # 因为vspipe只能导出单独的视频流(没有声音),所以需要ffmpeg将原视频的声音也混流进去,也就是需要原视频路径
    12. # 如果对ffmpeg命令不熟悉的话,两个“-i”的顺序绝对不要碰!
    13. vspipe -c y4m "ass_render.py" - | ffmpeg -i - -i "【你原视频的完整绝对路径,或相对路径】" -map 0 -map 1:a -c:v libx264 -preset veryfast -b:v 16M -level 52 -crf 16 -g 120 -c:a copy -f matroska output.mkv

    14. # “-g”参数可以理解为关键帧之间间隔的帧数
    15. # “-b:v”参数为视频码率,16 M = 16000 kbps
    16. # “-preset”预设可以调慢一点,medium、slow、veryslow都行
    17. # “-crf”顾名思义控制crf,越低视频质量越好,不过也不能过低

    复制代码

    VapourSynth的字幕渲染插件是有更新网站的:https://vsdb.top/vsrepogui
    进入网站后,在绿色列表顶部右侧的筛选器里单击下拉按钮,选中最底下的“Subtitles”即可筛选出所有有关字幕的插件。除了ass外,还有PGS、sup等的插件。


    可以留意一下:
    ①Subtext(发帖时所打包版本的更新日期:2023-10-04
    https://github.com/vapoursynth/subtext/releases
    ②assrender(发帖时所打包版本的更新日期:2024-05-26
    https://github.com/AmusementClub/assrender/releases
    上面这两个我比较看好的插件的更新。


    感谢@孤雨独火 的建议,已放上插件github链接。




    点评

    https://github.com/vapoursynth/subtext/releases  发表于 2024-6-19 23:31
    直接去人仓库拉就完事了 https://github.com/AmusementClub/assrender/releases  发表于 2024-6-19 23:31

    评分

    参与人数 1活跃度 +6400 收起 理由
    Force_cc + 6400 很给力!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表