我想ffmpeg在每次處理新影像時呼叫一個 shell 腳本,并將該檔案名發送到腳本,理想情況下還發送它將處理的下一個影像的檔案名(如果有的話)。
ffmpeg到目前為止,這是我的命令(對于 jpg -> mov timelapse)。
ffmpeg -framerate 25 -pattern_type glob -i "/images/*.jpg" -c copy "lapse.mov"
我瀏覽了一些ffmpeg檔案,但在我的關鍵字搜索中沒有顯示任何內容,但是有很多檔案,所以也許我遺漏了什么?
我的最終目標是,我可以將下一個檔案名放入文本檔案中供 ffmpegdrawtext textfile讀取,從而渲染到下一幀。我意識到這可以在一個分步程序中完成,但我看到我可以將單個 ffmpeg 命令推送多遠。
uj5u.com熱心網友回復:
我不認為您可以按照您要求的方式進行操作,但是drawtext可以sendcmd通過生成具有時間間隔和硬編碼檔案名的命令檔案來實作更新。
也就是說,給定幀速率和 glob(擴展為影像檔案),您可以通過編程方式生成相應的命令檔案:
#!/bin/bash
framerate=25
imglob='images/*.jpg'
awk -v framerate="$framerate" '
BEGIN {
OFS = "\t"
time = 0
step = 1 / framerate
for (i = 1; i < ARGC; i ) {
n = split(ARGV[i],path,"/")
filename = path[n]
print time, "[enter]", "drawtext", "reinit", "text="filename";"
time = step
}
exit
}
' $imglob > cmd.txt
ffmpeg -framerate "$framerate" \
-pattern_type glob -i "$imglob" \
-vf "sendcmd=f=cmd.txt" \
-c copy "lapse.mov"
注意: bash 沒有任何浮點功能,這就是我在這里劫持 awk的原因。
如果您的檔案名包含可能破壞命令檔案格式的字符,那么您必須將每個檔案名存盤在不同的文本檔案中并使用textfile=textfile_with_the_filename.txt而不是text=literal_filename在命令檔案中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/410233.html
標籤:
