2014-07-09 103 views

回答

4

不需要特定的SW。您只需將與幀對應的字節數讀/寫入新文件即可。 「正常情況下」使用的YCbCr格式按照4:2:0進行二次採樣,即色度採樣在水平和垂直方向上均減小2倍;這意味着1幀中的YCbCr 4:2:0對應於

1 frame = width x height x 3/2 bytes 

如果您是基於linux系統上,則可以使用dd實用程序將第一n幀提取到這樣一個新的文件:

dd if=input.yuv bs=1 count=$((width*height*3/2*num_frames)) of=output.yuv 

爲一個1080p剪輯的第一幀10,上面的將是:

dd if=input.yuv bs=1 count=$((1920*1080*3/2*10)) of=output.yuv 

dd if=input.yuv bs=1 count=3110400 of=output.yuv 

或使用您最喜愛的編程/腳本語言來做到這一點。

例如,下面的Python的腳本寫入第一10幀到一個新的文件(每次一幀),它tweek您的需求:

#!/usr/bin/env python 

f_in = 'BQMall_832x480_60.yuv' 
f_out = 'BQMall_first_10_frames.yuv' 
f_size = 832*480*3/2 

with open(f_in, 'rb') as fd_in, open(f_out, 'wb') as fd_out: 
    for i in range(10): 
     data = fd_in.read(f_size) 
     fd_out.write(data) 
+0

在此命令中,如果DD = input.yuv bs = 1 count = $((1920 * 1080 * 3/2 * 10))= output.yuv 我必須給出135個num_frames才能獲得90幀的文件。爲什麼這樣? – pradeep

+0

很可能是由於您的YCbCr文件不是4:2:0格式而是4:2:2。然後,您需要將計算更改爲'$((1920 * 1080 * 2 * 10))'。 –