誰かがここで何が起こっているのか私に説明できますか?これが私の状況を次のように単純化した方法です。
# make 20 test gifs out of the same source file.
for i in {1..20}; do cp -p ../some-random-source-file.gif "${i}.gif"; done
# grab, then process them.
while read f; do echo "→ $f"; ffmpeg -i "$f" -y -loglevel quiet "same.mp4"; done < <(find . -maxdepth 1 -type f -iname "*.gif" -printf "%f\n")
→ 11.gif
→ .gif
→ 9.gif
→ .gif
→ 14.gif
→ 9.gif
→ 0.gif
→ 13.gif
→ 7.gif
→ 5.gif
→ 2.gif
→ .gif
→ 3.gif
→ 0.gif
→ 16.gif
→ .gif
→ 8.gif
→ 8.gif
→ .gif
→ 4.gif
混合ファイル(gifと非gif)を含むディレクトリ内のすべてのgifを処理しようとしています。しかし、何らかの理由で対応するffmpeg
ステップを追加すると、変数の内容が$f
最初に切り捨てられることがあります。
追加情報:
- うまくいかないファイルもログに記録しているので、プロセス交換を使用しています。
if ! ffmpeg …; then FAILED+=("$f"); fi
- また、文字列の置き換えによって新しいファイル名を生成しましたが
${f%.gif}.mp4
...私は知っているので、その部分は問題の発生とは関係ありませんでした。 - バッシュバージョン5.1.16
プロセス置換を理解します。タイミングの問題が発生する可能性があります- しかし、なぜ変数をランダムに切り取るのですか?最初にそして最後ではないか?構造がそれほど信頼できない場合、誰がそれを使用できますか?私はまた何ができますか?
答え1
ffmpeg
デフォルトではstdinを読み込むので、いくつかの文字が使用されます。フラグを追加する必要があります-nostdin
。
ffmpeg -nostdin -i "$f" -y -loglevel quiet