连接连续的文件

连接连续的文件

我的目录中有一个要连接的视频列表。

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

虽然zsh在 macOS 中默认安装,但它不是您在终端中获得的默认 shell,除非您明确更改了默认的登录 shell bash。因此,您需要首先在终端中的 shell 提示符下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

这是一种方法:

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

ls Video*.mpg- 根据模式列出文件- 使用分隔符、第二个键和数字对
sort -to -k2 -n文件进行排序o-n

*请意识到,ls在未知的文件列表上使用可能是不可预测的,但根据问题,这是一个相对较小且已知的列表。

相关内容