ffmpeg - 如何在 ffmpeg 视频过滤器的字幕中添加字体大小

标签 ffmpeg video-processing subtitle

我正在使用这个命令来裁剪、缩放,然后添加字幕作为覆盖

ffmpeg -i input.avi  -vf "[in]crop=in_w:in_h-20:0:0 [crop]; [crop]scale=320:240 [scale];[scale]subtitles=srt.srt" -aspect 16:9 -vcodec libx264  -crf 23 oq.mp4

我们如何设置字幕的字体大小/颜色?

最佳答案

有两种使用字幕的方法:hardsubs 和 softsubs。
硬子
subtitles 视频过滤器可用于硬字幕或老化字幕。这需要重新编码,并且字幕成为视频本身的一部分。force_style选项
要自定义字幕,您可以使用 force_style subtitles 中的选项筛选。使用字幕文件的示例 subs.srt并将字体大小设为 24,字体颜色为红色。

ffmpeg -i video.mp4 -vf "subtitles=subs.srt:force_style='Fontsize=24,PrimaryColour=&H0000ff&'" -c:a copy output.mp4
  • force_style使用 SubStation Alpha (ASS) style fields .
  • PrimaryColour以蓝绿红顺序为十六进制。请注意,这是 HTML 颜色代码的相反顺序。颜色代码必须始终以 &H 开头并以 & 结尾.

  • 神盾局
    或者,您可以使用 Aegisub创建和风格化您的字幕。另存为SubStation Alpha (ASS) 格式,因为它可以支持字体大小、字体颜色、阴影、轮廓、缩放、角度等。

    软潜艇
    这些是文件中的附加流。播放器只是在播放时渲染它们。比硬字幕更灵活,因为:
  • 您无需重新编码视频。
  • 您可以拥有多个字幕(各种语言)并在它们之间切换。
  • 您可以在播放期间打开/关闭它们。
  • 可以使用任何值得使用的播放器调整它们的大小。

  • 当然,如果设备或播放器无法使用软潜艇,有时需要硬潜艇。
    使用 stream copy 将字幕混合到视频文件中模式:
    ffmpeg -i input.mkv -i subtitles.ass -codec copy -map 0 -map 1 output.mkv
    
    没有任何内容被重新编码,因此整个过程将很快并且质量和格式将被保留。
    使用 SubStation Alpha (ASS) 字幕将允许您随意格式化字幕。这些可以使用 Aegisub 创建/转换。

    另见
  • subtitles video filter documentation
  • How to burn subtitles into the video
  • How to convert subtitle from SRT to ASS format
  • 关于ffmpeg - 如何在 ffmpeg 视频过滤器的字幕中添加字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363334/

    相关文章:

    ffmpeg - Android MediaPlayer 内部字幕

    Go/Cgo - 如何访问 Cstruct 的字段?

    ios - Mac 和 IOS 14 上的 Safari 无法播放 HTML 5 MP4 视频

    c++ - 使用 OpenCV 寻找最近的像素值

    ios - 有没有办法在 AVPlayerViewController 中显示自定义字幕轨道名称

    android - 如何在 ExoPlayer2 中显示 VTT 字幕?

    c - 编译器会处理像 if(0) 这样无用的代码吗?

    ios - 当 audioqueue 播放从 ffmpeg 解码的 lpcm 时,音频队列的耗时超过了媒体的持续时间

    android - FFmpeg 低修剪精度

    powershell - 如何使用powershell和other-transcode/ffmpeg批量处理一系列视频文件