ディレクトリを入力として受け取り、その中のすべてのmp4
ファイルを読み取り、それらをmp3
withに変換するシェルスクリプトがあり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
通常、すべてのファイル名にはスペースが含まれています。これが一部のファイルで失敗する理由かもしれません。
したがって、次の質問があります。
- 呼び出しをフォークしない
ffmpeg
と、最初のファイルだけが実行されるのはなぜですか? プロセスが終了するまでループが待機し、次の反復に進むと予想していました。 - スクリプトがいくつかのファイルを見つけられないのはなぜですか (おそらく の問題です
ffmpeg
)? - これらすべての問題を解決し、スクリプトを機能させるにはどうすればよいでしょうか?