シェルスクリプトのループ処理でffmpegを実行する際は"</dev/null"が必要だった
WSL2+Ubuntu+Z shell(zsh)+ffmpeg(4.2.4)環境です。
以下まるまる
bash と ffmpeg でハマった話
と同じ話なのですが、解決には非常に時間がかかりました。
やりたいことは
複数の動画ファイルのパスを記述したテキストファイルを作成
シェルスクリプトで上記のテキストファイルを読み込み、ループしながらffmpegで動画ファイルを変換
で、実行してみると
テキストファイルの1行目に記述されている動画ファイルは変換される
2行目以降は数行スキップされ、テキストファイル中に指定した一部動画しか変換されない
という挙動です。
上記リンク先に答えが出ていますが
cat テキストファイル | while read line || [[ -n "${line}" ]]
do
ffmpeg パラメータ
done
ではなく、ffmpegに"< /dev/null"とリダイレクトすること
cat テキストファイル | while read line || [[ -n "${line}" ]]
do
ffmpeg パラメータ < /dev/null
done
で正しく動きました。
数々のトライアンドエラー、数時間どころじゃなくドブに捨ててしまった…。
余談ですが、本記事のタイトルに"</dev/null"を使用したところ、</dev/null以降の文字列が消えてしまいました(2021/06/30現在)。暫定対応として<(半角)を<(全角)にしておきます。
*2021/07/22追記
ループでreadしながらsshを実行する場合も-nオプションの指定 = "</dev/null"が必要だそうです。
またreadではなくforを使うという解決策もあるそうです。
【了】
この記事が気に入ったらサポートをしてみませんか?