探索 FFmpeg Basics 音视频技术(21): 批处理文件

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 21 篇:FFmpeg  批处理文件。

—— 来自公众号“关键帧Keyframe”的分享

1、批处理文件的优点

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

将以下文本保存到文件 test.bat中,并通过以下命令调用,其中 filename是您希望查看其属性的媒体文件(命令中的 .bat 扩展名是可选的):

test.bat filename 或 test filename

2、批处理文件的命令

可以使用 command help或 help来显示可用的 Windows 控制台命令。其中一些是特定于批处理文件的。这些和其他命令在下表中描述:

2.1、基本批处理文件命令

@在行开始时使用,使命令在执行时不显示。例如:@echo off
%n(n 是自然数)用于获取命令行参数。例如:批处理文件 greeting.bat包含两行代码:
@echo off
Good %1, %2
如果使用命令 greeting day friends调用,则显示结果为:Good day, friends
:labelGOTO命令的起始点,用于更改处理顺序。例如:
第 1-10 行包含各种命令
:NewItem
第 12-16 行包含各种命令
GOTO NewItem
当处理流到达第 17 行时,GOTO命令将其发送回 NewItem 标签,并从第 12 行继续处理
CALL语法:Call [drive][path] filename [batch parameters]
用于调用另一个批处理文件,并在调用文件的下一行继续处理。如果被调用的文件不存在,则显示错误消息
CHOICE暂停处理并等待用户选择一个选项,通常是“是”或“否”。
语法:CHOICE [/C[: ]choices] [/N] [/S] [/T[: ]c,nn] [text]
/C[: ]choices指定允许的键。默认是 YN
/N在提示字符串末尾不显示 choices 和 ?
/S将选择键视为区分大小写
/T[: ]c,nn在 秒后默认选择 c,同时显示文本提示字符串
CLS清除屏幕,控制台输出从顶部继续
ECHO语法:`ECHO [ON
FOR在一组文件中为每个文件运行指定的命令
语法:FOR %%variable IN (set) DO command [command-line settings]
%%variable指定一个可替换的参数,其值由命令使用。
(set)指定一个或多个文件,可以使用通配符,例如 (_.doc)
command指定为每个文件执行的命令。
command-parameters指定命令的参数或开关。
示例命令显示所有 TXT 文件(在批处理文件中使用 %%f,在 cmd 命令行中使用 %f):
FOR %%F IN (_.txt) DO type %%F
GOTO label将处理重定向到指定的标签,请参见上面的 :label 示例
IFIF [NOT] ERRORLEVEL 数字 命令
IF [NOT] string1==string2 命令
IF [NOT] EXIST 文件名 命令
NOT指定只有在条件为假时,DOS 才执行命令
ERRORLEVEL如果最后一个程序运行返回的退出码等于或大于指定的数字,则指定一个真实的条件
command指定在条件满足时执行的命令
string1==string2如果指定的文本字符串匹配,则指定一个真实的条件
EXIST如果指定的文件名存在,则指定一个真实的条件
IF命令指定条件处理
PAUSE暂停处理并显示消息:“按任意键继续…”
REM语法:REM [command]
用于添加描述和其他信息,在处理过程中不使用
SHIFT语法:SHIFT [n](n 是自然数)
用于移动命令行参数的位置,并在批处理文件中使用 %1、%2 等。例如,批处理文件 shift.bat:
@ECHO OFF
ECHO %1
SHIFT
ECHO %1
现在,当启动此文件时,结果为:
First
First
STARTSTART ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
为指定的命令启动一个新窗口。要查看所有选项的描述,请输入 help start

3、批处理文件的典型用法

  • 便携设备的视频转换
  • 将各种格式的音频转换为 MP3 文件,用于 MP3 播放器
  • 降低在网络上使用的帧大小和比特率

批处理文件用于经常重复的音频和视频处理任务。例如,我们可以在桌面上放置一个名为 yt2mp3 的快捷方式,该文件位于目录 C:\media 中,用于将从 YouTube 下载的视频转换为 MP3 格式。yt2mp3.bat 文件包含以下内容:

探索 FFmpeg Basics 音视频技术(21): 批处理文件

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

4、音频发生器

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

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

ToneGenerator.bat 文件的内容如下(为方便解释添加了行号,实际文件中没有行号):

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

对特定命令行的解释(如果音调单独使用,可以跳过添加 silence 的步骤):

  • 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:使用复制命令的 /b选项(指定二进制模式)将生成的文件附加一个 0.2 秒长的短 MP3 文件,最终文件名为 “tone+ 音符名称 +_持续时间 +.mp3”,例如,对于 A4 音符,持续时间为 1 秒,则文件名为 noteA4_1.mp3。

5、创建《Jingle Bells》

《Jingle Bells》是一首非常流行的冬季恋歌,其副歌部分只有 5 个音符,尽管有些音符的持续时间较长。下图显示了这段文字的顺序:

探索 FFmpeg Basics 音视频技术(21): 批处理文件

现在我们使用 ToneGenerator.bat 生成 9 种不同的音调:

  • 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。

文件名中省略了八度音阶 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 如果音符数量超过 9 个,请从 0 开始编号。
set /p n=请输入音符编号:
set /p f=请输入频率:
set /p d=请输入持续时间(秒):
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 将所有 24 个 MP3 文件连接起来,其内容如下:

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

两种方法生成的副歌都比原曲慢。可以使用 atempo 过滤器来调整速度:

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

atempo 过滤器可以多次应用,详细信息请参阅时间操作章节。

6、简化转换

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

探索 FFmpeg Basics 音视频技术(21): 批处理文件

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

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

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

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(21): 批处理文件

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论