2015-10-16 50 views
0

我知道這可以通過Linux內核模塊來實現(即,您將「掛載」視頻文件以訪問幀),但我想知道是否有另一種Unix-ish的方式來做到這一點,沒有那麼遠。將視頻文件的每一幀映射到指向原始幀的.png

是否有一些特殊文件(可能是一些魔術與管道),可以引用視頻文件中的特定幀,它被視爲.png到外部使用情況,但編輯更新視頻中的原始幀?

(我正在尋找一個一般的文件類型/僞如果是用C寫的答案,就更好了。)

這是可能的FFMPEG訪問單個幀:Using avconv to get a single frame from h264 video at set time

。 ..並注入它放回:https://forums.creativecow.net/thread/291/1315

+0

你爲什麼不使用一個球員比可以輸出幀作爲圖像? –

+0

@KarolyHorvath我可以使用FFMPEG導出一堆.png文件,但這需要很多初始處理(拆分幀),空間(數千.png文件佔用的空間大於相同長度的視頻文件)和最終處理(將幀合併回去)。 – CharlesL

回答

4

是有一些特殊的文件(也許一些魔術帶管),可以在被看作是爲.png外部utils的視頻文件中引用特定的幀,但是當編輯更新視頻中的原始幀?

這不是一個你可以對大多數視頻格式有用的東西。幀不會獨立存儲在文件中;視頻壓縮算法通過存儲相鄰幀之間的差異來工作,因此很難更新單個幀而不改變與其相關的所有其他幀。

無論如何,沒有;標準UNIX系統中無法創建以這種方式鏈接到另一個文件的文件。但是,您可以使用創建一個FUSE文件系統,將視頻的幀作爲虛擬文件系統中的文件公開。雖然這不是一項微不足道的任務,對入門信息,你可能想通過FUSE教程工作:

http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/

+0

可以訪問視頻的單個幀(http://stackoverflow.com/questions/25308594/using-avconv-to-get-a-single-frame-from-h264-video-at-set-time ),所以命名管道(frame1)不可能訪問框架?然後以某種方式,注入新的框架(https://forums.creativecow.net/thread/291/1315)。 – CharlesL

+0

如第一個鏈接中所述,可以從視頻文件中讀取單個幀,但寫回各個幀是有問題的。無論如何,命名管道也不會做你想做的事情,因爲只有在數據已經寫入管道的情況下數據纔可用,並且將所有數據駐留在管道中將會很糟糕。 – duskwuff

+0

啊,那就用FUSE吧。完美解決問題。謝謝! – CharlesL