[英]FFmpeg create video from images, insert images as frame from timestamp?
所以我試圖提取視頻的每一幀,然后使用 ffprobe 查看視頻中的每一幀何時播放,然后能夠使用這些提取的圖像和 ffprobe 輸出將該視頻拼接在一起。
現在,我有這個批處理文件:
for %%a in (*.mp4) do (
mkdir "%%~na_images" > NUL
ffmpeg.exe -hide_banner -i "%%a" -t 100 "%%~na_images\image-%%d.png"
ffprobe.exe "%%a" -hide_banner -show_entries frame=coded_picture_number,best_effort_timestamp_time -of csv > "%%~na_frames.txt"
)
首先,為圖像創建一個目錄。 然后 ffmpeg 將視頻的所有幀提取到單獨的 PNG 文件中,這些文件有適當的編號。 最后,ffprobe 會看到每個幀在該視頻中首次顯示的時間(即:第 1 幀顯示為 0 秒,但假設為 60fps,然后第 2 幀在視頻中以 0.016667 秒播放)。 輸出如下所示:
frame,0.000000,0
frame,0.000000
frame,0.017000,1
frame,0.023220
其中第一個數字(IE 0.17000 是第二幀出現的時間),第二個數字是幀編號。 現在我的問題是使用 ffmpeg 獲取每一幀並將其放置在視頻中的適當時間。 我可以使用另一種語言(可能是 Python)來做到這一點,但我最好的猜測是循環遍歷 ffprobe 輸出文件,獲取幀時間和圖像編號,將該幀放在它出現的點上,然后繼續到下一幀和時間放置。 看看我上面作為例子使用的幀數據,它會是這樣的:
for line in lines:
mySplit = line.split(',')
# Get image number 0 and insert at time 0.000000
這是我不確定如何在編碼意義上做的部分。 我可以讀入並解析 ffprobe 輸出文本文件的行,但我不知道如何使用 ffmpeg 或類似解決方案在視頻中的某些點插入幀。
您需要告訴系統有 1 個以上的令牌。 IE
for /f "tokens=1-4 delims=," %%a in ...
在這里你告訴它你想要獲取標記 1 到 4 並且 delimeter 是,
因此,對於包含1,100,1000,10000
的文件示例,它會將%%a
分配給第一個標記(為1
,將%%b
分配給第二個標記(為100
)等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.