Force_cc 发表于 2020-6-24 23:16:33

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

本来想剪一些好康的画面,遇到了这个问题。


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


命令
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


想要的:https://bbs.acgrip.com/forum.php?mod=image&aid=19412&size=300x300&key=45f4e599cb8825f7&nocache=yes&type=fixnone→https://bbs.acgrip.com/forum.php?mod=image&aid=19413&size=300x300&key=6f57024e3bd4f203&nocache=yes&type=fixnone


生成的却是https://bbs.acgrip.com/forum.php?mod=image&aid=19414&size=300x300&key=dc7946cfde732ac8&nocache=yes&type=fixnone→https://bbs.acgrip.com/forum.php?mod=image&aid=19415&size=300x300&key=ba3372abc369bd15&nocache=yes&type=fixnone


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

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

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

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

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

kyriakos 发表于 2020-6-25 00:24:09

vapoursynth?

tonyhsie 发表于 2020-6-25 03:15:54

既然有 avisynth

那就放個 VSFilter.dll 在 plugin 裡

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

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

菜姬 发表于 2020-6-25 07:36:49

只要想把“ass合成到视频流中”,就要“进行转码处理”
ffmpeg -i video.mp4 -vf ass=subtitle.ass -y dest.mp4
可以在这个命令上添加一些压制参数 比如-c:v libx264 -preset slower -crf 20 这种

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

Force_cc 发表于 2020-6-25 10:13:53

kyriakos 发表于 2020-6-25 00:24
vapoursynth?

感谢推荐φ(* ̄0 ̄)

Force_cc 发表于 2020-6-25 10:16:04

菜姬 发表于 2020-6-25 07:36
只要想把“ass合成到视频流中”,就要“进行转码处理”

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

感谢回复,我在找找ffmpeg的命令格式(●'◡'●)

Force_cc 发表于 2020-6-25 10:18:08

tonyhsie 发表于 2020-6-25 03:15
既然有 avisynth

那就放個 VSFilter.dll 在 plugin 裡


感谢回复,我会试试这个...(* ̄0 ̄)ノ

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")

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老用户可以借鉴一下:
# 将“drive:\\path\\to\\video_file”字样替换为你的视频路径
# 将“drive:\\path\\to\\subtitle_file(.ass/.srt)”字样替换为你的ass文件路径
# 用“\\”分隔路径,或者可以试试“/”。

from vapoursynth import core

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

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

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

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

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


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

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


# 导出压缩好的视频,输出的视频在当前目录下的“output.mkv”
# 因为vspipe只能导出单独的视频流(没有声音),所以需要ffmpeg将原视频的声音也混流进去,也就是需要原视频路径
# 如果对ffmpeg命令不熟悉的话,两个“-i”的顺序绝对不要碰!
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

# “-g”参数可以理解为关键帧之间间隔的帧数
# “-b:v”参数为视频码率,16 M = 16000 kbps
# “-preset”预设可以调慢一点,medium、slow、veryslow都行
# “-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链接。




页: [1]
查看完整版本: ass字幕如何合成到视频流中