ubuntu 下 ffmpeg 的安裝,影象轉視訊,壓縮視訊和從視訊轉影象
阿新 • • 發佈:2018-11-25
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實現將圖片轉換為視訊》