在 18.04 中使用 bash 和 ffmpeg 将多个 3GP 文件连接为一个 3GP 文件,按文件名中的日期 YYYYMMDD 匹配

在 18.04 中使用 bash 和 ffmpeg 将多个 3GP 文件连接为一个 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  

我想通过脚本连接 3GP 文件(可能使用ffmpeg?) 合并到一个文件中,通过文件名中的 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

谢谢。

答案1

3GP可以使用以下方法连接文件ffmpeg通过类似以下命令:

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

一旦你创建for-next循环使用第一个值的第一个实例作为变量来过滤 YYYYMMDD,收集 _XXXXXX 文件名组件,并按顺序遍历它们;然后,转到下一个 YYYYMMDD 值并遍历其所有文件。

--

另一种选择是更优雅的方法用一个虚拟连接解复用器这引起了我的注意洛根将会

A)计算第一个带有 YYYYMMDD 前缀的文件数量,然后
B)创建控制文件我的列表.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 组并重复。

相关内容