标签: pyffmpeg

如何使 cv2.videoCapture.read() 更快?

我的问题 :

我正在研究我的计算机视觉项目。我使用 opencv(4.1.2) 和 python 来实现它。

我需要一种更快的方法将读取帧传递到我的计算机上的图像处理(Ubuntu 18.04 8 核 i7 3.00GHz 内存 32GB)。读取cv2.VideoCapture.read()帧(帧大小:720x1280)大约需要120~140ms。这太慢了。我的处理模块每次运行大约需要 40 毫秒。我们希望 25~30 FPS。

这是到目前为止我的演示代码:

import cv2
from collections import deque
from time import sleep, time
import threading


class camCapture:
    def __init__(self, camID, buffer_size):
        self.Frame = deque(maxlen=buffer_size)
        self.status = False
        self.isstop = False
        self.capture = cv2.VideoCapture(camID)


    def start(self):
        print('camera started!')
        t1 = threading.Thread(target=self.queryframe, daemon=True, args=())
        t1.start()

    def stop(self):
        self.isstop = True
        print('camera stopped!')

    def getframe(self):
        print('current buffers : ', len(self.Frame))
        return …
Run Code Online (Sandbox Code Playgroud)

multithreading opencv ffmpeg python-3.x pyffmpeg

9
推荐指数
1
解决办法
2万
查看次数

如何通过传递文件对象(而不是位置到磁盘上的文件)来使用ffmpeg和Python

我正在尝试使用ffmpeg和Python的子进程模块来转换一些音频文件.我从URL中获取音频文件,并希望能够将Python文件对象传递给ffmpeg,而不是先将它们保存到磁盘.如果我能够取回文件流而不是让ffmpeg将输出保存到文件中,那也是非常好的.

作为参考,这就是我现在正在做的事情:

tmp = "/dev/shm"
audio_wav_file = requests.get(audio_url)
##              ##                         ##
## This is what I don't want to have to do ##
wavfile = open(tmp+filename, 'wrb')   
wavfile.write(audio_wav_file.content)
wavfile.close()
##              ##                         ##
conversion = subprocess.Popen('ffmpeg -i "'+tmp+filename+'" -y "'+tmp+filename_noext+'.flac" 2>&1', shell = True, stdout = subprocess.PIPE).stdout.read()
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

谢谢!

python subprocess ffmpeg pyffmpeg

7
推荐指数
1
解决办法
5772
查看次数

FFmpeg:录制屏幕但只记得最后5分钟?

我正在使用 Ffmpeg 在我的电脑上连续录制屏幕上的视频。然而,我只需要视频的最后 5 分钟。

是的,我可以稍后编辑视频。但这些录制会话可能会持续几个小时并占用大量硬盘空间。

有没有办法只记住视频捕获的最后 5 分钟并忘记保存文件之前的所有内容?(有点像TiVO)

我发现了

-fs limit_size
Run Code Online (Sandbox Code Playgroud)

-timelimit duration
Run Code Online (Sandbox Code Playgroud)

..但是一旦达到限制,这些似乎就会停止。也许有一个反向开关?喜欢只保留最后 1000000 字节之类的。

ffmpeg video-capture screen-capture video-streaming pyffmpeg

6
推荐指数
1
解决办法
3359
查看次数

我可以将图像列表传递到ffmpeg-python的输入法中吗

我的任务涉及使用 ffmpeg 从图像序列创建视频。下面的代码解决了这个问题。

import ffmpeg

video = ffmpeg.input('/path/to/images/*.jpg', pattern_type='glob',framerate=20).output(video.mp4).run()
Run Code Online (Sandbox Code Playgroud)

然而,由于我们获得的图像数据遵循以下模式

1.jpg,
2.jpg,
3.jpg
.
.
20.jpg
.
.
100.jpg
Run Code Online (Sandbox Code Playgroud)

该视频是使用 glob 模式创建的,1.jpg, 100.jpg, 11.jpg, 12.jpg, ... 2.jpg, 20.jpg, 21.jpg ... 观看起来非常不愉快。

无论如何,我是否可以传递一个列表或除路径/全局模式之外的其他任何内容,其中图像按顺序排序。另外,如果我可以选择将哪些文件添加为输入法,我会很高兴input()

python video ffmpeg pyffmpeg

6
推荐指数
1
解决办法
4733
查看次数

ffmpeg从具有多个通道的输入输出单独的通道

我运行此命令,以便能够将udp直播流传输到可以使用正在构建的移动应用程序播放的http直播流.它只是一个只有音频流的流.

ffmpeg -i udp:// @ localhost:1111 -map 0: http:// localhost:8090/feed1.ffm

Input #0, mpegts, from 'udp://@localhost:1111':
  Duration: N/A, start: 54616.264622, bitrate: 768 kb/s
  Program 1
    Metadata:
  service_name    : Service 1
  service_provider: TLK
    Stream #0:0[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 96 kb/s
  Program 2
Metadata:
  service_name    : Service 2
  service_provider: TLK
Stream #0:1[0x111]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 96 kb/s
 Program 3
Metadata:
  service_name    : Service 3
  service_provider: TLK
Stream #0:2[0x121]: Audio: mp2 ([3][0][0][0] …
Run Code Online (Sandbox Code Playgroud)

ffmpeg pyffmpeg android-ffmpeg

5
推荐指数
1
解决办法
656
查看次数

在 ffmpeg 中设置用户代理

如何在 ffmpeg 中设置用户代理?

我在媒体服务器中实现了 SWF 验证,并允许一些用户代理不检查 SWF。但问题是,我无法在 FFMPEG 中设置用户代理。因为我需要使用 ffmpeg 以低比特率将我的一个流重新发布到核心服务器。

FFMPEG Version : ffmpeg version 1.2.6-7:1.2.6-1~trusty1

SWF verification enabled in 172.20.1.10 server
Run Code Online (Sandbox Code Playgroud)

尝试过的格式:

ffmpeg -re -i "rtmp://10.11.12.13/live/mystreams -c copy -f flv  "rtmp://172.20.1.10/live/testnew -headers "UserAgent: 'FMLE/3.0 (compatible; FMSc/1.0)'"

ffmpeg -re -i "rtmp://10.11.12.13/live/mystreams -c copy -f flv  "rtmp://172.20.1.10/live/testnew -user_agent 'FMLE/3.0 (compatible; FMSc/1.0)'"

ffmpeg -re -i "rtmp://10.11.12.13/live/mystreams -c copy -f flv  "rtmp://172.20.1.10/live/testnew -user-agent 'FMLE/3.0 (compatible; FMSc/1.0)'"
Run Code Online (Sandbox Code Playgroud)

ffmpeg pyffmpeg

5
推荐指数
3
解决办法
2万
查看次数