Windows 使用“创建批处理文件”;如果;命令

Windows 使用“创建批处理文件”;如果;命令,windows,command-line,batch-file,command,Windows,Command Line,Batch File,Command,我创建了一个小的批处理文件,用于帮助人们使用FFMPEG将MP4视频转换为FLV。一种让我认识的每个人都能使用它的简单方法。我原以为我写的这行代码适用于任何情况(将MP4文件转换为FLV),但几天前,它不适用于文件。(FLV格式的音频采样为高) 我在别人的帮助下找到了另一个代码行来转换它,但我不知道如何在批处理文件中正确地集成它 我现在用的是: echo“输入文件名,不带扩展名”:set /p名称文件= echo“输入要为目标文件指定的名称”:set/p destinationfile= ffm

我创建了一个小的批处理文件,用于帮助人们使用FFMPEG将MP4视频转换为FLV。一种让我认识的每个人都能使用它的简单方法。我原以为我写的这行代码适用于任何情况(将MP4文件转换为FLV),但几天前,它不适用于文件。(FLV格式的音频采样为高)

我在别人的帮助下找到了另一个代码行来转换它,但我不知道如何在批处理文件中正确地集成它

我现在用的是:

echo“输入文件名,不带扩展名”:set /p名称文件=

echo“输入要为目标文件指定的名称”:set/p destinationfile=

ffmpeg-i%namefile%.mp4-c:v libx264-crf 19%destinationfile%.flv

我想加上一个“如果”。因为如果这行不行,就用那行:

ffmpeg-i%namefile%.mp4-c:v libx264-ar 22050-crf 28 %目标文件%.flv

我该怎么做

非常感谢您的帮助,如果我对某些事情不清楚,请告诉我,我会尽我所能把它弄清楚


谢谢

我不确定FFMPEG在出现故障时是否返回标准错误代码,但如果返回,您可以使用以下命令:

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv
if not errorlevel 1 goto Done
ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv
:Done
如果此方法不起作用,您可以检查目标文件是否存在,以确定进一步的操作:

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv
if exist %destinationfile%.flv goto Done
ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv
:Done

希望其中一个能起作用。

类似于EitanT的第一个解决方案,但不使用GOTO

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv
if errorlevel 1 ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv
或编辑后的代码被截断,现在全部修复

类似于EitanT的第二个解决方案,但不使用GOTO

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv
if not exist %destinationfile%.flv ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv

你能用简单的话在
if
语句中写出你想要测试的条件吗?嗨,谢谢@EitanT的快速回答!我不能完全确定你的问题,所以如果我错了,就告诉我!我要寻找的条件是
如果FFMPEG无法转换视频,请使用另一个代码行“
或者,如果我们讨论上一个视频遇到的问题,则更重要的是
如果音频样本不是1102522050或44100,请使用该代码行
我希望我正确回答您的问题!谢谢我已经发布了答案。试试看……您的错误逻辑在第一个脚本中被颠倒了。如果不是errorlevel 1 goto Done(错误级别1 goto Done),则应读取
@EitanT-goto在技术上没有任何问题。但是GOTO批处理速度很慢,没有GOTO的代码更简单、更小。在这种情况下,速度差异是无关紧要的,但我喜欢尽量减少代码量,只要逻辑保持清晰。我认为当涉及批处理时,性能不是一个问题。。。另外,我认为
goto Done
相当于C语言中的
return
,因此对我来说,它实际上更清晰。但我想这是一个风格的问题。@EitanT-我同意,这肯定是一个风格的问题,在这种情况下,我同意性能不是问题。但在许多情况下,与没有GOTO或CALL的解决方案相比,循环中的GOTO或CALL可能会降低性能。但别担心。我对你的回答没有异议。我只是提供一个更简洁的选择。顺便说一句-我不同意C中的
goto Done
类似于
return
goto Done
批量类似于C中的
goto Done
exit/b
批量类似于C中的
return
。快速提问。。。就我个人而言,因为对我来说,
errorlevel
一直是个问题。您是否希望
errorlevel
始终为1?如果errorlevel neq 0,执行
是否更好?@iesou/John_D,
如果errorlevel x
语句实际上检查errorlevel是否大于或等于x。这不是直观的,但这是它的工作方式。
ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv
if not exist %destinationfile%.flv ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv