mike-neckのブログ

Java or Groovy or Swift or Golang

ffmpeg を bash ループの中で使うと、 read が正しく標準入力を読めなくなる問題の対処

以前のエントリーにも書いた ffmepg を使うと標準入力が壊れる問題の解決方法は、

/dev/null を読み込ませるということである、

と言いたいだけのエントリー。

mike-neck.hatenadiary.com


次のようなループで read -r filepath が想定してない欠損した値を読み込むのは ffmpeg が標準入力を読み込んでいるのが原因。

while read -r filepath; do
    ffmpeg \
        -i "${filepath}" \
        -c copy \
        "${filepath/.mov/.mp4}"
done < <(find path/to/videos -type f -name '*.mov')

そこで ffmpeg/dev/null から読み込ませるようにすれば、 read -r filepath が想定してないデータを読み込むことはなくなる

while read -r filepath do
    ffmpeg \
        -i "${filepath}" \
        -c copy \
        "${filepath/.mov/.mp4}" \
        < /dev/null
done < <(find path/to/videos -type f -name '*.mov')

よく考えれば当然の方法だが、ちょっと気づかなかったのでメモ