代码之家  ›  专栏  ›  技术社区  ›  L42

如何最好地使用ffmpeg将dvb_subtitles添加到视频中?

  •  0
  • L42  · 技术社区  · 3 年前

    我试图从.srt字幕文件+.ts视频文件中获取=>带有dvb_subtitle的.ts视频文件。

    我的.srt:

    1
    00:00:00,000 --> 00:00:05,000
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel hendrerit massa.
    
    2
    00:00:05,000 --> 00:00:10,000
    Aliquam dolor sapien, molestie ac sagittis eu, tempus nec est.
    
    3
    00:00:10,000 --> 00:00:28,000
    Morbi id sem eu sapien consectetur imperdiet. Morbi sed purus et sapien interdum placerat vitae quis orci.
    

    我的ts:样本_1920x1080.ts来自 https://filesamples.com/formats/ts

    SubtitleEdit 命令: .\SubtitleEdit.exe /convert 'test_subtitles.srt' Blu-raysup /resolution:1920x1080 /overwrite . 这将按预期创建一个test_subtitles.sup文件。

    然后我使用 ffmpeg 包含sup字幕,如下所示: .\ffmpeg.exe -y -i 'sample_1920x1080.ts' -fix_sub_duration -i 'test_subtitles.sup' -map 0:v -map 1:s -vcodec copy -acodec copy -scodec dvbsub -copyts -muxdelay 0 -max_delay 0 'output.ts' 这是可行的,但结果有时不太可读。这是一张截图:

    Screenshot of VLC showing that the subtitles are hard to read

    我还有其他选择吗?或者字幕编辑/ffmpeg到f.ex中的选项使字幕更大?

    (我也把这篇文章发布到了Github的SubtitleEdit仓库中: https://github.com/SubtitleEdit/subtitleedit/issues/4539 .)

    更新:

    我从《字幕编辑》的作者那里了解到,如果使用字幕编辑的图形用户界面,确实可以增加字体大小(请参阅 here 。但是,我希望使用命令行工具来完成此操作。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Abilogos    3 年前

    不幸的是,它必须像这样使用ffmpeg:

    ffmpeg -i ./sample_1280x720.ts -i ./sample.srt -map 0 -map 1 -c copy -c:s dvd_subtitle ./out.ts
    

    但ffmpeg不会接受此错误:

    字幕编码目前只能从文本到文本或位图 转换为位图

    .srt 格式是基于文本的 .sup 格式是基于图像的。

    只要ffmpeg 拒绝 将字幕编码为视频。

    我们可以使用 -vf (视频过滤器), 硬编码(srt)字幕 视频:

    ffmpeg -i ./sample_1280x720.ts -vf subtitles=sample.srt:force_style='Fontsize=24' ./out.ts
    

    我们可以定义字体大小 Fontsize 选项。

    enter image description here

    但如果有 sup 如果您想刻录到视频中,可以使用以下命令:

    ffmpeg -i ./sample_1280x720.ts -i ./sample.sup  -filter_complex "[0:v][1:s]overlay" ./out.ts
    
        2
  •  0
  •   Twenkid    3 年前

    2020年12月19日编辑:

    这是我最后一条评论中的想法——一个Python脚本,用于替换字幕编辑的Settings.xml中的字体大小,在脚本之前调用:

    https://github.com/Twenkid/Python-Various/blob/main/Exercise/SubtitleEdit/sub.py

    python sub.py C:\SE3518\Settings.xml 44
    

    等。

    ...

    你试过扩大dvb的轨道吗?这条线索表明这是可能的: ffmpeg and dvb subtitles scaling

    Maknol的那部分( 不过我还没试过 ):

    -filter_complex“[0:s:0]比例=-1:2400[子],[0:v][子]叠加=x=150:y=-80”

    哪里:

    比例尺-字幕大小

    覆盖x=-垂直

    叠加y=-水平

    编辑:我设法用ffmpeg缩放了sup字幕,但到目前为止,它分两次工作,见下文。

    我的顺序是:

    1. 您的命令,生成带有字幕的流:

    ffmpeg-i sample_1920x1080.ts-fix_sub_duration-i test_subtitles-映射0:v-映射1:s-vcodec copy-acodec copy-scodec dvbsub-copyts-多路复用延迟0-最大延迟0输出A.ts

    1. 缩放字幕并调整其位置(但由于过滤器复杂,需要重新编码)

    ffmpeg-i outputA.ts-元数据标题=“缩放”-filter_complex“[0:s:0]缩放=-1:1400[子],[0:v][子]覆盖=x=-250:y=-300”-c:v libx264-b:v 5M-预设速度快-方面16:9-c:复制输出_Scaled.ts

    初始尺寸:

    enter image description here

    我最初的字幕更大(字体大小25),这里的缩放系数很小=1400/1080

    按比例:

    enter image description here

    ...

    如果我试图一次性完成,我的语法会呈现默认大小+覆盖缩放的大小(并且只显示一个项目,而不是全部)。

    这是一次传球的尝试:

    #立即覆盖它们。。。 ffmpeg-i sample_1920x1080.ts-fix_sub_duration-i test_subtitles sup-scodec dvbsub-map 0:v-map 1:s-元数据标题=“Scale”-filter_complex“[1:s]Scale=-1:1400[sub],[0:v][sub]overlay=x=-250:y=-300”-c:v libx264-crf 20-快速预设-方面16:9-c:a aac-严格实验-b:a 192k输出STACK_sup.ts

    它产生了类似的东西:

    enter image description here