![FFmpeg:使用输入名称在 Caja 脚本中输出来提取选定文件的字幕?](https://linux22.com/image/1187965/FFmpeg%EF%BC%9A%E4%BD%BF%E7%94%A8%E8%BE%93%E5%85%A5%E5%90%8D%E7%A7%B0%E5%9C%A8%20Caja%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%BE%93%E5%87%BA%E6%9D%A5%E6%8F%90%E5%8F%96%E9%80%89%E5%AE%9A%E6%96%87%E4%BB%B6%E7%9A%84%E5%AD%97%E5%B9%95%EF%BC%9F.png)
好的,我知道提取字幕的命令,也知道如何制作 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最终出现在输出的文件名中!)