《ffmpeg basics》中文版 -- 21.批处理文件

21.批处理文件

​ 注:本节讲述了如何将批处理和ffmpeg结合,如果对Windows下的批处理有一定了解,那么本节内容将显得极为简单。

​ 注:Windows 下批处理的内容不属于ffmpeg的一部分,而是Windows命令行操作的一部分,可自行查找资料学习。

批处理文件的优势

​ FFmpeg 命令行工具常用于一些特定的任务,我们在使用这些工具时需要记住大量的用于不同编解码器,过滤器等的相关参数,这并不容易。因此,将相关的命令保存到批处理文件中,可以简化我们的工作并将我们的开发体验提高一个等级。批处理文件是 Windows 系统下的一种文本文件,扩展名为 .bat ,经常用于执行一些任务。批处理文件中包含一系列的命令,它们可以按照顺序被一一执行,从而完成如打印消息,请求输出,执行任务等操作。简单的批处理文件如下所示:

@echo off
ffmpeg -i %1

​ 这个批处理可以被保存为 test.bat 文件,然后可以在命令行中执行它。此时批处理文件后紧随的参数 filename 会被传递给 %1 ,然后被 ffmpeg 命令使用(.bat扩展名可以不加):

test.bat filename
or
test filename

批处理文件命令

​ Windows 命令提示符窗口中可以使用的全部命令,可以通过命令 help 或者 help|more 来查看。而对于批处理文件除了这些命令之外,还有一些其他的特殊指令,这些特殊指令如下所示:

在这里插入图片描述

在这里插入图片描述

​ 批处理文件是 Windows 固有的一种使用操作系统的方式,本身和 FFmpeg 是没有任何关系的,这里 FFmpeg 仅仅是借助这一工具使得其使用更加方便而已,因此对于批处理的学习可自行查阅资料。

批处理文件的典型用例

  • 转换视频以便笔记本设备使用

  • 将各种格式的音频转化为 MP3 文件供 MP3 播放器使用

  • 缩小帧的大小,降低比特率以供网络使用

​ 当我们需要对大量的音频和视频进行相同的操作时,我们就可以使用批处理。例如,我们可以创建一个批处理文件 yt2mp3.bat ,它可以将一个视频转化为 MP3,其内容为:

@echo off
set /p i=Please enter the name of input file:
set /p o=Please enter the name of output file without MP3 extension:
ffmpeg -i %i% -b:a 128k -ar 44100 %o%.mp3
ffplay %o%.mp3

​ 当成功将输出转化为 MP3 之后,使用 ffplay 开始播放转化后的 MP3 文件。

音调生成批处理

​ ToneGenerator.bat 是一个批处理文件,他可以生成指定音高和时长的声调。分了区分在一个序列中相邻的相同音高的两个声调,我们在每个声调结尾都会加入一个短暂的静音,他是由 sience.mp3 提供的,长度为 0.2 秒,当然如果有需要,可自由调节它的长度,其生成命令为:

ffmpeg -f lavfi -i aevalsrc=0 -t 0.2 silence.mp3

​ ToneGenerator.bat 的内容如下:

@echo off
set /p n=Please enter the note name:
set /p f=Please enter the frequency:
set /p d=Please enter the duration in seconds:
ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% tone%n%_%d%.mp3
copy /b tone%n%_%d%.mp3+silence.mp3 tone%n%_%d%.mp3

​ 代码解释(如果生成的音调是单独使用,那么可以略去静音的部分)

  • 第一行:echo off,意为关闭回写,也就是说在执行这个 bat 脚本期间,不会打印任何命令的输出,加上@之后,会关闭 关闭回写(即echo off 这条语句) 的回写。
  • 2,3,4:它们用于请求输入,当执行到改行时,会打印出=号后面的字符作为用户提示,然后等待用户输入,用户输入完后按下 Enter 键,此时会将用户的输入保存到 = 号左边的变量中。
  • 第五行:使用用户输入的信息,生成特定频率特定时长的声调并将其保存为 mp3 文件。
  • 第六行:使用 copy 的 /b 选项,开启二进制模式,将静音部分加入到生成的 MP3 中,生成最终文件。

创建 Jingle Bells 曲调

​ Jingle Bells 是一首经典的冬日歌曲,其曲调简单,只是用了 5 个声调,其曲谱如下:

在这里插入图片描述

​ 现在,我们使用 ToneGenerator.bat 文件来生成组成上述曲谱的 9 个不同的声调:

在这里插入图片描述

​ 然后,我们将上述 9 个文件串起来生成一个文件,就完成了上述两行乐谱:

在这里插入图片描述

​ 另一个选择就是修改 ToneGenerator.bat ,将其生成的文件以数字命名,然后使用另一个批处理来连接生成的mp3。修改后的 ToneGenerator.bat 内容如下,然后我们将使用它生成 24 个 mp3 文件,名称为 tone01.mp3 , tone02.mp3 , … ,一次类推:

@echo off
echo If the number of notes is over 9,start number with 0.
set /p n=Please enter the note name:
set /p f=Please enter the frequency:
set /p d=Please enter the duration in seconds:
ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% %n%.mp3
copy /b %n%.mp3+silence.mp3 tone%n%.mp3

​ 现在我们使用另一个批处理 FileJoiner.bat 来连接 MP3 文件:

@echo off
copy /y nul output > nul
set /p t=Please enter the file type:
for %%f in (*.%t%) do copy /b output+%%f output
ren output output.%t%
  • 第二行:用于创建一个空白的 output 文件

  • 第三行:请求输出文件的后缀名,并将其保存到 t 变量

  • 第四行:使用 for 循环将文件序列串连到 output 中

  • 第五行:为 output 添加后缀名

​ 这两种方式生成的曲调和原歌曲相比都有些慢,我们可以通过 atempo filter 来调整其播放速度:

ffmpeg -i output.mp3 -af atempo=2 refrain.mp3

​ atempo filter 可以多次使用,详情见《时间操作(Time Operations)》一章。

简化转换

​ 我们在《编解码器的选项预设》一章中解释了如何使用预设文件,如果你经常需要使用多个预设定文件来完成媒体转化,那么你可以使用批处理来请求使用哪一个预设文件,这样会方便很多。Conversion.bat 文件的内容如下:

@echo off
echo Please enter 0 as the filename if no preset shoule be used.
set /p i=Please enter the name of input file:
set /p e=Please enter the output file extension:
set /p o=Please enter the name of output file:
set /p p=Please enter the name of preset file:
set /p a=Please enter addtional parameters:
if %p% === 0 goto NOPRESET
ffmpeg -i %i% -fpre %p%.ffpreset %a% %o%.%e%
exit
:NOPRESET
ffmpeg -i %i% %a% %o%.%e%

(英文版有对代码的解释,略)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值