1

ディレクトリを入力として受け取り、その中のすべてのmp4ファイルを読み取り、それらをmp3withに変換するシェルスクリプトがありffmpegます。

#!/bin/bash

dir=$1

while read -rd "" file
do
  base=$(basename "$file")
  filename=${base%(*}".mp3"
  ffmpeg -i "$file" -vn -ar 44100 -ac 2 -ab 192000 -f mp3 "$filename" &
done < <(find $dir -maxdepth 1 -iname "*.mp4" -print0)

wait

exit 0

現在、これらの呼び出しはすべてffmpegフォークされてい&ます。これは、最後に を省略すると、最初のファイルのみが変換され、他のファイルは無視されるためです。

ただし、次のような一部のファイルエラーメッセージでこれが失敗するため、これには問題があります。

path/to/file/file name - with space(info)(temp_information).mp4: No such file or directory

通常、すべてのファイル名にはスペースが含まれています。これが一部のファイルで失敗する理由かもしれません。

したがって、次の質問があります。

  1. 呼び出しをフォークしないffmpegと、最初のファイルだけが実行されるのはなぜですか? プロセスが終了するまでループが待機し、次の反復に進むと予想していました。
  2. スクリプトがいくつかのファイルを見つけられないのはなぜですか (おそらく の問題ですffmpeg)?
  3. これらすべての問題を解決し、スクリプトを機能させるにはどうすればよいでしょうか?
4

1 に答える 1