如何将字幕合并到视频中?

如何将字幕合并到视频中?

如何将字幕合并到电影中以便在 Android 电视上播放?

我搜索了很长时间,但几乎程序都无法在 ubuntu 上运行,或者我找不到存储库。 这里是一些答案,但我认为它不再支持16.04

答案1

如果你的电视可以播放带字幕的电影多路复用放入与视频相同的文件中,将字幕添加为字幕轨道而不是将其刻录到视频中有很多优点。

mkvmerge -o movie_with_subs.mkv   movie.mp4  subs.srt

这将包括 mp4 中的所有轨道(视频、音频、章节)以及 srt 中的字幕作为文本字幕轨道。它所花的时间与复制文件的时间差不多,因为它不必解码/重新编码视频。

Ubuntu 在 中安装了 mkvmerge 软件包mkvtoolnix。这是一个mkvtoolnix-gui带有 gui 前端的软件包。它有很多选项可让您控制诸如字幕偏移之类的内容。

这样做的主要优点是,你可以避免因另一个解码/编码循环而降低质量发电损失。转码时无法避免质量损失,并且需要花费大量 CPU 时间才能接近良好编码源的每文件质量。(例如,使用 x264 -preset slower,或者如果您的播放器支持,使用 x265,如果您愿意花费大量 CPU 时间来制作看起来仍然不错的较小文件)。如果您不关心文件大小,因为您只是将其流式传输到电视,则使用 x264 转码-preset veryfast -crf15可以快速运行并且质量损失最小。

复用字幕的另一个优点是您可以打开/关闭字幕,或者让您的播放器在屏幕上的不同位置显示它们。

如果您想记住电影中的一句台词,您也可以稍后提取它们并进行搜索。

您甚至可以提取它们,修正拼写错误,然后将它们重新混合。

答案2

我用手刹在我的 ubuntu 16.04 上,这款应用程序非常棒,而且使用起来非常简单。 https://launchpad.net/~stebbins/+archive/ubuntu/handbrake-releases

安装:

sudo add-apt-repository ppa:stebbins/handbrake-releases
sudo apt-get update 
sudo apt-get install handbrake

它是如何工作的:

  • 单击来源并选择电影。
  • 从字幕列表选项卡单击添加
  • 别忘了勾选刻录视频项目清单
  • 最后点击开始

答案3

我觉得MKVToolNix是目前最简单、最易用的免费工具,可用于将视频文件与字幕文件合并。只需通过运行终端/shell 命令即可安装,例如:

sudo apt-get install mkvtoolnix mkvtoolnix-gui -y

...然后运行它,右键单击源文件区域以添加您的视频文件和字幕文件(步骤1,如下图所示),指定目标 MKV 视频文件的位置(步骤2),然后点击开始多路复用(步3)。 完毕。

MVKToolNix的主窗口

MKVToolNix 将字幕轨道/流与视频轨道/流一起复用/多路复用。这意味着输出的 MKV 文件,例如~/Videos/output.mkv~字符是您的帐户文件夹(例如/home/your-account/),将是一个包含嵌入字幕的视频文件,并且您可以在播放此类 MKV 视频时打开或关闭字幕

PS:如果你的 Android TV 不支持播放 MKV 视频文件,请使用MX播放器Kodi 播放器或者VLC 媒体播放器添加 MKV 播放支持。


如果您希望视频中的字幕“融合”(硬编码),而不是仅仅进行多路复用/多路复用,该怎么办?

在这种情况下,一个费力却有回报的方法是(1)将字幕文件转换为南非格式,(2)编辑 SSA 的Style行,然后(3)使用avconv(Ubuntu 17.10 或更早版本)或ffmpeg(Ubuntu 18.04 或更高版本)合并/硬编码此类程式化字幕插入视频轨道/流(字幕的字符随后将被转换为象形文字或图形符号,即像素不仅“覆盖”视频的图片/帧,而且替换像素)。

操作方法如下:

  1. 使用字幕编辑器,例如GNOME 字幕(从 shell 安装,运行sudo apt-get install gnome-subtitles -y)将您的字幕文件(例如 )转换input.srt为 SSA 格式(例如input.ssa),然后将 SSA 文件保存为~/Videos(您因此将拥有~/Videos/input.ssa)。

  2. 使用简单的文本编辑器,例如编辑(使用 shell 命令安装sudo apt-get install gedit -y)打开 SSA 文件,然后替换整个 Style 线例如这个:

    Style: Default,Arial,16,&H00FFFF,&H00FFFF,&H00FFFF,&H77000000,2,0,3,2,1,2,10,10,10,0,0

    ...或者例如这个:

    Style: Default,Times New Roman,18,&H00FFFF,&H00FFFF,&H00FFFF,&H77000000,2,0,3,2,1,2,10,10,10,0,0

    替换Style行后,保存 SSA 文件,然后关闭文本编辑器。上面的配置行将全局预设字幕为 16pt 黄色 Arial(或 18pt 黄色 Times New Roman)字体,并在字幕后面添加半透明黑色背景(以便于阅读)。

  3. 现在是时候使用avconv/ffmpeg了:

  • 3.1. 如果您使用的是 Ubuntu 17.10 或更早版本,请avconv运行以下 shell 命令安装软件包:

    sudo apt-get install ffmpeg libav-tools -y
    

    但是如果你使用的是 Ubuntu 18.04 或更高版本,avconv那么已弃用而必须ffmpeg使用 shell 命令来安装,例如:

    sudo apt install ffmpeg -y
    

    ...或者:

    sudo snap install ffmpeg
    
  • 3.2. 将视频文件(例如input.avi)移动到您的Videos文件夹,以便最终~/Videos/input.avi获得~/Videos/input.ssa

  • 3.3. 运行shell命令cd ~/Videos,让Linux shell进入~/Videos目录

  • 3.4. 通过运行以下 shell 命令将 SSA 字幕硬编码到视频文件中:

    ffmpeg -i input.avi -map 0:0 -map 0:1 -c:v libx264 -aspect 16:9 -q:v 1 -b:v 512k -strict -2 -c:a aac -ac 2 -filter:v subtitles=input.ssa output.mp4
    

    编辑:如果您使用的是 Ubuntu 17.10 或更早版本,则上述命令必须以 开头,avconv而不是ffmpeg

    上述命令使用libx264视频编解码器创建H.264视频文件(.mp4只是容器的文件扩展名)。但是,如果您更喜欢创建MPEG-4视频文件,请使用mpeg4视频编解码器:

    ffmpeg -i input.avi -map 0:0 -map 0:1 -c:v mpeg4 -aspect 16:9 -q:v 1 -b:v 512k -strict -2 -c:a aac -ac 2 -filter:v subtitles=input.ssa output.mp4
    

    编辑:如果您使用的是 Ubuntu 17.10 或更早版本,则上述命令必须以 开头,avconv而不是ffmpeg

    上述命令的输出将是~/Videos/output.mp4,您会注意到这样的 MP4(即 x264 或 MPEG-4)视频文件将具有硬编码(即位图)字幕。


脚注

  • 如果您希望尝试提高合并/输出视频的质量(即使以获得更大的文件大小为代价),请用512k更大的参数替换该参数(例如1024k)。

  • 但是,如果您决定获取较小的文件大小(即使以降低合并/输出视频的质量为代价),请512k用较小的参数替换该参数(例如256k)。

  • 如果原始(输入)视频文件的宽高比为4:2并且您想保留它,请更改-aspect 16:9-aspect 4:2

  • 如果您不知道此类视频文件的宽高比,请使用媒体播放器打开它然后查看。例如,如果您使用 VLC 打开它,然后在播放时按Ctrl+并选择选项卡,您将在名为 的字段中看到此类宽高比。iCodecDecoded format

  • 减小512k(例如256k)可以很好地与libx264编解码器配合使用以生成较小的文件,但mpeg4编解码器对此类参数更改更具“弹性”。如果您正在使用-c:v mpeg4并且想要生成较小的输出文件,请尝试更改-q:v 1-q:v 2-q:v 3。这个数字越大,最终文件大小越小。

答案4

现在无需转换即可.ass在 Ubuntu 20.10 上运行

他们最近在软件包中启用了 libass 支持,所以现在您可以这样做:

ffmpeg -i hello.mp4 -vf "subtitles=hello2.srt" hello-sub.mp4

在启用它之前,您需要:

ffmpeg -i hello2.srt hello.ass
ffmpeg -i hello.mp4 -vf ass=hello.ass hello-sub.mp4

您可以使用以下命令检查 libsass 支持:

ffmpeg --version

现在包含:

--enable-libass

生成的输出可以在以下位置看到:https://www.youtube.com/watch?v=Q0nVA3mYXLU

可以通过以下方式获取测试文件:

wget -O hello.mp4 https://github.com/cirosantilli/media/blob/master/Top_Down_2D_Continuous_Game_with_Urho3D_C++_SDL_and_Box2D_for_Reinforcement_Learning_first_8_seconds.mp4?raw=true
wget -O hello2.srt https://github.com/cirosantilli/media/blob/master/Top_Down_2D_Continuous_Game_with_Urho3D_C++_SDL_and_Box2D_for_Reinforcement_Learning_first_8_seconds.srt?raw=true

在哪里:

话虽如此,.ass它是一种优越的格式,因为它可以编码字体外观,所以如果您自己生成字幕,它是最好的选择。

有关的:

在 Ubuntu 20.04、ffmpeg 4.2.4 上测试。

相关内容