我正在尝试使用ffmpeg
合并多个flv文件。 ffmpeg
需要此格式的文件列表:
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
要正确合并视频,我需要按照以下自然顺序列出文件:
自然排序的文件
如图所示,文件需要按照-
之后的数字从1到24进行排序,第一行为6846641-1.flv
,最后一行为6846641-24.flv
。每行的格式如下:
file '/mnt/c/Users/Oho/Desktop/save//6846641-xx.flv'
是否可以使用bash脚本为ffmpeg
生成格式正确的列表(如果可以实现,则在一行中生成)?
编辑: 感谢Cyrus,修改后的代码就在这里,它完成了工作:
#!/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 :(得分:0)
我建议:
sort -t "-" -n -k 2 file
-t "-"
:使用-
作为分隔符进行比较
-n
:根据字符串数值
-k2,2
:在第2列启动密钥