FFmpeg:使用输入名称在 Caja 脚本中输出来提取选定文件的字幕?

FFmpeg:使用输入名称在 Caja 脚本中输出来提取选定文件的字幕?

好的,我知道提取字幕的命令,也知道如何制作 Caja 脚本(这很棒,因为我可以为它们分配键盘快捷键),但我想知道要向脚本添加什么命令,以便在运行时它可以从任何 MKV 中提取字幕,无论名称如何,最好抓取该名称并将其用于输出 SRT 文件。

目前,我通过终端使用此命令,将视频副本重命名为電影.mkv,提取出的子序列最终为電影.srt(使用时间:0因为通常英语字幕是第一个字幕轨道):

ffmpeg -i movie.mkv -vn -an -codec:s:0 srt movie.srt

将它放入 Caja 脚本中效果很好 - 只要我在電影.mkv,显然。虽然通过键盘快捷键执行脚本比打开终端并运行该命令要快一点(我可以通过潜艇别名),我真正想要做的是在选定的 MKV 视频上运行它,无论它的名称是什么(可能包含空格),并且最好将该名称赋予输出.srt文件(但我很高兴输出電影.srt- 我的主要目的不是重命名视频或视频副本)。虽然能够同时对多个文件执行此操作是一个优势,但必须单独执行此操作也不是问题。

我尝试过网上看到的各种方法(主要是关于批处理),使用通配符和其他东西,但我对此并不熟悉,所以需要你的专业知识!谢谢,提前谢谢。

更新:我已成功执行一条命令,将选定文件(无论名称如何)中的子内容提取到 subs.srt 中:

ffmpeg -i "$1" -vn -an -codec:s:0 srt subs.srt

...所以如果有人知道如何让它从文件中获取名称并将其传递给.srt 文件,我们将不胜感激!

答案1

天哪,我应该继续修修补补,因为不久之后我就想出了解决方案,哈哈。但至少现在这个答案对其他正在寻找这个答案的人来说是有用的。所以正确的代码是从选定的视频文件中提取字幕并给出.srtfile 源文件的名称为:

ffmpeg -i "$1" -vn -an -codec:s:0 srt "${1%.mkv}.srt"

如果你想创建一个脚本来提取强制潜艇(仅适用于非英语部分),因为这通常是第二个字幕轨道,所以使用这个:

ffmpeg -i "$1" -vn -an -codec:s:1 srt "${1%.mkv}.srt"

或者,由于我在最后一个方面取得了不同的成功,因此使用:

mkvextract tracks "$1" 2:"${1%.mkv}.srt"

由于强制订阅的曲目数可能会有所不同,因此您可以像我一样创建多个脚本 - 例如调用上面的脚本提取字幕轨道 2,还有3:代替2:称为提取字幕轨道 3使用代码:

mkvextract tracks "$1" 3:"${1%.mkv}.srt"

然后你可以通过编辑加速文件,并使其能够快速轻松地提取正确的字幕(例如,我使用 Alt+1 提取主字幕,使用 Alt+2、Alt+3、Alt+4 和 Alt+5 提取第二、第三、第四和第五个音轨,其中一个必定是强制字幕)。

希望这对大家有用!干杯。

(PS:欢呼安德鲁.46指出如何排除.mkv最终出现在输出的文件名中!)

相关内容