私のディレクトリに接続したいビデオのリストがあります。
Video1.mpg
Video2.mpg
.
.
.
Video35.mpg
catコマンドに手動で書き込む必要なく、番号付きの順序で接続したいと思います。
答え1
そしてzsh
ffmpeg
:
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
次のコマンドを実行する必要があります。zsh
bash
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
未知のファイルリストで作業することは予測不可能ですが、質問によると、これは比較的小さく知られているリストです。