我正在尝试使用 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
答案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