gpt4 book ai didi

bash - 使用 bash 脚本以自然顺序列出文件夹中的文件

转载 作者:行者123 更新时间:2023-12-04 23:27:05 24 4
gpt4 key购买 nike

我正在尝试使用 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

要正确合并视频,我需要按自然顺序列出文件,如下所示:

自然排序的文件

enter image description here

如图,文件需要按 -后面的数字排序从 1 到 24,与 6846641-1.flv在第一行和 6846641-24.flv在最后一行。格式如下:
file '/mnt/c/Users/Oho/Desktop/save//6846641-xx.flv'

是否可以为 ffmpeg 生成格式正确的列表?使用 bash 脚本(如果可以的话,在一行中)?

编辑:
感谢 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

最佳答案

我建议:

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

-t "-": use - as separator

-n: compare according to string numerical value

-k2,2: start a key at column 2

关于bash - 使用 bash 脚本以自然顺序列出文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41659018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com