@echo off & cd/d "%~dp0"
for /r "%~dp1" %%i in (*.ass;*.ssa;*.srt;*.txt) do (
copy /y "%%~i" "%~dp0\tempsub.txt"
set Filters=-vf subtitles=tempsub.txt
goto break
)
:break
bat 如何搜尋多種檔案? (不包含子資料夾)
for /d (set) 無法使用多種檔案
請各位前輩賜教
John wrote:
你把 1.txt 複製成 tempsub.txt,又把 2.txt 複製成 tempsub.txt
只會複製一次,接著 goto break 直接跳出迴圈
因為我只需要一個字幕檔,優先順序 ass > ssa > srt > txt
而這些字幕檔本來就是純文字,副檔名並不影響 所以統一為 tempsub.txt
John wrote:
你的用途,很奇怪。我看不是很懂。
我是要把字幕給 FFmpeg 掛載,而 FFmpeg 要掛載的字幕必須在 %dp0 底下
ffmpeg.exe -i "%~1" -c:a libvo_aacenc -vbr 4 -ac 2 -strict -2 -vf subtitles=tempsub.txt -c:v libx264 -profile:v high -preset ultrafast -x264opts crf=18:ref=4:bframes=5 "%~dpn1.recode.mp4"
%1 是 MKV MP4 等媒體檔,然後複製相同路徑下的1個字幕檔至 %dp0
不過字幕檔應該要影片同檔名才對,否則會複製到不相干的字幕
move1.mkv
move1.cht.ass
move2.mkv
move2.chs.ass
--------------------------------
雖然找到解決方法了,打了好多重複的字串,有沒有比較精簡的寫法?
for /r "%~dp1" %%i in ("%~n1*.ass";"%~n1*.ssa";"%~n1*.txt";"%~n1*.srt") do (
copy /y "%%~i" "%~dp0\tempsub.txt"
goto break
)
:break
--------------------------------
很神奇的一點,眾多 FFmpeg 的 GUI 居然沒有一個有做出掛載字幕的選項
原本是想用 C# 自己做一個簡單的 GUI
想說參數都是用那幾個,寫 BAT 就可以搞定了
因為有些播放設備不支援 softsub,所以只能做成 hardsub
內文搜尋




























































































