FFmpegiOS音视频开发音视频专辑

《FFmpeg Basics》中文版-21-批处理文件

2018-04-16  本文已影响32人  张芳涛

写在前面

如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

正文

批处理文件的优点

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 ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]<bt>[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[参数]
为指定的命令启动一个新窗口。对于所有选项的描述,请输入帮助启动

批处理文件的典型用法

音频发生器

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这个步骤):

创建Jingle Bells(歌曲名)

Jingle Bells 是一款非常流行的冬季恋歌,它的副歌只有5个音符,虽然有些持续的时间很长,这张图片显示了这段文字的顺序:

现在我们生成9种不同的音调与前一节中的ToneGenerator.bat不同:

另一种方法是修改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%

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

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

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

简化转换

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



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

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

上一篇下一篇

猜你喜欢

热点阅读