21.批处理文件
批处理文件的优点
FFmpeg工具通常用于各种任务,不容易记住不同的编解码器的所有参数,过滤器等等。将各种命令组合保存到批处理文件中,优化了工作,并将开发提升到下一个级别。批处理文件是带有.bat扩展名的文本文件,在Windows操作系统上主要用于管理任务。它们包含命令,这些命令是按顺序处理的,可以打印各种消息,请求输入等等。
@echo off
ffmpeg -i %1
将该文本保存到文件测试中。bat并由下一个命令调用,其中filename是媒体文件,我们希望看到它的属性(。命令中的bat扩展是可选的):
test.bat filename or test filename
批处理文件的命令
可以使用命令帮助或帮助|来显示可用的Windows控制台命令。其中一些是特定于批处理文件的。这些和其他命令在表中描述:
基本批处理文件命令
@ | 在行开始时使用,然后命令没有响应。例子:@echo off |
---|---|
%n(n是自然数) | 在命令行上输入空格分隔的参数的占位符,在批处理文件的名称之后,例如:greeting.bat用两行代码: @echo off Good %1, %2 如果用右边这个命令调用:greeting day friends 显示的结果就是:Good day, friends |
:label | GOTO命令的起始点,更改处理顺序,批处理文件示例: line 1 … line 10 (第1 - 10行包含各种命令) :NewItem line 12 … line 16 (第12 - 16行包含各种命令) GOTO NewItem 当处理流到达第17行时,GOTO命令将它发送回NewItem标签,并在第12行继续运行 |
CALL | 语法:调用[drive][path] filename [batch parameters] 调用另一个批处理文件,并且在它的所有命令都准备好之后,继续处理调用文件的下一行。如果被调用的文件不存在,则会显示一条错误消息 |
CHOICE | 停止处理,让用户选择一个选择,通常是或否 语法:CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text] /C[:]choices 指定允许的key。默认是YN /N 在提示字符串的末尾 不显示choices和? /S 把选择键当作区分大小写 /T[:]c,nn 在<nn>秒之后会默认选择到c 文本提示字符串显示 |
CLS | 清除屏幕,控制台输出从顶部继续 |
ECHO | 语法: ECHO [ON | OFF] or ECHO [message] 命令“echo off”在处理过程中停止打印命令,“echo on”,即默认情况下,再次打开它。命令“echo some_text”将在处理过程中打印some_text |
FOR | 在一组文件中为每个文件运行指定的命令 FOR %%变量 IN(set) DO 命令[命令行设置] %变量 指定一个可替换的参数,该参数值由该命令使用。 (set)指定一组或多个文件,可以使用通配符,e.g.(.doc) command(命令行) 指定为每个文件执行的命令。 command-parameters(命令行参数) 指定指定命令的参数或开关。 示例命令显示所有TXT文件(在批量中使用%%f,在cmd命令行以%f形式): FOR %%F IN (.txt) DO type %%F |
GOTO label | 将处理重定向到指定的标签,请参见:标签示例:上面的命令的 |
IF | IF [NOT] ERRORLEVEL 数字命令 IF [NOT] string1==string2命令 IF [NOT] EXIST 文件名命令 NOT 指定只有在条件为假时,DOS才应该执行命令 ERRORLEVEL 如果最后一个程序运行返回的退出码等于或大于指定的数字,则number指定一个真实的条件 command 指定在满足条件时执行的命令 string1==string2 如果指定的文本字符串匹配,则指定一个真实的条件 EXIST 如果指定的文件名存在,则filename指定一个真实的条件 IF 命令指定条件处理 |
PAUSE | 停止处理并显示消息:“按任意键继续…” |
REM | 语法:REM [命令] 用于添加描述和其他信息,在处理过程中不使用 |
SHIFT | 语法:SHIFT [n] (n是一个自然数) 用于通过命令行移动已编号参数的位置,并在批处理文件中使用%1、%2等。批文件名称shift.bat: @ECHO OFF ECHO %1 SHIFT ECHO %1 现在,当我们开始这个文件的时候,它的结果是: First First |
START | START [&##34;title&##34;] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]<bt>[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/WAIT] [/B] [command/program] [参数] 为指定的命令启动一个新窗口。对于所有选项的描述,请输入帮助启动 |
批处理文件的典型用法
- 便携式设备的视频转换
- 音频转换从各种格式到MP3文件的MP3播放器
- 减少在web上使用的帧大小和比特率
批处理文件用于音频和视频处理任务,这些任务经常重复。例如,我们可以将一个快捷方式放在桌面上的yt2mp3文件。bat位于目录C:\media,其中保存从YouTube下载的视频转换成MP3格式。yt2mp3。bat文件包含下一行:
成功转换后,ffplay开始播放创建的MP3文件。
音频发生器
ToneGenerator.bat 是生成指定音调和持续时间音调的批处理文件。为了区分同一音高的两个音调,每个音都加入了silence.mp3,,持续时间是0.2秒,如果我们计划加快速度,它可以是0.3秒或更多秒,命令是:
ffmpeg -f lavfi -i aevalsrc=0 -t 0.2 silence.mp3
文件ToneGenerator.bat有以下内容(添加行号以方便解释,并没有出现在ToneGenerator中)。蝙蝠计算机文件):
1 @echo off
2 set /p n=Please enter the note name:
3 set /p f=Please enter the frequency:
4 set /p d=Please enter the duration in seconds:
5 ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% tone%n%_%d%.mp3
6 copy /b tone%n%%d%.mp3+silence.mp3 tone%n%_%d%.mp3
对特定命令行的解释(如果音调单独使用,可以跳过加入slience这个步骤):
- 1:在批处理文件处理过程中,命令echo off停止显示命令的内容,@符号也不包含此命令的显示。
- 2: 命令: set /p variable_name=text创建一个变量,在作业处理期间,显示一行文本并等待输入键的输入结束。这个字符串&##34;Please enter the note name: &##34;显示并在按下Enter之后,将创建一个新的变量n并包含所输入的值。
- 3: 与第2行类似,创建的是带有输入频率的变量f。
- 4:类似于第2行,创建的变量d包含在秒内的音调的持续时间。
- 5: ffmpeg使用lavfi (libavfilter虚拟输入设备)和aevalsrc音频输入设备,通过变量d设定的持续时间来生成由变量f指定的频率的声音。MP3格式的输出文件的名称与注释名称和持续时间相结合。
- 6: 在生成的文件中添加了一个带有0.2秒长度的短MP3文件,用于通过/b选项的复制命令来区分音调,它指定了二进制模式。最终文件的名称为“tone+ notename +_duration+”.mp3“,以A4音为例,有1秒的时间,它是noteA4_1.mp3。
创建Jingle Bells(歌曲名)
Jingle Bells 是一款非常流行的冬季恋歌,它的副歌只有5个音符,虽然有些持续的时间很长,这张图片显示了这段文字的顺序:
现在我们生成9种不同的音调与前一节中的ToneGenerator.bat不同:
E4,频率329.63 Hz,持续时间1秒-文件E_1.mp3。
E4,频率329.63 Hz,持续时间2秒-文件E_2.mp3。
E4,频率329.63 Hz,持续时间4秒-文件E_4.mp3。
G4,频率392.00 Hz,持续时间1秒-文件G_1.mp3。
G4,频率392.00 Hz,持续时间2秒-文件G_2.mp3。
C4,频率261.63 Hz,持续时间1秒-文件C_1.mp3。
D4,频率293.66 Hz,持续时间1秒-文件D_1.mp3。
D4,频率293.66 Hz,持续时间2秒-文件D_2.mp3。
F4,频率349.23 Hz,持续时间1秒-文件F_1.mp3。
从文件名中跳过了octave 4。第一行和第二行的音调可以与接下来的两个命令连接在一起,第三个命令连接这两行:
copy /b E_1.mp3+E_1.mp3+E_2.mp3+E_1.mp3+E_1.mp3+E_2.mp3+E_1.mp3+^ G_1.mp3D+C_1.mp3+D_1.mp3+E_4.mp3 line1.mp3
copy /b F_1.mp3+F_1.mp3+F_1.mp3+F_1.mp3+F_1.mp3+E_1.mp3+E_2.mp3+^ E_1.mp3D+D_1.mp3+D_1.mp3+E_1.mp3+D_2.mp3+G_2.mp3 line2.mp3
copy /b line1.mp3+line2.mp3 refrain.mp3
另一种方法是修改ToneGenerator.bat文件用来生成编号的文件名,然后立即加入一个批处理文件。下面是修正版的ToneGenerator.bat文件,我们可以用它来生成24个MP3文件,文件名是tone01。mp3,tone02。mp3,…tone24.mp3:
@echo off
echo If the number of notes is over 9, start numbering with 0.
set /p n=Please enter the note number:
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连接所有的24个MP3文件。bat批文件与内容:
@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%
- 第2行创建一个空文件,作为初始文件,从目录复制第一个文件。
- 第3行请求文件扩展名并将其存储在t变量中,将加入这个扩展的文件。
- 第4行使用for循环将文件按顺序复制到文件输出。
- 第5行增加了文件输出的扩展名。
两种方法产生的折射率都比原曲慢,atempo滤波器可以用来调节速度:
ffmpeg -i output.mp3 -af atempo=2 refrain.mp3
atempo过滤器可以应用更多的时间,细节在章节的时间操作中。
简化转换
为Codecs编写的章节介绍了如何使用预设置文件简化转换。如果您经常使用各种预置转换媒体,那么要求特定预置的批处理文件可能有用,一个名为Conversion.bat的简单批处理文件示例如下
请参阅前面的章节来描述第1 - 7行
- 第8行使用IF构造来选择带有或没有预设置文件的转换,如果变量p为0,则在标签NOPRESET由于GOTO命令指示后继续处理。
- 如果指定了预置文件,第9行将转换输入。
- 第10行终止处理,因此跳过第12行中的转换。
- 第12行使用可选的附加参数将输入转换为没有预设置的文件。
文件转换。bat可以在许多方面进行修改,例如,包括过滤、更多的输入等等。