如何将字幕合并到视频?

13 video

如何将字幕合并到电影中以在我的 android 电视上播放?

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

Pet*_*des 26

如果您的电视可以播放有字幕的电影多工到同一个文件中的视频,也有很多优势,加上字幕的字幕轨道,而不是它们燃烧成视频。

mkvmerge -o movie_with_subs.mkv   movie.mp4  subs.srt
Run Code Online (Sandbox Code Playgroud)

这将包括来自 mp4(视频、音频、章节)的所有曲目,以及来自 srt 的字幕作为文本字幕轨道。所需的时间与复制文件一样长,因为它不必对视频进行解码/重新编码。

Ubuntu 将 mkvmerge 打包在mkvtoolnix. 有一个mkvtoolnix-gui带有 gui 前端的包。它有很多选项可以让您控制字幕偏移等内容。

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

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

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

您甚至可以提取它们,修复拼写错误,然后将它们混入。


Moh*_*ama 18

我在 ubuntu 16.04 很棒的应用程序上使用Hand Brake,并且使用起来非常简单。 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
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:

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

  • 我知道您想在电视上播放它。我的观点是,实际上并不是 `mkvmerge` 有问题,只是你的电视缺乏支持意味着多路复用 srt 可能无法工作。如果您有兴趣尝试位图字幕的想法,请谷歌搜索“将 srt 转换为 vobsub”,选择一个程序并尝试将其混合到 mkv 中。首先检查它是否在您的 Ubuntu 桌面上播放,然后查看您的电视上会发生什么。你对“好”的定义和我的有很大的不同;我不认为通过转码损失一点点质量是不可接受的,尤其是更大的文件。 (3认同)
  • 不工作。字幕不会被烧毁 (2认同)

Yur*_*ira 7

我认为MKVToolNix是最简单易用的免费工具,可用于将视频文件与字幕文件合并。只需通过例如运行终端/外壳命令来安装它,例如:

sudo apt-get install mkvtoolnix mkvtoolnix-gui -y
Run Code Online (Sandbox Code Playgroud)

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

MVKToolNix 的主窗口

MKVToolNix 将字幕轨道/流与视频轨道/流一起复用/复用。这意味着输出的 MKV 文件(例如/tmp/output.mkv)将是一个视频文件,其中包含嵌入的字幕,您将能够在播放此类 MKV 视频时打开和关闭字幕

PS:如果您的 Android TV 无法播放 MKV 视频文件,请使用MX PlayerKodi PlayerVLC Media Player添加 MKV 播放支持。


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

在这种情况下,一种费力但有益的方法包括(1)将您的字幕文件转换为SSA格式,(2)编辑 SSA 的样式行,然后(3)使用avconv/ffmpeg将此类风格化的字幕合并/硬编码到视频中轨道/流(然后字幕的字符将被转换为象形图或图形符号,即像素不仅“覆盖”视频的图片/帧,而且替换一些这样的像素)。

这是如何做到的:

  1. 使用诸如GNOME Subtitles 之类的字幕编辑器(从 shell 安装它,运行sudo apt-get install gnome-subtitles -y)将您的字幕文件(例如input.srt)转换为 SSA 格式(例如input.ssa),然后将 SSA 文件保存在/tmp(因此您将拥有/tmp/input.ssa)。
  2. 使用一个简单的文本编辑器,比如Gedit(用 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行后,保存 SSA 文件,然后关闭文本编辑器。上面的配置行将全局预设字幕为 16pt 黄色 Arial 字体,并在字幕后面添加半透明黑色背景(以便于阅读)。

  1. 现在是时候使用了avconv

3.1. 通过运行此 shell 命令安装avconvffmpeg包:

sudo apt-get install ffmpeg libav-tools -y
Run Code Online (Sandbox Code Playgroud)

编辑avconv弃用在Ubuntu 18.04及更高版本。因此,如果您使用的是 Ubuntu 18.04 或任何更高版本,只需安装ffmpeg

sudo apt install ffmpeg -y
Run Code Online (Sandbox Code Playgroud)

...或者:

sudo snap install ffmpeg
Run Code Online (Sandbox Code Playgroud)

3.2. 将您的视频文件(例如input.avi)移动到/tmp文件夹中,以便最终拥有例如/tmp/input.avi/tmp/input.ssa

3.3. 运行 shell 命令cd /tmp以使 Linux shell 访问该/tmp目录

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

avconv -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
Run Code Online (Sandbox Code Playgroud)

编辑:如果您使用的是 Ubuntu 18.04 或更高版本,则上述命令必须ffmpegavconv.

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

avconv -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
Run Code Online (Sandbox Code Playgroud)

编辑:如果您使用的是 Ubuntu 18.04 或更高版本,则上述命令必须ffmpegavconv.

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

如果您希望尝试提高合并/输出视频的质量(即使以获取更大的文件大小为代价),请将512k参数替换为更大的参数(例如1024k)。但是,如果您决定获得较小的文件大小(即使以降低合并/输出视频的质量为代价),请将512k参数替换为较小的参数(例如256k)。如果原始(输入)视频文件的纵横比为4:2并且您想保留它,请更改-aspect 16:9-aspect 4:2. 如果您不知道此类视频文件的纵横比,请使用媒体播放器打开它,然后查看。例如,如果您使用 VLC 打开它,然后在播放时按Ctrl+ i,然后选择Codec选项卡,您将在名为 的字段中看到此类纵横比Decoded format