- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 python 为 Windows 开发屏幕录像机,但由于某种原因,我无法录制超过 10 秒的视频。但是我可以录制超过 10 秒的音频。
我也在使用:
FFMPEG - 录制带有 mp4 扩展名的视频
PYAUDIO - 录制声音
TKINTER - 设计 GUI
由于问题出在视频录制上,因此我将保留与 ffmpeg 一起使用的代码:
"""
cmdGen.py generates ffmpeg commands to record your screen
"""
import os
class cmdGen:
def __init__(self):
self.fps = 60
self.source = "desktop"
self.encoder = 'mpeg4'
self.hwaccel = None
self.drawMouse = 1
self.enableWebcam = False
self.audList = 0
def config(self,
fps=None,source=None,encoder=None,
hwaccel='unchanged',drawMouse=None,
webcam=None,audList=None):
if fps: self.fps = fps
if source: self.source = source
if encoder: self.encoder = encoder
if hwaccel != 'unchanged': self.hwaccel = hwaccel
if drawMouse: self.drawMouse = 0 if not self.drawMouse else 1
if webcam: self.enableWebcam = bool(webcam)
if audList: self.audList = audList
def setSource(self,isWindow,windowName=""):
if not isWindow:
self.source = "desktop"
else:
self.source = "title="+windowName
def setFps(self,fps):
self.fps = fps
def setEncode(self,encoder):
self.encoder = encoder
def getCmd(self,filename):
print("ACK")
finalCmd = ["ffmpeg.exe","-f","gdigrab"]
finalCmd.extend(['-i',self.source])
finalCmd.extend(['-framerate',str(self.fps)])
finalCmd.extend(['-c:v',self.encoder])
if self.encoder == 'mpeg4':
finalCmd.extend(['-q:v','7'])
if self.hwaccel:
finalCmd.extend(['-hwaccel',self.hwaccel])
finalCmd.extend(['-draw_mouse',str(self.drawMouse)])
finalCmd.extend(["-y", filename])
print(finalCmd)
return finalCmd
def getCvtCmd(self,filename):
# if self.rcchecked.get():
# self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav','-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] overlay=0:0 [out]',"-shortest",'-map','[out]','-y',"ScreenCaptures/"+self.filename])
# else:
# self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav',"-shortest",'-y',"ScreenCaptures/"+self.filename], startupinfo=startupinfo)
print("ACK")
finalCmd = ["ffmpeg.exe"]
finalCmd.extend(['-i','tmp/tmp.mkv'])
for i in range(len(self.audList)):
finalCmd.extend(['-i','tmp/tmp_'+str(i)+'.wav'])
if len(self.audList) > 0:
finalCmd.extend(['-filter_complex','amerge=inputs='+str(len(self.audList)),'-ac',str(len(self.audList))])
# finalCmd.extend(['-c:v',self.encoder])
if self.enableWebcam:
finalCmd.extend(['-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] '
'overlay=0:0 [out]','-map','[out]'])
#finalCmd.extend(['-shortest'])
finalCmd.extend(["-y", filename])
print(finalCmd)
return finalCmd
if __name__ == "__main__":
cg = cmdGen()
cg.setEncode("h264_nvenc")
cg.setFps(60)
cg.setSource(False)
print(cg.getCmd("tmp"))
C:\Users\FabianoFreitas\AppData\Local\Programs\Python\Python37\python.exe C:/Users/FabianoFreitas/Desktop/PowerShare-v2.0/screenRecorder.py
ACK
['ffmpeg.exe', '-f', 'gdigrab', '-i', 'desktop', '-framerate', '60', '-c:v', 'mpeg4', '-q:v', '7', '-draw_mouse', '1', '-y', 'tmp/tmp.mkv']
* recording
ACK
['ffmpeg.exe', '-i', 'tmp/tmp.mkv', '-i', 'tmp/tmp_0.wav', '-filter_complex', 'amerge=inputs=1', '-ac', '1', '-y', 'Videos/ScreenCapture24.mp4']
* done recording
ffmpeg version git-2020-02-05-e6891d1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 39.100 / 56. 39.100
libavcodec 58. 67.101 / 58. 67.101
libavformat 58. 37.100 / 58. 37.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 74.100 / 7. 74.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, matroska,webm, from 'tmp/tmp.mkv':
Metadata:
ENCODER : Lavf58.37.100
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], 29.97 fps, 29.97 tbr, 1k tbn, 30k tbc (default)
Metadata:
ENCODER : Lavc58.67.101 mpeg4
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, wav, from 'tmp/tmp_0.wav':
Duration: 00:01:09.08, bitrate: 1411 kb/s
Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
Stream #1:0 (pcm_s16le) -> amerge (graph 0)
amerge (graph 0) -> Stream #0:0 (aac)
Stream #0:0 -> #0:1 (mpeg4 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[Parsed_amerge_0 @ 00000218cb4c1640] No channel layout for input 1
[libx264 @ 00000218cb4acdc0] using SAR=1/1
[libx264 @ 00000218cb4acdc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000218cb4acdc0] profile High, level 5.0, 4:2:0, 8-bit
[libx264 @ 00000218cb4acdc0] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'Videos/ScreenCapture24.mp4':
Metadata:
encoder : Lavf58.37.100
Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s
Metadata:
encoder : Lavc58.67.101 aac
Stream #0:1: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
Metadata:
encoder : Lavc58.67.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[matroska,webm @ 00000218cb44af00] File ended prematurely
frame= 297 fps=113 q=-1.0 Lsize= 2325kB time=00:01:09.07 bitrate= 275.8kbits/s dup=22 drop=0 speed=26.2x
video:1713kB audio:591kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.900237%
[aac @ 00000218cb4ab780] Qavg: 24995.135
[libx264 @ 00000218cb4acdc0] frame I:4 Avg QP:15.13 size:199596
[libx264 @ 00000218cb4acdc0] frame P:85 Avg QP:21.15 size: 9466
[libx264 @ 00000218cb4acdc0] frame B:208 Avg QP:24.93 size: 725
[libx264 @ 00000218cb4acdc0] consecutive B-frames: 5.1% 2.7% 6.1% 86.2%
[libx264 @ 00000218cb4acdc0] mb I I16..4: 48.0% 45.3% 6.7%
[libx264 @ 00000218cb4acdc0] mb P I16..4: 1.6% 1.9% 0.8% P16..4: 1.4% 0.4% 0.3% 0.0% 0.0% skip:93.7%
[libx264 @ 00000218cb4acdc0] mb B I16..4: 0.1% 0.1% 0.0% B16..8: 3.0% 0.1% 0.0% direct: 0.0% skip:96.6% L0:51.2% L1:48.3% BI: 0.6%
[libx264 @ 00000218cb4acdc0] 8x8 transform intra:44.4% inter:69.1%
[libx264 @ 00000218cb4acdc0] coded y,uvDC,uvAC intra: 23.8% 27.4% 19.5% inter: 0.2% 0.3% 0.1%
[libx264 @ 00000218cb4acdc0] i16 v,h,dc,p: 54% 45% 1% 0%
[libx264 @ 00000218cb4acdc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 20% 41% 2% 2% 1% 2% 1% 5%
[libx264 @ 00000218cb4acdc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 35% 17% 2% 3% 3% 4% 2% 4%
[libx264 @ 00000218cb4acdc0] i8c dc,h,v,p: 61% 25% 11% 2%
[libx264 @ 00000218cb4acdc0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 00000218cb4acdc0] ref P L0: 68.0% 6.3% 16.6% 9.1%
[libx264 @ 00000218cb4acdc0] ref B L0: 70.2% 23.7% 6.1%
[libx264 @ 00000218cb4acdc0] ref B L1: 91.1% 8.9%
[libx264 @ 00000218cb4acdc0] kb/s:1415.80
最佳答案
看起来您忘记了从 Python 代码执行命令。
要录制 50 秒,您可以使用以下代码:
cmd = cg.getCmd("tmp.mkv")
try:
proc = subprocess.call(cmd, timeout=50)
except subprocess.TimeoutExpired:
print('\n\nDone!')
print(cg.getCmd("tmp"))
之后,它正在记录 50 秒到
tmp.mkv
.
-t 50
FFmpeg
的参数用于记录 50 秒的命令行(并设置更大的超时时间)。
关于python - FFMPEG - 为什么我不能录制超过 10 秒的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170005/
我正在尝试解决 A/V 同步问题。视频将比音频延迟 1 秒。 (请看我下面的注释) 来自 Android 媒体框架部分, 我可以延迟音频时间戳让它与视频同步,我应该从哪里开始?是音频源吗? MPEG4
我正在使用带有 SignalR 的 MassTransit 请求和响应。该网站向创建文件的 Windows 服务发出请求。创建文件后,Windows 服务会将响应消息发送回网站。该网站将打开该文件并使
我正在尝试创建一个允许用户发出一些声音的应用程序,然后以回放方式使用它。 我想让我的应用程序播放用户将记录的.wav文件。 由于不断出现错误,我在弄清楚如何编写此代码时遇到了麻烦。 ====
有没有办法禁止网页上视频的屏幕共享? 例如,当您尝试录制或屏幕共享(例如通过 Skype)Netflix 视频时,它仅显示黑屏并且没有音频。 我的问题是,他们是如何实现的?我只能想到JavaScrip
我正在尝试使用 html5 .getUserMedia 录制视频,然后在不上传到服务器的情况下再次播放。我尝试了很多教程,我通过使用 canvas 绘制 webp 图像然后使用 Whammy.js 转
我想为我的网站的用户实现屏幕录制功能。这将适用于便士拍卖风格的网站,以便用户可以记录他们的出价,并在拍卖出现问题时提供证据。 这是在线录音机的演示。 http://www.screentoaster.
所以在我的应用程序中,我尝试使用屏幕截图“记录”屏幕。我必须将这些单独的帧作为图像,因为它们稍后会在服务器上进行修改和组合。增加这种复杂性的是,它是在使用 Cocos2D 的慢节奏游戏中。我目前截屏的
是否可以使用单个 ffmpeg 命令同时捕获(记录)RTSP 流和捕获场景变化事件?我几乎可以做我想做的事: ffmpeg -i 'rtsp://mystream' \ -map 0:v -map 0
我是 Objective-c 和 iPhone 编程新手,但我正在开发一个自学应用程序。我一直在尝试弄清楚如何在 iPhone 上录制声音。 Apple 提供了使用 AVAudioRecorder 从
我无法写任何东西来允许这样做,但我希望有人能指出我找到可以做到这一点的代码的正确方向。我擅长 HTML 和 CSS,对 JS 非常陌生。 我需要的是能够使用我的麦克风在单页网站上讲话,并将其流回。这样
想象一下您在浏览器中观看体育赛事直播。这意味着您收到了视频流,对吗?我需要记录这个流并保存到磁盘。问题是我不知道从哪里开始。我对编程并不陌生,但在视频直播方面有一些经验。我看到这个问题分为以下几个部分
我在开始录制时遇到文件未找到异常。此外,我无法在 JMeter 可安装文件夹中找到 RootCA 证书。 最佳答案 根据 TestRecording210 JMeter Wiki 页面当用户(您在其下
我有这个源代码可以在浏览器中录制音频。 Record.js 调用另一个脚本提供录音并将其保存到服务器。 index.html record.js //starts by click on butt
我允许用户按下按钮以通过 SoundPool 播放声音。是否可以录制 SoundPool 正在播放的任何内容,以便用户可以录制一系列声音? 最佳答案 实际上不可能捕捉到播放的声音。我也有同样的愿望,但
我正在尝试使用 xcrun simctl io booted recordVideo recording.mov 录制我的 iOS 11.4 模拟器的屏幕。这将创建一个具有该名称的文件,但不幸的是该文
好的,我将尝试尽可能清楚地说明我的问题,但我很困惑,所以如果我没有传达信息,请告诉我。 我正在尝试使用 getUserMedia 来使用网络摄像头,然后使用这个 http://www.w3.org/T
是否可以使用 html5 录制声音?我已经下载了最新的 canary 版本的 chrome 并使用以下代码: navigator.getUserMedia = navigator.webkitGetU
很多人都在问这个,似乎没有人有答案,所以我也没有。 某些应用程序如何提供记录android系统音频输出的功能?我发现的所有内容都是在 1432 个不同站点上的相同教程,您可以在其中记录 MIC 输入。
不小心撞到了qq而不是 @q ,我的 vim 现在正在记录到寄存器 q . 如果我输入 q再次,它将覆盖以前录制的宏。 有没有办法 取消录制以免覆盖之前的宏或 恢复之前的宏而不从头开始重新录制? 最佳
当我们接到电话时,我们会向来电者播放提示,内容类似于“我们可能会出于质量和培训目的记录通话”。 我们为响应来电而发送的 TWiML 如下所示。 http://domain.tld/may_r
我是一名优秀的程序员,十分优秀!