#!/bin/bash
for i in datasets/wavs/*.wav; do
ffmpeg -y -i $i -ac 1 -ar 22050 -map_metadata -1 -c:v mv -c:a copy $i;
done
不能做什么。我怎样才能修好它?或者我如何更改保存结果的目录?
你的脚本有很多问题
-
在
ffmpeg
中,输入和输出文件不能是同一个文件。输入和输出必须是不同的独立文件。简单的解决方案是输出到不同的目录。 -
不要在循环中包含路径,除非你想做更多的工作来处理输出中包含的路径。相反,使用
中使用cd
导航到datasets/wavs/
,然后在脚本for i *.wav; do
-
没有名为"
mv
"。如果你的输入有视频,你会得到错误Unknown encoder 'mv'
。删除-c:v
,因为WAV文件没有视频。 -
-c:a copy
使用流复制模式。比如复制粘贴。你不能同时流拷贝和修改音频。这导致-ac
和-ar
被忽略。删除-c:a copy
. -
Windows不支持Bash(我猜一个例外是如果你为Linux安装Windows子系统,但我不使用Windows)。Windows支持batch.
tl;dr:直接给我复制粘贴的答案
假设您有一个支持Bash的系统:
mkdir outputs
for i in *.wav; do ffmpeg -i "$i" -ac 1 -ar 22050 outputs/"$i"; done