使用 ffmpeg 批量转换 *.avi 文件

使用 ffmpeg 批量转换 *.avi 文件

我正在尝试使用 ffmpeg 批量转换 20 多个 .avi 文件。

我有以下内容

@echo off.

for file in *.avi
do
   ffmpeg -i "$file" -s 640x480 -vcodec msmpeg4v2 "'basename "$file" .avi'.mpg';
done

在我的 .bat 文件中,但它不起作用。我怎样才能让它在 Windows 操作系统下工作。哦,是的,所有文件都在同一个文件夹中。

我收到的错误信息:

此时文件为意外文件

答案1

您的批处理文件格式不符合 Windows bat 脚本的正确要求。相反,您的脚本看起来像是为 Linux 设计的。您需要更改脚本以使用for 循环由 Windows Shell 支持。

下面是如何使用 Windows for 循环完成此任务的示例。只需将下面一行放入批处理文件中,并将脚本移动到与 avi 文件相同的目录中,然后运行它。

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"

答案2

简单添加Brett 的回答

for %A IN (*.avi) DO ffmpeg -i "%A" "%~nA.mpg"
  • 产科医生:cmd 单行命令,用于批处理文件%%

添加%~n到输出文件名中的变量以摆脱原始文件扩展名。

这也用于这不是我的答案但是我认为这个方便的细节可能会被只想使用 cmd 单行命令的人忽略。

答案3

为什么不裁剪/删除输出文件中的文件扩展名?

@echo off

for file in *.avi
do
   ffmpeg -i "$file" -s 640x480 -vcodec msmpeg4v2 "'basename "$file" .avi'.mpg';
done

@echo off

for %%i in (*.avi)do ffmpeg -i "%%~fi" -s 640x480 -vcodec msmpeg4v2 "%%~dpni.mpg"

rem :: "%%~fi" == Full Path == Drive + Path + Name + Extension %%i:                      
rem :: "%%~fi" == C:\Path\FileName.AVI

rem :: "%%~dpni.mpg" == Drive + Path + Name + .mpg %%i:
rem :: "%%~dpni.mpg" == C:\Path\FileName.mpeg
  • %%~nxi为了在屏幕上显示输入和输出文件的Name.eXtension( ),并减少 ffmeg 输出信息,仅限制正在进行的转换( -hide_banner -v error -stats):
@echo 关闭

对于 (*.avi) 中的 %%i,请执行 echo\Enconding: "%%~nxi" "%%~ni.mpg" && (
       ffmpeg -i“%%~fi”-s 640x480 -vcodec msmpeg4v2“%%~dpni.mpg”-hide_banner -v 错误-stats
  • 我的测试输出:
编码:“bird_test.avi” “bird_test.mpg”
帧= 355 fps=0.0 q=31.0 Lsize= 680kB 时间=00:00:11.80 比特率= 472.1kbits/s 速度= 22x
编码:“file_input.avi” “file_input.mpg”
帧= 903 fps=248 q=11.3 Lsize= 2440kB 时间=00:00:30.56 比特率= 653.9kbits/s dup=2 drop=0 速度= 8.4x

相关内容