赞
踩
sudo apt-get install ffmpeg
通常不是最新版本,但如果只是简单处理视频,一般也够用
需要考虑各种版本兼容,比较麻烦,可重复性不高,需要自己踩坑,此处暂不记录;
如有需要,建议参考大神的方法;
底层仍为ffmpeg,只是用python调用,比较方便,对视频算法同学强烈推荐。
sudo apt-get install ffmpeg
pip install ffmpeg-python
import ffmpeg
info = ffmpeg.probe(vid_path) # 获取视频信息,其他接口可参考具体文档
encoder 'aac' is experimental and might produce bad results.
Add '-strict experimental' if you want to use it.
解决:
加上参数 -strict -2, 比如:
ffmpeg -i $file_path -hide_banner -strict -2 -vf "scale=h=256:w=iw*1080/ih" $new_file_path
ffmpeg中resize时输入的参数值必须是偶数,所以这里用了先除以2,截取整数部分,再乘以2的做法:
w=trunc(iw*256/ih/2)*2
否则会报错如下:
[libx264 @ 0xa3b85a0] height not divisible by 2 (256x369)
由于视频中同时存在视频流和音频流,resize以后会重新编码,音频流也会受到影响,所以需要加参数来指定对音频流的处理:
-acodec copy
否则报错如下:
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
查看支持的硬件加速
ffmpeg -hwaccels
pip install ffmpeg-python
一个视频的时长有4种,容器时长,视频流时长,音频流时长,解码后的视频时长,4者有时不一样;
解码后的视频时长是最准确的,但是需要先解码再得到时长,比较慢,因此预处理视频时可以用容器时长;
用ffmpeg-python的接口得到容器时长的方法是:
import ffmpeg
info = ffmpeg.probe(source_name)
duration = float(info['format']['duration'])
该异常抛出的原因是有些视频数据有问题,导致视频处理过快,容器封装时队列溢出。
我们可以增大容器封装队列大小来解决,比如设置一下最大封装队列的大小为1024:
增加参数 -max_muxing_queue_size 1024:
ffmpeg -i vid_in.mp4 -max_muxing_queue_size 1024 vid_out.mp4
具体原因不明,但这个只是警告,其实不影响其他处理,可以暂时不用管【待解决,求指教】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。