版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dugudaibo/article/details/84308409
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实现将图片转换为视频》