gpt4 book ai didi

Bash/ffmpeg : How to loop over all wave files that do not have 16bit and 44. 1 khz?

转载 作者:行者123 更新时间:2023-12-04 23:11:43 25 4
gpt4 key购买 nike

我有这个脚本,用于将目录中的所有 wav 文件转换为 44100 hz 的 16 位。但是,它也会转换已经具有这些属性的文件。如何过滤文件以便只转换需要转换的文件?
我正在使用 ubuntu 开发 Win 10。

#!/bin/sh
for i in *.WAV;
do
name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i -f "$i" -acodec pcm_s16le -ar 44100 "${name}.wav";
done
编辑:是否也可以对子目录中的文件进行此循环?

最佳答案

使用 if 语句:

#!/bin/bash

mkdir output
shopt -s nocaseglob
for i in *.wav;
do
if [ "$(ffprobe -v error -show_entries stream=sample_fmt -of csv=p=0 "$i")" != "s16" ] || [ "$(ffprobe -v error -show_entries stream=sample_rate -of csv=p=0 "$i")" != "44100" ]
then
echo "$i"
ffmpeg -y -i "$i" -c:a pcm_s16le -ar 44100 "output/${i%.*}.wav";
fi
done
  • ffprobe用于获取样本格式和采样率。如果不等于 s16,44100然后它将重新编码。
  • 输出被放置在一个名为 output 的目录中。因为ffmpeg不能就地编辑文件(输入和输出不能是同一个文件)。
  • 不需要echocut什么时候可以使用parameter expansion .
  • 是否也可以对子目录中的文件进行此循环?使用find ,但这值得作为一个新问题提出,因为它与主要问题是分开的。
  • 关于Bash/ffmpeg : How to loop over all wave files that do not have 16bit and 44. 1 khz?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65999385/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com