《FFmpeg Basics》中文版-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 在秒之后会默认选择到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 ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED][/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创建一个变量,在作业处理期间,显示一行文本并等待输入键的输入结束。这个字符串"Please enter the note name: "显示并在按下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个音符,虽然有些持续的时间很长,这张图片显示了这段文字的顺序:
《FFmpeg Basics》中文版-21-批处理文件_第1张图片

现在我们生成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的简单批处理文件示例如下


《FFmpeg Basics》中文版-21-批处理文件_第2张图片

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

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

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

你可能感兴趣的:(《FFmpeg Basics》中文版-21-批处理文件)