如何通过命令行或批处理脚本与ffmpeg转换整个目录/文件夹?


当前回答

Windows:

这里我正在将所有(.mp4)文件转换为(.mp3)文件。 只需打开cmd,转到所需的文件夹并键入命令。 快捷方式:(可选) 1. 转到(.mp4)文件所在的文件夹 2. 按Shift键,点击左键,选择“在这里打开PowerShell窗口” 或“此处打开命令提示窗口” 3.输入“cmd”[注意:如果它直接打开cmd而不是PowerShell,则跳过此步骤] 4. 执行命令

for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"

如果你想把它放到Windows 10的批处理文件中,你需要使用%%i。

其他回答

前面的答案只会创建一个名为out.mov的输出文件。要为每一部老电影创建一个单独的输出文件,可以试试这个方法。

for i in *.avi;
  do name=`echo "$i" | cut -d'.' -f1`
  echo "$name"
  ffmpeg -i "$i" "${name}.mov"
done

为了逗你笑,这里有鱼壳的解决方案:

for i in *.avi; ffmpeg -i "$i" (string split -r -m1 . $i)[1]".mp4"; end

这里有点像代码高尔夫,但由于到目前为止几乎所有的答案都是bash(除了一个孤独的cmd),这里有一个使用powershell的windows跨平台命令(因为很棒):

ls *.avi|%{ ffmpeg -i $_ <ffmpeg options here> $_.name.replace($_.extension, ".mp4")}

你可以改变*。Avi到与源视频相匹配的地方。

如果你想在子文件夹中进行相同的转换。 这里是递归代码。

for /R "folder_path" %%f in (*.mov,*.mxf,*.mkv,*.webm) do (
    ffmpeg.exe -i "%%~f" "%%~f.mp4"
    )

使用多核,这是最快的方法,(使用并行):

parallel "ffmpeg -i {1} {1.}.mp4" ::: *.avi