为什么FFmpeg会在我的文件中添加第二个字幕,即使我明确只添加了一个字幕呢?

彼得·W

我有一个文件夹在一堆MP4文件和字幕文件,每个下面的模式episode[num].mp4episode[num].ass

我编写了一个小的Shell脚本来自动将它们组合到MKV文件中:

for i in *.mp4; do 
  name=`echo $i | cut -d'.' -f1`;
  mp4name="$name.mp4";
  subname="$name.ass";
  mkvname="$name.mkv";
  ffmpeg -i "$mp4name" -i "$subname" -map 0:v -map 0:a -map 1:s -metadata:s:a language=jpn -metadata:s:s:0 language=eng -c copy -y "$mkvname"
done

echo "Done";

打开生成的MKV文件之一后,VLC显示两个字幕轨道:

VLC字幕菜单显示两个字幕轨道,一个字幕标记为“ Track 1-English”,另一个标记为“ Track 2”

谁应该在这里责怪?FFmpeg,VLC还是我的又快又脏的脚本?我该如何解决这个问题?

贾科莫1968

VLC是您的责任,但这取决于您的最终目标。

FFmpeg不会两次添加字幕,但是VLC会自动检测.ass目录中的文件并将其添加到可用字幕列表中。VLC查找与视频文件名称完全相同的资产(例如字幕文件),并将其加载到播放器窗口中以进行播放。

所以,如果你在玩GreatMovie.mkv你有一个GreatMovie.ass目录中的文件并播放,VLC将显示嵌入MKV文件字幕以及GreatMovie.ass被坐在旁边的该目录中的文件MKV。

现在我说这取决于您的最终目标。如果最终目标只是一个包含所有资产的合并MKV文件,则需要.ass在完成后删除该文件。因此,我将通过rm -f "$subname";ffmpeg命令添加一个权限来修改您的脚本,如下所示:

for i in *.mp4; do 
  name=`echo $i | cut -d'.' -f1`;
  mp4name="$name.mp4";
  subname="$name.ass";
  mkvname="$name.mkv";
  ffmpeg -i "$mp4name" -i "$subname" -map 0:v -map 0:a -map 1:s -metadata:s:a language=jpn -metadata:s:s:0 language=eng -c copy -y "$mkvname"
  rm -f "$subname";
done

echo "Done";

或者,也许要创建一个completed_subs/目录,然后在完成后将字幕移动到该目录。

for i in *.mp4; do 
  name=`echo $i | cut -d'.' -f1`;
  mp4name="$name.mp4";
  subname="$name.ass";
  mkvname="$name.mkv";
  ffmpeg -i "$mp4name" -i "$subname" -map 0:v -map 0:a -map 1:s -metadata:s:a language=jpn -metadata:s:s:0 language=eng -c copy -y "$mkvname"
  mkdir -p "completed_sub";
  mv $subname "completed_sub/$subname";
done

echo "Done";

这样,您就可以从处理目录中删除字幕,因此查看MKV文件将仅显示嵌入在MKV文件中的字幕资产,而独立的字幕.ass文件现在位于中completed_sub/因此,您不仅可以查看完成的内容,还可以保留独立的字幕文件(如果将来以某种方式需要它们)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么第二个字符串保存在第一个字符串中?

来自分类Dev

我需要创建一个字段,该字段是maxdate的第二个日期

来自分类Dev

为什么即使添加了多个节点,我的链表也只包含一个节点?

来自分类Dev

与第二个字段相关时在一个字段中查找完全匹配

来自分类Dev

从字符串中捕获第二个字段和最后一个字段

来自分类Dev

MongoDB对两个集合进行查询,以在第一个集合中添加/减去一个字段,并与第二个集合中的匹配字段相加

来自分类Dev

在两个csv文件中匹配一个字符串,但是第二个文件太大,无法读入列表

来自分类Dev

encodeURIComponent似乎为我的字符串添加了一个字符

来自分类Dev

第一个代码和第二个代码之间有什么区别,为什么我应该添加getString?

来自分类Dev

如何在Java中获取第二个单词的第一个字符

来自分类Dev

不在查询中,然后从第二个集合中选择一个字段

来自分类Dev

C#UWP为什么我不能添加第二个事件处理程序?

来自分类Dev

为什么我在文件中又报告了一个字节数?

来自分类Dev

Salesforce规则:如果填充了一个字段,则防止填充第二个字段

来自分类Dev

找到第二个字段的差异,使用第一个字段报告(awk)

来自分类Dev

在mysql查询中将第二个字段与第一个字段连接

来自分类Dev

我可以添加第二个php.ini文件是取代了第一?

来自分类Dev

即使我使用 Django,也要添加一个字形

来自分类Dev

为什么在我使用&&时cmd运行我的第二个命令,即使第一个命令失败了?

来自分类Dev

如果第二个字段匹配,请perl一个衬里将列添加到文件

来自分类Dev

当我尝试根据Rails上的Ruby入门指南添加第二个模型时,为什么Rails在PostsController#index中给我一个SyntaxError错误

来自分类Dev

从文件读取后,第二个字符数组覆盖第一个字符数组

来自分类Dev

如果一个单元格包含两个单词,我该如何使用第一个单词的第一个字母,但使用第二个单词的所有字母?

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

在第一个字段中查找重复项,然后合并重复行第二个字段中的文本

来自分类Dev

当日期显示在一个字段中时,请使其同时显示在第二个字段中

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

我添加了一个while循环以确保输入有效,但是即使您输入相同的内容,它也只接受第二次答案?

来自分类Dev

如何将第一个字典的值嵌套到第二个字典的值中?

Related 相关文章

  1. 1

    为什么第二个字符串保存在第一个字符串中?

  2. 2

    我需要创建一个字段,该字段是maxdate的第二个日期

  3. 3

    为什么即使添加了多个节点,我的链表也只包含一个节点?

  4. 4

    与第二个字段相关时在一个字段中查找完全匹配

  5. 5

    从字符串中捕获第二个字段和最后一个字段

  6. 6

    MongoDB对两个集合进行查询,以在第一个集合中添加/减去一个字段,并与第二个集合中的匹配字段相加

  7. 7

    在两个csv文件中匹配一个字符串,但是第二个文件太大,无法读入列表

  8. 8

    encodeURIComponent似乎为我的字符串添加了一个字符

  9. 9

    第一个代码和第二个代码之间有什么区别,为什么我应该添加getString?

  10. 10

    如何在Java中获取第二个单词的第一个字符

  11. 11

    不在查询中,然后从第二个集合中选择一个字段

  12. 12

    C#UWP为什么我不能添加第二个事件处理程序?

  13. 13

    为什么我在文件中又报告了一个字节数?

  14. 14

    Salesforce规则:如果填充了一个字段,则防止填充第二个字段

  15. 15

    找到第二个字段的差异,使用第一个字段报告(awk)

  16. 16

    在mysql查询中将第二个字段与第一个字段连接

  17. 17

    我可以添加第二个php.ini文件是取代了第一?

  18. 18

    即使我使用 Django,也要添加一个字形

  19. 19

    为什么在我使用&&时cmd运行我的第二个命令,即使第一个命令失败了?

  20. 20

    如果第二个字段匹配,请perl一个衬里将列添加到文件

  21. 21

    当我尝试根据Rails上的Ruby入门指南添加第二个模型时,为什么Rails在PostsController#index中给我一个SyntaxError错误

  22. 22

    从文件读取后,第二个字符数组覆盖第一个字符数组

  23. 23

    如果一个单元格包含两个单词,我该如何使用第一个单词的第一个字母,但使用第二个单词的所有字母?

  24. 24

    从第二个字符串中删除出现在第一个字符串中的字符

  25. 25

    在第一个字段中查找重复项,然后合并重复行第二个字段中的文本

  26. 26

    当日期显示在一个字段中时,请使其同时显示在第二个字段中

  27. 27

    从第二个字符串中删除出现在第一个字符串中的字符

  28. 28

    我添加了一个while循环以确保输入有效,但是即使您输入相同的内容,它也只接受第二次答案?

  29. 29

    如何将第一个字典的值嵌套到第二个字典的值中?

热门标签

归档