web-dev-qa-db-ja.com

18.04でbashとffmpegを使用して、複数の3GPファイルを1つの3GPファイルに連結し、ファイル名の日付YYYYMMDDで照合する

Ubuntu 18.04システムに次のサンプルファイルがあります。

VID_20190407_160033.3gp  
VID_20190407_161444.3gp  
VID_20190407_161609.3gp  

VID_20190415_183315.3gp  
VID_20190415_183411.3gp  
VID_20190415_192712.3gp  

VID_20190420_124435.3gp  
VID_20190420_125755.3gp  
VID_20190420_130214.3gp  
VID_20190420_141700.3gp  

そして、スクリプトによって(おそらく ffmpeg ?を使用して)3GPファイルを1つのファイルに連結し、ファイル名のYYYYMMDD日付でファイルを選択すると、次のような結果になります。

VID_20190407.3gp
VID_20190415.3gp
VID_20190420.3gp

それをスクリプト化する最良の方法は何ですか?

システム

Linux local 5.0.0-29-lowlatency #31-Ubuntu SMP PREEMPT Thu Sep 12 14:13:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

ありがとうございました。

2
genderbee

GP ファイルは、次のようなコマンドで ffmpeg を使用して連結できます。

ffmpeg -f concat -i <(find . -name 'YYYYMMDD_XXXXXX.3gp' -printf "file '$PWD/%p'\n") -c copy YYYYMMDD.3gp

最初の値の最初のインスタンスを変数として使用してYYYYMMDDでフィルタリングする for-next ループを作成したら、_XXXXXXファイル名コンポーネントを収集し、それらを順番に実行します。次に、次のYYYYMMDD値に進み、そのすべてのファイルをステップ実行します。

-

別の よりエレガントな方法virtual concat demuxer を使用 llogan によって私の注意を引いたのは、

A)最初のYYYYMMDD接頭辞を持つファイルの数を数え、次に
B)日付のプレフィックスに一致する各ファイルの行を含む制御ファイルmylist.txtを作成します。次のようになります。

$ cat mylist.txt
ファイル '/ path/to/file1'
ファイル '/ path/to/file2'
ファイル '/ path/to/file3'
ファイル '/ path/to/file4'

または

$ cat mylist.txt
ファイル '/path/to/YYYYMMDD_XXXXX1.3gp'
ファイル '/path/to/YYYYMMDD_XXXXX2.3gp'
ファイル '/path/to/YYYYMMDD_XXXXX3.3gp'
ファイル '/path/to/YYYYMMDD_XXXXX4.3gp'

次にC)実行

ffmpeg -f concat -i mylist.txt -c copy YYYYMMDD.mp4

これで、最初のファイルセットが連結されました。次のYYYYMMDDグループに進み、繰り返します。

2
K7AAY