Bashループのffmpegの問題

Bashループのffmpegの問題

複数の.mkvファイルを.mp4ファイルに変換するために次のコマンドラインを実行すると、問題が発生します。これは、スクリプトがすべてのコマンドを同時に実行しようとするのと同じです。または、コマンドが互いに絡み合って出力が歪むようなものです。よくわかりません。今実行してみると、最初のファイルだけが変換されました。時々、予期しないまたはランダムな結果が出ているようです。

ls -1 *.mkv | while read f; do ffmpeg -i "$f" -codec copy "${f%.*}.mp4"; done

ただし、次のようにすると期待どおりに動作します。

ls -1 *.mkv | while read f; do echo ffmpeg -i \"$f\" -codec copy \"${f%.*}.mp4\"; done > script; bash script

しかし、なぜ?それは何に関連していますかffmpeg? bashループやその他のコマンドではこれは発生しませんffmpeg。引用符をエスケープしたりスクリプトファイルにパイプしたりするなど、何もせずにこれを行う簡単な方法が必要です。

ベストアンサー1

ffmpegまた、標準入力から読み込み、read.redirectsで入力を使用します/dev/null

... | while read f; do ffmpeg -i "$f" -codec copy "${f%.*}.mp4" < /dev/null; done

つまり、このような出力を読まないでくださいls。単純なforループで十分です(そして元の問題を取り除きます)。

for f in *.mkv; do
    ffmpeg -i "$f" -codec copy "${f%.*}.mp4"
done

おすすめ記事