快捷工具脚本系列

提示:Linux系统中,最大的灵活度就是你可以自己开发你需要的工具来解决你的问题,你的事情你做主,还能学到新鲜的东西。



说明

当我们下载了一部带有内嵌字幕流的电影文件后,想要提取出字幕流中字幕并生成文件,怎么办?

似乎 VLC播放器只提供了导入字幕功能,并没有提供导出字幕流功能,还是自己动手来解决这个问题吧。


一、安装ffmpeg

我们需要用到的工具是 ffmpeg命令,怎么安装应该不成问题吧?
例如 Ubuntu 直接使用 apt-get install ffmpeg即可安装了。

二、编写脚本工具

1. ffmpeg提取字幕流命令

手工使用ffmpeg命令提取字幕流的方法如下:

$ ffmpeg -i 电影.mp4 -map "0:2" subtitle.chi.srt -map "0:3" subtitle.eng.srt

执行成功后,我们会提取输出了两个srt字幕文件。

2.脚本内容

脚本文件split_srt代码如下:

#!/bin/bash

eval `ffmpeg -i $1 2>&1| awk -v fn=$1 'BEGIN{printf("ffmpeg -i %s ",fn);}/Subtitle: subrip/{ split(substr($2,2),arr,/\(|\)/); printf(" -map \"%s\" subtitle.%s.%s.srt", arr[1], substr(arr[1],3),arr[2]); }'`

这里简单的讲解下, ffmpeg -i默认输出字幕流信息到标准错误中,使用2>&1将标准错误重定向输出到了标准输出,然后通过管道将输出内容丢给 awk命令处理,最后输出了 ffmpeg提取字幕流的命令行,通过eval执行这个命令。

3.执行方法

代码如下:

$ chmod +x ./split_srt
$ ./split_srt  电影.mp4

脚本会自动将视频文件中的字幕流根据语言导出到不同的srt文件中。

示例效果

执行命令:

$ split_srt  the.year.earth.changed.2021.hdr.2160p.web.h265-naisu.mkv

请添加图片描述

成功导出了所有字幕轨中的字幕文件。


总结

本文利用了一条awk命令搞定了ffmpeg字幕流信息的处理,提取了嵌入到视频文件中的所有字幕流

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐