2017-01-15 37 views
0

我想用ffmpeg合并几个flv文件。 ffmpeg需要文件中的格式列表:使用bash脚本以自然顺序列出文件夹中的文件

file '/path/to/file1' 
file '/path/to/file2' 
file '/path/to/file3' 

有了一些搜索和考验,我已经想出了这一行命令:

ffmpeg -safe 0 -f concat -i <(for entry in "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"/*.flv;do echo "file '$entry'";done) -c copy output.flv 

在括号中的脚本将生成的路径列表到当前文件夹中的所有文件的详细由ffmpeg要求:

for entry in "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"/*.flv;do echo "file '$entry'";done 

然而,按照字母顺序这只列表文件:

6846641-10.flv 
6846641-11.flv 
6846641-12.flv 
6846641-13.flv 
6846641-14.flv 
6846641-15.flv 
6846641-16.flv 
6846641-17.flv 
6846641-18.flv 
6846641-19.flv 
6846641-1.flv 
6846641-20.flv 
6846641-21.flv 
6846641-22.flv 
6846641-23.flv 
6846641-24.flv 
6846641-2.flv 
6846641-3.flv 
6846641-4.flv 
6846641-5.flv 
6846641-6.flv 
6846641-7.flv 
6846641-8.flv 
6846641-9.flv 

要正确合并视频,我需要的文件,以自然顺序排列如下:

天然有序的文件

enter image description here

正如图片所示,文件需要按-从1到24之后的数字排序,6846641-1.flv在第一行,6846641-24.flv在最后一行。而在这样的格式,每行:

file '/mnt/c/Users/Oho/Desktop/save//6846641-xx.flv' 

有没有可能产生的ffmpeg与bash脚本(在一个行,如果可以实现的)格式正确的名单?

编辑: 由于赛勒斯,修改后的代码是在这里,它的工作:

#!/bin/bash 
for entry in "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"/*.flv 
do 
    echo "file '$entry'" >> fileOutputList.temp 
done 
sort -t "-" -n -k 2 fileOutputList.temp > fileOutputListSorted.temp 
ffmpeg -safe 0 -f concat -i fileOutputListSorted.temp -c copy output.flv 
rm fileOutputList.temp 
rm fileOutputListSorted.temp 
+0

请看一看:?当有人回答我的问题,我应该怎么办(HTTP://计算器.COM /帮助/人,答案) – Cyrus

回答

0

我建议:

sort -t "-" -n -k 2 file 

-t "-":使用-作为分隔符

-n:根据字符串数值

-k2,2比较:在开始列键2

相关问题