連続ファイル接続

連続ファイル接続

私のディレクトリに接続したいビデオのリストがあります。

Video1.mpg
Video2.mpg
.
.
.
Video35.mpg

catコマンドに手動で書き込む必要なく、番号付きの順序で接続したいと思います。

答え1

そしてzshffmpeg:

files=(Video*.mpg(n))
ffmpeg -f concat -safe 0 -i <(printf 'file %s\n' ${(qq)files}) -c copy output.mpg

(n)zshグローバル予選数値順に並べ替えます。(qq)一重引用符で囲まれた変数拡張フラグ。ffmpegファイル名に一重引用符、バックスラッシュ、または改行文字が含まれていると、期待どおりに正確に引用されることを保証できません。

私が理解したところ、上記はすべてのmpgファイルが同じコーデックを使用していると仮定しています。

AFAICT、mpeg特にファイルの場合は、ファイルをファイルレベルでリンクしたり、ほとんどのプレーヤーで再生を続けることができるので、次のこともできます(まだ機能しますzsh)。

cat Video*.mpg(n) > output.mpg

macOSにデフォルトでインストールされているがデフォルトのログインzshシェルを明示的に変更しない限り、端末から取得できるデフォルトのシェルではありませんbash。したがって、まず端末のシェルプロンプトに入力するか、zsh次のコマンドを実行する必要があります。zshbash

zsh -c 'cat Video*.mpg(n) > output.mpg'

代わりに。

答え2

Bash 中かっこ拡張を使用します。

cat Video{{1..9},{10..35}}.mpg > outputfile

将来的には、0ファイル名を最初に指定するときにパディングを使用するので、次のようにすることができます。

cat Video{01..35}.mpg > outputfile

答え3

1つの方法は次のとおりです。

cat $(ls Video*.mpg | sort -to -k2 -n )>outputfile  

ls Video*.mpg- パターンに基づいてファイルを一覧表示する - 区切り文字、2番目のキー、および数値を使用したファイルの並べ
sort -to -k2 -n替えo-n

*ls未知のファイルリストで作業することは予測不可能ですが、質問によると、これは比較的小さく知られているリストです。

関連情報