概述:
我正在嘗試將我的大部分 MKV 庫重新混合為 MP4。我有一個腳本,它已經檢查並從視訊檔案中提取了字幕。
我有另一個腳本,可以重新混合給定資料夾中的任何 .mkv 檔案。我需要的是腳本僅有的remux 資料夾中偵測到存在 .srt 檔案。
所有 .srt 文件均以 ***.eng.srt 結尾
這是我目前的 remux 腳本:
#!/bin/bash
IFS=$'\n'
clear
for filename in *.mkv
do
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename
done
謝謝!任何幫助將不勝感激。
答案1
我想你正在尋找這個:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
我刪除了,IFS='\n'
因為它在那裡沒有做任何有用的事情,for
即使名稱包含空格,只要引用變量,您的循環就非常安全。
[ -e foo ]
的存在性測試foo
。相反,[ ! -e foo ]
如果沒有 則為真foo
。在本例中,foo
是一個 glob ( *.srt
),因此如果找到任何符合文件,測試將為 false。在上面的腳本中,這&&
意味著如果沒有srt
找到文件,將列印錯誤訊息並且腳本將退出。