欢迎光临散文网 会员登陆 & 注册

(11)ffmpeg如何批量处理音视频字幕?结合批处理相关写法模板

2020-05-01 22:33 作者:思思陆思思  | 我要投稿

ffmpeg用多了,或者平时在用一些转码、剪辑软件的时候,不时看到有小伙伴问:能不能批量转码?批量压制?有时一些资源想统一剪掉某一段,或者一个视频想剪许多镜头下来,up自己剪得像个人工智能…

所以,也正是第一篇说的那样,ffmpeg可以做到这么简单。个人觉得在平常使用这方面上,ffmpeg最大的魅力优点是能结合批处理也就是batch,来对音视频字幕文件进行各种批量的处理。(简单你写3w多字基本还是基础…


1、上手例子:批量转封装flv→mp4

好吧,老是瞎扯这么多x我们先看一个最典型的例子——转封装。回想一下转封装的命令行:

ffmpeg -i .\in.flv -c copy .\out.mp4

这里我们将一个flv视频转成一个mp4视频,注意俺特别写出“一个”,这样想来,批量就是很多很多个。换言之,可以想象很多很多个flv和mp4,在命令行的那个相应位置拼命排队“轮换”,其它都不用变,不影响。那ffmpeg不就可以实现所谓的批量转封装了吗?!

确实.jpg。不过ffmpeg本身(好像?)没这种做法的参数指令。但正因为我们是以cmd来使用的ffmpeg,而cmd本身可以运行一种脚本指令,叫做batch,就是…(又绕回上文去了…


批量转封装的命令行如下。直接在cmd输入运行:

for %i in (.\*.flv) do ffmpeg -i "%i" -c copy "%~dpni.mp4"

等等这啥玩意…跟你第八篇毫无说明一样恐怖不经历风雨,怎么见彩虹嘛,咳咳…up相信小伙伴们,嗯√

这边up不会对batch指令作详细介绍,感兴趣的话可以看我另一本文集~

简单说说它的意思。第一个 %i 指的是(.\*.flv)这个内容,*是指所有全部的flv。顺便复习一下“.\”在第一篇还记得什么意思吧?flv所在的某个目录。因此for %i in (.\*.flv) do就是说,要对某个目录(不包括其子目录)里的所有flv进行什么操作。-i后面的“%i”也表示 %i 的内容,只是给它加上英文双引号。"%~dpni.mp4"表示照抄"%i"的盘符(比如C盘)、文件夹目录、文件名的内容,只是后缀拓展名是和原来单独用ffmpeg一样手打的mp4。

啊,看图~

成功的,懒得截全了(


当然,我们还可以把这个命令行以某种文件形式保存起来,方便以后运行。这点也像第八篇x

新建记事本,复制粘贴以下内容:

for %%i in (.\*.flv) do ffmpeg -i "%%i" -c copy "%%~dpni.mp4"

和之前直接cmd的略有不同,分别多了个“%”

这样做的话建议(*.flv)这样就好,原因下面再说

然后直接另存为:

注意把编码改成ANSI,默认是UTF-8

最后,当我们需要flv转封装mp4的时候,

直接把这个cmd文件粘贴到flv所在目录,运行即可

cmd文件读取当前目录,免得我们设置改来改去。这就是原因~


2、触类旁通:批量转码、压制、抽取、剪辑等

回顾一下第二篇里提到的“如何理解ffmpeg的命令行”:输入input、处理process、输出output。学过编程的朋友也许有感觉了,就是“IPO”模式嘛,程序的一个基本编写方法。

cmd直接输入“ffmpeg”运行可以看到,ffmpeg命令行组成结构是这样的:

ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

也就是说,ffmpeg 全局设置 输入设置 -i 输入文件 … 输出设置 输出文件 …

温故知新。我们想想,就像中学的“控制变量法”,要把批量转封装变成批量做其它事,ffmpeg命令行中哪些需要变,哪些保持不变。

显然,批量转码要改变-c,其它设置和转封装的情况一般一样。批量压制,除了改变-c,还可考虑相关压制参数的设置,其它也和转封装基本一样。(这里暂不讨论批量二次编码)批量抽取,用到-map,其它也是看着照抄。这三个主要考虑的都是“处理process”,或者说“输出设置”。批量剪辑,在开头加上-ss -to,其它还是照抄。它改变的就是“输入设置”或“全局设置”了。


同理,还有其它的什么“姿势”,都可以试想着看看能否这样触类旁通~


3、思路拓展:多样需求,程序交互

嚯,这很有意思。如果我的是其它容器格式,那么把后缀拓展名照改,其它跟着设置就行。视频、音频、字幕都可以这么来。

于是up做了一个“ffmpeg批量转封装器.bat”:https://lusisi.lanzouv.com/b015ewkgj 密码:3cl4

方便平时批量转封装各种音视频字幕文件,可自定义输出目录,下载下来照着用就知道了。


那么按照这个思路,其它process也可以这么“程序交互”,还可以把它们全都整合起来。我还没做(那啥从未开始x

另外,还有些需求例如:对一个音视频文件进行多段剪辑最后逐个输出,同时封装许多音视频字幕轨最后输出一个视频,同时进行几种不同的process……

对于batch的不同写法所能解决的不同需求,或者能不能带来更好的使用体验?例如,现在是通过双击运行batch文件,再做下一步操作。还能将待处理文件拖入batch文件即自动运行,或者简单写个txt文本再由batch所运用,或者……等等。

嘛,人生苦短,道阻且长,这些就未来再说啦~



感谢你观看到这里。

(11)ffmpeg如何批量处理音视频字幕?结合批处理相关写法模板的评论 (共 条)

分享到微博请遵守国家法律