当前位置:   article > 正文

FFmpeg使用手札_more than 1000 frames duplicated

more than 1000 frames duplicated

环境搭建

1. 快速搭建(不考虑版本兼容)
sudo apt-get install ffmpeg
  • 1

通常不是最新版本,但如果只是简单处理视频,一般也够用

2. 安装ffmpeg-cuda加速

需要考虑各种版本兼容,比较麻烦,可重复性不高,需要自己踩坑,此处暂不记录;
如有需要,建议参考大神的方法

3. ffmpeg-python环境搭建

底层仍为ffmpeg,只是用python调用,比较方便,对视频算法同学强烈推荐。

  1. 安装ffmpeg,建议使用pytorch镜像:pytorch/pytorch:1.7.0-cuda11.0-cudnn8-devel (实践中使用过,兼容性较好)
sudo apt-get install ffmpeg
  • 1
  1. 安装ffmpeg-python
pip install ffmpeg-python
  • 1
  1. 使用ffmpeg的python接口
 import ffmpeg
 
 info = ffmpeg.probe(vid_path)  # 获取视频信息,其他接口可参考具体文档
  • 1
  • 2
  • 3

一些报错记录 & 原因 & 解决方法

1. 报错:encoder ‘aac’ is experimental and might produce bad results
encoder 'aac' is experimental and might produce bad results. 
Add '-strict experimental' if you want to use it. 
  • 1
  • 2

解决:
加上参数 -strict -2, 比如:

ffmpeg -i $file_path -hide_banner -strict -2 -vf "scale=h=256:w=iw*1080/ih" $new_file_path
  • 1
2. resize时的参数值必须是偶数

ffmpeg中resize时输入的参数值必须是偶数,所以这里用了先除以2,截取整数部分,再乘以2的做法:

w=trunc(iw*256/ih/2)*2
  • 1

否则会报错如下:

[libx264 @ 0xa3b85a0] height not divisible by 2 (256x369)
  • 1
3. 增加参数指定处理音频流的方式

由于视频中同时存在视频流和音频流,resize以后会重新编码,音频流也会受到影响,所以需要加参数来指定对音频流的处理:

-acodec copy
  • 1

否则报错如下:

Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
  • 1
4. -vf 参数中,iw,ih分别指输出视频的帧宽和帧高

查看支持的硬件加速

ffmpeg -hwaccels
  • 1
5. module ‘ffmpeg’ has no attribute ‘probe’
pip install ffmpeg-python
  • 1
6. 关于duration的问题(重要!!!)

一个视频的时长有4种,容器时长,视频流时长,音频流时长,解码后的视频时长,4者有时不一样;
解码后的视频时长是最准确的,但是需要先解码再得到时长,比较慢,因此预处理视频时可以用容器时长;
用ffmpeg-python的接口得到容器时长的方法是:

import ffmpeg

info = ffmpeg.probe(source_name)
duration = float(info['format']['duration'])
  • 1
  • 2
  • 3
  • 4
7. 报错:Too many packets buffered for output stream 0:0

该异常抛出的原因是有些视频数据有问题,导致视频处理过快,容器封装时队列溢出。
我们可以增大容器封装队列大小来解决,比如设置一下最大封装队列的大小为1024:
增加参数 -max_muxing_queue_size 1024:

ffmpeg -i vid_in.mp4 -max_muxing_queue_size 1024 vid_out.mp4
  • 1
8. 警告:More than 1000 frames duplicated

具体原因不明,但这个只是警告,其实不影响其他处理,可以暂时不用管【待解决,求指教】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/146972
推荐阅读
相关标签
  

闽ICP备14008679号