2017-01-15 94 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

相關問題