ffmpeg给视频添加字幕(软字幕和硬字幕)

分享讨论IT相关的内容
回复
头像
BobMaster
锋芒初露
锋芒初露
帖子: 1317
注册时间: 2020年 12月 7日 08:05
来自: 神秘的东方
我的状态: 🎯
为圈友点赞: 404 次
被圈友点赞: 263 次
联系:

ffmpeg给视频添加字幕(软字幕和硬字幕)

帖子 BobMaster »

这篇文章记录一下ffmpeg给视频添加字幕的两种方式和一些细节

软字幕(外挂字幕)

先获取视频元数据

代码: 全选

ffmpeg -i 视频.mkv -hide_banner
假设有一个视频轨(#0:0), 一个音频轨(#0:1), 两个字幕轨(#0:2和#0:3)
现在我要添加第三个字幕, 可以如下操作

代码: 全选

ffmpeg -i 视频.mkv -i 字幕.ass -map 0:v:0 -map 0:a:0 -map 0:s:0 -map 0:s:1 -c:v copy -c:a copy -c:s copy -map 1 -metadata:s:s:2 language=zh_CN  output.mkv
参数解释:
  • 第一个输入流(视频.mkv)对应map 0, 第二个输入流(字幕.ass)对应map 1
  • metadata:s:s:2 指向第三个字幕流元数据
  • c:v 视频编解码方式
  • c:a 音频编解码方式
  • c:s 字幕编解码方式

硬字幕(将字幕烧录到视频上)

将外部字幕烧录到视频中(例如第二个字幕轨)

代码: 全选

ffmpeg -i 视频.mkv -map 0:v:0 -map 0:a:0 -vf subtitles=字幕.ass output.mp4
使用mkv容器中的某一个字幕轨烧录到视频上

代码: 全选

ffmpeg -i 视频.mkv -map 0:v:0 -map 0:a:0 -vf subtitles=视频.mkv:si:1 output.mp4
使用GPU硬件加速(以英伟达显卡为例)

代码: 全选

ffmpeg -c:v h264_cuvid -i 视频.mkv -map 0:v:0 -map 0:a:0 -vf subtitles=字幕.ass -c:v h264_nvenc output.mp4
也可以使用如下方式

代码: 全选

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i 视频.mkv -map 0:v:0 -map 0:a:0 -vf subtitles=字幕.ass -c:v h264_nvenc output.mp4
使用GPU硬件加速(以AMD显卡为例)

代码: 全选

ffmpeg -i 视频.mkv -map 0:v:0 -map 0:a:0 -vf subtitles=字幕.ass -c:v h264_amf output.mp4
参考资料:
https://ffmpeg.org/ffmpeg.html#Stream-specifiers-1
https://developer.nvidia.com/blog/nvidi ... ing-guide/
https://trac.ffmpeg.org/wiki/HWAccelIntro
https://stackoverflow.com/questions/451 ... on-windows
以下圈友为 BobMaster 的帖子点了赞:
whylist
人生如音乐,欢乐且自由
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客