1. 程式人生 > >ubuntu 下 ffmpeg 的安裝,影象轉視訊,壓縮視訊和從視訊轉影象

ubuntu 下 ffmpeg 的安裝,影象轉視訊,壓縮視訊和從視訊轉影象

1.Ubuntu下安裝 ffmpeg

    可以通過如下的方式進行安裝[1]

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

sudo apt-get update

sudo apt-get install ffmpeg

    之後可以通過下面的語句查詢安裝是否成功

ffmpeg -version

2. 使用 ffmpeg 壓縮視訊大小

    首先我們需要計算將視訊壓縮到制定大小的引數。如下給出了一種簡易測試,並不精確的方法[2]:

    輸入檔案 843 MiB, 3455 kbps,目標尺寸 400 MiB
    粗略計算 目標位元率 = 3455*400/843. = 1639

具體程式碼如下

pfmpeg -i F1_2015_01Avril_GP_Malaisie_OnBoard_720p.mp4 -b 1639k -strict -2 output.mp4

其中引數 -b 1639k 指出了壓縮之後的位元率。

3. 從影象生成視訊

    可以使用如下的方法從一個資料夾中將服從某一種命名方式的影象生成為視訊[3],具體方式如下

ffmpeg -f image2 -i /home/liubo/tmp/sample/%5d.jpg -b 1000k /home/liubo/tmp/tt.mp4

其中/home/liubo/tmp/sample/%5d.jpg 為圖片路徑圖片的命名格式為5%d.jpg形式,即:00001.jpg 00002.jpg 00003.jpg …;-b 1000k 指定了生成視訊的位元率;/home/liubo/tmp/tt.mp4為輸出視訊檔名

4. 從視訊生成影象

   下面的的程式將從多個視訊中提取影象,並把他們分別儲存在各自的資料夾中,具體程式碼如下

import os, glob

def get_filePath_fileName_fileExt(filename):
    (filepath,tempfilename) = os.path.split(filename)
    (shotname,extension) = os.path.splitext(tempfilename)
    return filepath,shotname,extension

def extract_frames(vedio_path,
output_frame_path): all_vedios = sorted(glob.glob(os.path.join(vedio_path, '*'))) cmds = [] for vedio in all_vedios: _,shotname,__ = get_filePath_fileName_fileExt(vedio) exdir = os.path.join(output_frame_path, shotname) if not os.path.exists(exdir): os.makedirs(exdir) cmd = 'ffmpeg -i {:} {:}/%06d.png'.format(vedio, exdir) cmds.append(cmd) with open(output_frame_path + '/ExtractVedio.sh', 'w') as txtfile: for cmd in cmds: txtfile.write('{}\n'.format(cmd)) if __name__ =='__main__': vedio_path = '/home/liubo/real_environment/frames/IRSU001_vedio' output_frame_path = '/home/liubo/real_environment/frames/IRSU001_frames' extract_frames(vedio_path, output_frame_path)

其中 vedio_path 是儲存視訊的資料夾,output_frame_path 是儲存輸出的資料夾。在執行完上述程式碼之後會得到一個 ‘ExtractVedio.sh’ 檔案,然後執行這個檔案就可以了,具體如下

sh ExtractVedio.sh

參考

[1] 《FFmpeg在Ubuntu的安裝以及教程~~~》文章中還包括一些 ffmpeg 引數的含義說明
[2]《求助:使用ffmpeg將視訊壓縮成指定的大小》 #5
[3]《FFmpeg實現將圖片轉換為視訊》