簡體   English   中英

FFmpeg 從圖像創建視頻,從時間戳插入圖像作為幀?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM