2017-11-04 23 views
1

私はというスクリプトをいくつかのファイルにffmpegと呼んでいます。私は、出力をファイルにリダイレクトし、バックグラウンドでこのスクリプトを実行しようとすると、ジョブが起動しますが、その後すぐに中断します。バックグラウンドで `ffmpeg`を実行すると`中断(tty出力) `を防ぐにはどうすればいいですか?

% bin/mp3convert.sh path/a/b &> ~/tmp/log.txt & 
[1] 93352 
% 
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &> 

私は、スクリプトを作ってみる場合は、バックグラウンドで継続し、それはすぐに再び中断します。

% jobs 
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &> 
% bg %1 
[1] + continued bin/mp3convert.sh path/a/b &> 
% jobs 
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &> 
% 

スクリプトをフォアグラウンドにすることでスクリプトを続行できますが、スクリプトが終了するまで私の端末は占有されます。つまり、私はバックグラウンドでスクリプトを実行する利点は得られません。

% 
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &> 
% fg %1 
[1] + continued bin/mp3convert.sh path/a/b &> 
% # much time passes with no activity on terminal, then script finishes 
% 

スクリプトをバックグラウンドで正常に実行させるにはどうすればよいですか?

私のスクリプトの簡易版は、次のとおりです。

#!/bin/sh 
# mp3convert.sh 
for f in "$1"/*.flac; do 
    ffmpeg -i "$f" -c:v copy path/to/dest/"$(basename -s .flac "$f")".mp3 
done 

私はMacPortsによって供給ffmpeg version 3.4で、マックOS X 10.11.6上で実行しています。

明らかに関連する質問はwhy do I get “Suspended (tty output)” in one terminal but not in others?です。その答えは、端末の状態をstty -tostopに設定することです。それは私を助けませんでした。私はすでにその状態を設定していました。

+0

今、私は依頼ボタンを押したこと、[この質問をして、より適切に収まる可能性があることを私に起こりますスーパーユーザー](https://superuser.com/questions/tagged/ffmpeg)。 –

答えて

2

ffmpegは、デフォルトでstdinと対話できます。 (documentation on its -stdin optionを参照してください。)Mac OS XおよびLinuxシステムでは、バックグラウンドで実行されているffmpegジョブが "tty input"ではなく "tty output"に関するメッセージで間に合って停止します。呼び出しにオプション-nostdin追加

STDIN相互作用を有効にしないためにffmpegを引き起こし、従ってバックグラウンド・プロセスを中断が回避されます。その後、スクリプトが中断することなく走っ

ffmpeg -nostdin -i "$f" -c:v copy path/to/dest/"$(basename -s .flac "$f")".mp3 

:に

ffmpeg -i "$f" -c:v copy path/to/dest/"$(basename -s .flac "$f")".mp3 

:私は私からの呼び出しを変えそう

、。

入力を/dev/nullにリダイレクトすると、同様の効果が得られます。これは、ffmpeg呼び出し、または実行をバックグラウンドに送信するシェルスクリプトへの呼び出しで実行できます。これについての良いことはffmpegを呼び出すスクリプトを変更することなくstdinのためにffmpegの必要性を回避できるということです。これの欠点は、LinuxとMac OS XとではWindows上で動作が異なることです。

あなたは、スクリプトの呼び出しを変更しますに

% bin/mp3convert.sh path/a/b &> ~/tmp/log.txt & 

% bin/mp3convert.sh path/a/b < /dev/null &> ~/tmp/log.txt & 
+0

この[[SuperUserの回答]](https://superuser.com/a/577055/114802)は、少し異なる質問になりますが、同じオプション-nostdinと '/ dev/null'を返します。 FFmpegコマンドの並列実行が可能ですか?_。 –

関連する問題