9

フォルダ内からビデオを処理するために作成したbashスクリプトがあり、そのサブフォルダは次のとおりです。

find . -type f -name '*.mkv' | while read file;
do
  ffmpeg -i $file ...
done

問題:ffmpegが完了するのを待つwhileループの代わりに、ループを繰り返し処理し続けます。その結果、ファイルは処理されません。ffmpegが完了するまで待ってから次のループに進むために、現在のwhileループの反復を行う方法が必要です。または、これらのアイテムをキューに入れる方法もあります。

編集:したがって、ファイルのセットを反復処理するときの解決策は、-nostdinパラメーターをffmpegに渡すことです。これが同様の問題を抱えている可能性のある他の人に役立つことを願っています。

また、file->$fileはコピー/貼り付けのタイプミスでした。

4

4 に答える 4

8

少し前に投稿したことに気づきましたが、解決策を見つけました。すべての回答に感謝します。ffmpegに-nostdinparamを指定するとうまくいきます。処理のために次のファイルに移動する前に、現在のファイルのみを処理します。

ffmpegの-nostdinオプションは、stdinからのユーザー入力の読み取りを回避します。そうしないと、ビデオファイル自体が解釈されます。

ffmpeg -i <filename> ... -nostdin

上記を使用することの最良の部分は、出力でエラーがスローされた場合に冗長性を引き続き使用できることです。

ffmpeg -i <filename> ... -nostdin -loglevel panic 

または、出力をファイルに報告する場合は、次のようにします。

# Custom log name (optional). Helpful when multiple files are involved.
# FFREPORT=./${filename}-$(date +%h.%m.%s).log
ffmpeg -i <filename> ... -nostdin -report

この2つを組み合わせて使用​​することもできます。また、解決策を提供してくれた@Barmarにも感謝します。

于 2015-07-30T20:42:08.557 に答える
3

$これはあなたが前を逃したのと同じくらい簡単だと思いますfile

find . -type f -name '*.mkv' | while read file;
do
    ffmpeg -i $file ...
done
于 2012-12-21T19:15:16.630 に答える
3

これはあなたにとって良いですか?

find . -type f -name '*.mkv' -exec ffmpeg -i {} \;
于 2012-12-21T19:24:39.200 に答える
3

私は悪意のある答えのひったくりです。私は1つ見つけました:

ffmpeg -i $file &
wait $!

puchuのおかげで、ここで:ffmpegを多くのファイルに適用します

于 2013-06-04T15:12:10.097 に答える