Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用ffmpeg批量转换文件?_Batch File_Cmd_Ffmpeg - Fatal编程技术网

Batch file 如何使用ffmpeg批量转换文件?

Batch file 如何使用ffmpeg批量转换文件?,batch-file,cmd,ffmpeg,Batch File,Cmd,Ffmpeg,我想使用ffmpeg将多个.mp4文件转换为.mp3。以下是我的想法: cd (the folder I want to use) set counter = 1 for /r %%file in (*) ( ffmpeg %%file -i "Track %counter%.mp3" set counter = counter + 1 ) 但它不起作用。我猜我犯了一些基本的语法错误,但我不知道是什么。我做错了什么 空格在变量分配中有意义,但在算术/a表达式中除外 ::更正确 设置/a计数器=

我想使用ffmpeg将多个.mp4文件转换为.mp3。以下是我的想法:

cd (the folder I want to use)
set counter = 1
for /r %%file in (*) (
ffmpeg %%file -i "Track %counter%.mp3"
set counter = counter + 1
)
但它不起作用。我猜我犯了一些基本的语法错误,但我不知道是什么。我做错了什么

  • 空格在变量分配中有意义,但在算术
    /a
    表达式中除外

    ::更正确 设置/a计数器=1 ::由于
    /a
    设置/a计数器=1

  • for中变量的名称限制为一个字母字符a-z a-z

    对于/r%f

  • (..)
    中的扩展在for命令开始之前完成,为了避免此
    setlocal enabledelayedexpansions
    或调用函数,也可以使用echo-before命令帮助调试

  • 全部

    :: cd (the folder I want to use)
    
    set /a counter=1
    
    for /r %%f in (*.*) do (
        call :proc %%f
        set /a counter=counter+1
    )
    :: to avoid to execute following functions
    @goto :eof
    
    :: functions
    
    :proc
    @echo ffmpeg -i %1 "Track %counter%.mp3"
    @goto :eof
    
  • 创建一个文件并以.bat扩展名保存
  • 在其中编写下面的代码。你可以随心所欲地改变节拍
  • 将其复制到包含.mp4文件的目录中
  • 假设在环境变量中设置了ffmpeg.exe的路径,则执行批处理文件
  • 在已创建的文件夹“converted”中找到已转换的文件

  • ffmpeg%%file-i“Track%counter%.mp3”
    -->
    ffmpeg-i%%file“Track%counter%.mp3”
    @echo off
    mkdir converted
    for %%a in ("*.mp4") do ffmpeg -i "%%a" -b:a 192K -vn "converted\%%~na.mp3"
    pause