我的问题 :
我正在研究我的计算机视觉项目。我使用 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) 我正在尝试使用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)
有谁知道如何做到这一点?
谢谢!
我正在使用 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
我的任务涉及使用 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()
我运行此命令,以便能够将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 中设置用户代理?
我在媒体服务器中实现了 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)