一時ファイルを使用せずに、コマンド出力を別のコマンドに引数として渡します。

一時ファイルを使用せずに、コマンド出力を別のコマンドに引数として渡します。

何千ものビデオファイルをある形式(vob)から別の形式(mkv)に変換しようとしています。各ソースビデオは、順番に番号付けされた8個未満の1GB * .vobファイルに分割されます。残念ながら、ビデオ変換プログラムはリンクされた単一のvobファイルのみを受け入れることができ、以下を使用して簡単に作成できます。

cat *.vob > full_movie.vob

(full_movie.vobのサイズは通常6〜7GBです。)

ビデオフォーマット変換プログラムのフォーマットは次のとおりです。

video_convert -i full_movie.vob  many_arguments -o full_movie.mkv

これらのファイルはネットワークドライブにあるため、ネットワークトラフィックが最大のボトルネックになります。私はすべての一時的なfull_movie.vobファイルを生成し、後で破棄する中間ステップを何とか避けたいと思います(たとえこのファイルが私のラップトップSSDにローカルに保存されていても、> 100 TBを書き込んでファイルを磨きたくありません)。

cat *.vobコマンドの出力を取得して(ファイルとして保存する代わりに)RAMに保存し、どういうわけかvideo_convertプログラムパラメータにプッシュする方法はありますか?サーバーに一時ファイルを保存する必要がある場合は、ネットワークトラフィックと時間が2倍になります。

これは円形の穴の正方形の杭である場合もあります…

答え1

プログラムvideo_convertにファイルの代わりに標準入力を処理するオプションはありますか?その場合は、出力をパイプするだけですcat *.vob。ただし、多くのプログラムでは、-ファイル名を使用して標準入力を表したり、ファイル名を指定しない限り、デフォルトで標準入力を使用できます。または、/dev/stdinたとえば、.forを使用できます。

cat *.vob | video_convert many_arguments -o full_movie.mkv
cat *.vob | video_convert -i -  many_arguments -o full_movie.mkv
cat *.vob | video_convert -i /dev/stdin  many_arguments -o full_movie.mkv

video_convert入力で特定の場所を見つける必要がある場合は、stdinを使用できません。連続したデータストリームを処理できる場合にのみ有効です。使用する場合も同様に適用されます。プロセスの交換または名前付きパイプ@muruがコメントで述べたように、AKA fifoも検索できません。

関連情報