2012-10-23 12 views
2

首先 - 我不是程序員或編劇 - 正是我一直在玩的幾天。Bash腳本將多個字幕自動化成視頻mp4容器文件

我有一個包含mp4視頻文件和srt字幕文件的文件夾。我手動管理使用mencoder和手剎將字幕硬編碼爲視頻文件進行重新編碼。

mencoder -oac pcm -ovc raw -sub NAMEOFVIDEO.sub -utf8 -o NAMEOFVIDEO_SRT NAMEOFVIDEO.mp4 

這很好,我正在尋找。所以我所擁有的是帶有多個.srt和.mp4的這個/工作目錄(每天可能有2或3個新的視頻和srt文件)

如果只有1個.srt和1個.mp4文件,我可以管理BUT我想知道如何創建一個可以運行mencoder命令的Bash腳本,如果我有兩個或三個不同的srt和mp4文件,mencoder行必須運行正確的相應srt文件和mp4文件組合。

所有我能想出是一樣的東西mp4_file= find \working -type f -name "*.mp4" | head -1它找到的第一個結果的.mp4

srt_file = find \working -type f -name "*.srt" | head -1它找到的第一個結果污泥齡(幸運的是它的基本名稱相同的文件)

然後通過運行變量mencoder命令,mencoder -oac pcm -ovc raw -sub $srt_file -utf8 -o $mp4_file-SRT $mp4_file,但正如我表示,如果有超過1個文件組合(一個循環也許),那麼我必須堅持輸出通過HandBrakeCLI --preset "High Profile" -i $mp4_file-SRT -o $mp4_file

這很可怕,我錯過了一些更簡單的方法來做到這一點?

+0

雖然Olaf的解決方案看起來像一個很好的答案,但我們仍然猜測它是否能真正解決您的問題。如果您可以編輯您的帖子以包含樣本輸入和必需的輸出,並且樣本輸入包括您標識爲std和special的所有個案中的一個,並且輸出包括根據需要轉換的那些個案,則提供有意義的答案會更容易。您可以每行輸入一行樣本數據,選擇整個數據塊,然後使用{}重新格式化工具在您的文章中保留每行格式的1項。祝你好運。 – shellter

回答

1

如果它總是相同的基本名稱,你可以用find和一個循環做到這一點:

find /working -type f -name '*.mp4' | while read mp4; do 
    b=`basename $mp4 .mp4` 
    d=`dirname $mp4` 
    mencoder -oac pcm -ovc raw -sub $d/$b.sub -utf8 -o $mp4-SRT $mp4 
done 

如果MP4和子文件有不同的名稱或在不同的目錄,這當然不是工作。