21.批处理文件

批处理文件的优点

FFmpeg工具通常用于各种任务,不容易记住不同的编解码器的所有参数,过滤器等等。将各种命令组合保存到批处理文件中,优化了工作,并将开发提升到下一个级别。批处理文件是带有.bat扩展名的文本文件,在Windows操作系统上主要用于管理任务。它们包含命令,这些命令是按顺序处理的,可以打印各种消息,请求输入等等。

  1. @echo off
  2. ffmpeg -i %1

将该文本保存到文件测试中。bat并由下一个命令调用,其中filename是媒体文件,我们希望看到它的属性(。命令中的bat扩展是可选的):

  1. 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文件包含下一行:

21.批处理文件 - 图1

成功转换后,ffplay开始播放创建的MP3文件。

音频发生器

ToneGenerator.bat 是生成指定音调和持续时间音调的批处理文件。为了区分同一音高的两个音调,每个音都加入了silence.mp3,,持续时间是0.2秒,如果我们计划加快速度,它可以是0.3秒或更多秒,命令是:

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

文件ToneGenerator.bat有以下内容(添加行号以方便解释,并没有出现在ToneGenerator中)。蝙蝠计算机文件):

  1. 1 @echo off
  2. 2 set /p n=Please enter the note name:
  3. 3 set /p f=Please enter the frequency:
  4. 4 set /p d=Please enter the duration in seconds:
  5. 5 ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% tone%n%_%d%.mp3
  6. 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个音符,虽然有些持续的时间很长,这张图片显示了这段文字的顺序:

21.批处理文件 - 图2

现在我们生成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。第一行和第二行的音调可以与接下来的两个命令连接在一起,第三个命令连接这两行:

  1. 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
  2. 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
  3. copy /b line1.mp3+line2.mp3 refrain.mp3

另一种方法是修改ToneGenerator.bat文件用来生成编号的文件名,然后立即加入一个批处理文件。下面是修正版的ToneGenerator.bat文件,我们可以用它来生成24个MP3文件,文件名是tone01。mp3,tone02。mp3,…tone24.mp3:

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

现在我们可以通过FileJoiner连接所有的24个MP3文件。bat批文件与内容:

  1. @echo off
  2. copy /y nul output >nul
  3. set /p t=Please enter the file type:
  4. for %%f in (*.%t%) do copy /b output+%%f output
  5. ren output output.%t%
  • 第2行创建一个空文件,作为初始文件,从目录复制第一个文件。
  • 第3行请求文件扩展名并将其存储在t变量中,将加入这个扩展的文件。
  • 第4行使用for循环将文件按顺序复制到文件输出。
  • 第5行增加了文件输出的扩展名。

两种方法产生的折射率都比原曲慢,atempo滤波器可以用来调节速度:

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

atempo过滤器可以应用更多的时间,细节在章节的时间操作中。

简化转换

为Codecs编写的章节介绍了如何使用预设置文件简化转换。如果您经常使用各种预置转换媒体,那么要求特定预置的批处理文件可能有用,一个名为Conversion.bat的简单批处理文件示例如下

21.批处理文件 - 图3

请参阅前面的章节来描述第1 - 7行

  • 第8行使用IF构造来选择带有或没有预设置文件的转换,如果变量p为0,则在标签NOPRESET由于GOTO命令指示后继续处理。
  • 如果指定了预置文件,第9行将转换输入。
  • 第10行终止处理,因此跳过第12行中的转换。
  • 第12行使用可选的附加参数将输入转换为没有预设置的文件。

文件转换。bat可以在许多方面进行修改,例如,包括过滤、更多的输入等等。