标签: video-processing

2160p、1440p、1080p...144p 到底是什么意思?

我需要用 2160p、1440p、1080p...144p 标记我收到的每个视频。但它的确切定义是什么?

\n\n

我知道维基百科的定义:

\n\n
2160p=3840x2160\n1440p=2560\xc3\x971440\n1080p=1920\xc3\x971080 \n720p=1280\xc3\x97720   \n480p=640\xc3\x97480    \n360p=480\xc3\x97360    \n240p=426\xc3\x97240    \n144p=256\xc3\x97144    \n
Run Code Online (Sandbox Code Playgroud)\n\n

好的,但是带有分配给视频的标签,例如1200x700720p480p?\n与 的分辨率相同,我是否需要指定或或1920x480的分辨率?480p720p1080p

\n

video video-capture video-processing video-streaming

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

在一个屏幕上合并 2 个图像输出(HDMI、DVI、VGA 或其他)

我正在寻找一些不常见的东西:一种允许将来自 2 个输出(HDMI、DVI、VGA 或任何其他类型的图像输出)的图像合并为屏幕上显示的最终图像的设备。输出可以是相同类型(例如2个HDMI)或不同类型,任何有效的都可以。如果不清楚,这里有一个简单的架构:

图像合并

它可以以不同的方式工作,例如使用优先级系统(例如,输出 1 写入其图像,输出 2 覆盖非透明像素),不太理想的是通过加法(例如,如果输出 1 上有一个红色像素 0xFF0000 和一个绿色像素)像素 0x00FF00 位于输出 2 上的同一位置,该像素变为黄色 0xFFFF00),或任何其他方法。

我检查了可用的设备,似乎没有一个能够做到这一点。另一种解决方案是拥有一台单独的计算机,能够从主计算机的输出捕获视频输入,进行合并操作并将图像发送到屏幕进行显示。我发现的视频捕获设备只有一个输入和一个输出来记录然后显示图像(这些通常是游戏流设备),并且不允许我实时合并图像。我也找不到用于具有多个输入的计算机的视频捕获卡,我可以用它来合并图像。

如果您对如何实现此目标有任何想法,请告诉我。

谢谢你,祝你过得愉快。

video video-capture video-processing video-streaming hdmi

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

python ffmpeg moovatom not found 处理输入时数据无效

我有一个进展,可以录制屏幕和麦克风中的音频,然后将视频和音频录制(.mp4 和 .wav)合并到一个 mkv 文件中。

我正在使用 python 3.6 和 ffmpeg 来实现这个目标。对于短视频(<20 秒),它可以工作,但对于较长的录制,它会显示以下错误消息:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55abb3a52540] moov atom not found
tmp/tmp_0.mp4: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)

完整输出:

ffmpeg version 3.3.7 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7 (GCC)
configuration: --prefix=/usr --bindir=/usr/bin -- 
datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg -- 
incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man -- 
arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp, 
-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp- 
buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat- 
hardened-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables' --extra- 
ldflags='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld ' -- 
extra-cflags='-I/usr/include/nvenc ' --enable-libopencore-amrnb -- 
enable- …
Run Code Online (Sandbox Code Playgroud)

python audio ffmpeg video-processing python-3.x

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

实时视频稳定 OpenCV

我在 OpenCV (cv::videostab) 中搜索了一个函数,它允许我实时进行视频稳定。但据我了解,OpenCV 尚不可用。因此 TwoPassStabilizer(OnePassStabilizer) 需要一次完整的视频,而不是两个连续的帧。

Ptr<VideoFileSource> source = makePtr<VideoFileSource>(inputPath); //it's whole video
TwoPassStabilizer *twopassStabilizer = new TwoPassStabilizer();
twoPassStabilizer->setFrameSource(source); 
Run Code Online (Sandbox Code Playgroud)

所以我必须在没有 OpenCV 视频稳定类的情况下做到这一点。这是真实的?

python opencv video-processing image-stabilization

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

写入视频后视频比特率降低

我正在尝试编写一个 python 函数,使用 moviepy 将一个视频中的视频添加到另一个视频(没有声音)。首先,我尝试了

clip = mpe.VideoFileClip(video-to-add-sound.mp4)
clip = clip.set_audio(mpe.AudioFileClip(video-that-has-sound.mp4))
Run Code Online (Sandbox Code Playgroud)

这没有任何作用。所以,我意识到我没有 write_videofile 来剪辑所以,我创建了一个函数

def addAudioBack(original_vid, processed_vid):

    clip = mpe.VideoFileClip(processed_vid)
    clip = clip.set_audio(mpe.AudioFileClip(original_vid))
    clip.write_videofile(processed_vid,codec='libx264')
Run Code Online (Sandbox Code Playgroud)

它将把original_vid 中的音频添加到processed_vid 中,并将旧的processed_vid 覆盖到具有orignal_vid 中音频的新音频。声音效果很好,但问题是我的视频比特率和数据率正在下降,这使得视频质量看起来更差。我尝试添加bitrate='3000k'到最后一行,但它不起作用。原版的速度约为3000kbps,但编辑后的速度降至约300kbps或以下。

附言。我编辑了最后一行,以免覆盖旧文件并写入新文件。比特率提高到大约 900kbps,但我想要的是与我的旧视频具有相似比特率的视频(将添加声音)

那么,我如何根据上述目的编写视频,使其与原始视频具有相同或几乎相同的比特率?

谢谢

python video-processing moviepy

5
推荐指数
0
解决办法
831
查看次数

如何从Android视频录制中实时捕获逐帧图像

我想从视频中获取实时帧。就像相机打开一样,我每秒获得帧数。

我还通过camera2 API浏览了谷歌视频捕获应用程序的示例https://github.com/googlesamples/android-Camera2Video ,但找不到任何这样的方法/方式。

我知道这是可能的,因为视频广播公司和像 Snapchat 这样进行实时视频处理的应用程序必须做这样的事情。

我还需要 30 帧/秒。

java android video-capture video-processing kotlin

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

使用 PyAV 将视频直接读入 Numpy(无迭代)

是否可以使用 PyAV 将视频直接读入 3D Numpy?目前,我正在循环每一帧:

i = 0
container = av.open('myvideo.avi')
for frame in container.decode(video=0):
    if i == 0: V = np.array(frame.to_ndarray(format='gray'))
    else: V = np.dstack((V, np.array(frame.to_ndarray(format='gray'))))
    i += 1
Run Code Online (Sandbox Code Playgroud)

第一帧定义了一个2D Numpy数组(i=0);每个后续帧 (i>0) 都使用 堆栈到第一个数组上np.dstack。理想情况下,我想一次性将整个视频读入 3D Numpy 灰度帧数组。

python numpy video-processing python-3.x pyav

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

Swift:使用 AVAssetExportSession() 连续合并视频

我有一组存储为 AVURLAsset 的视频录制,我想将视频合并到 1 个剪辑中,以便它们连续播放,视频之间没有时间间隔。下面是我希望做的,但它只显示第一个视频。注意:我希望视频连续播放,并且每个视频之间没有空白。例如,如果当手机未录音时,录音 1 和录音 2 之间存在实时时间,则输出不应显示此情况。

感谢您的帮助!

func mergeVideos(handler: @escaping (_ asset: AVAssetExportSession)->()) {
    let mixComposition = AVMutableComposition()
    var videoTime = CMTime.zero
    for video in self.recordings {

        let tracks = video.tracks(withMediaType: .video)
        let videoTrack = tracks[0]
        let videoTimeRange = CMTimeRangeMake(start: .zero, duration: video.duration)
        guard let compositionVideoTrack: AVMutableCompositionTrack = mixComposition.addMutableTrack(withMediaType: .video, preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) else { return }
        do {
            try compositionVideoTrack.insertTimeRange(videoTimeRange, of: videoTrack, at: videoTime)
            videoTime = CMTimeAdd(videoTime, video.duration)
        } catch {
            print("An error occurred")
            return
        }
    } …
Run Code Online (Sandbox Code Playgroud)

xcode video-processing avassetwriter avassetexportsession swift

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

ffmpeg 质量转换选项(视频压缩)

-q:v 1您能否提供ffmpeg 中处理视频/图像质量和压缩的参数的链接或解释。

让我解释...

for f in *
   do 
     extension="${f##*.}"
     filename="${f%.*}"
     ffmpeg -i "$f" -q:v 1 "$filename"_lq."$extension"
     rm -f "$f"
   done
Run Code Online (Sandbox Code Playgroud)

上面的ffmpegfor循环压缩工作目录中的所有图像和视频,它基本上会降低质量,从而导致文件大小变小(期望的结果)。

我对-q:v 1这个for循环的论证最感兴趣。参数1中的-q:v 1控制压缩量。但我找不到任何描述如何更改 的值1以及描述其作用的文档。是百分比吗?乘数?如何调节这个旋钮?我可以/应该使用负值吗?仅整数?最小值/最大值?ETC。

我从官方文档开始,但我能找到的最好的内容是关于视频质量的部分,并且-q标志描述很少。

-frames[:stream_specifier] 帧计数(输出,每个流)
在帧计数帧之后停止写入流。

-q[:stream_specifier] q(输出,每个流)

-qscale[:stream_specifier] q(输出,每个流)
使用固定质量比例 (VBR)。q/qscale 的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,那么它仅适用于视频流,这是为了保持与以前的行为的兼容性,并且为2个不同的编解码器(音频和视频)指定相同的编解码器特定值通常不是没有stream_specifier时的预期目的用来。

linux compression ffmpeg video-processing video-compression

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

PHP和FFMPEG - 执行智能视频转换

我有一项奇怪的艰巨任务.我觉得这很容易,但我所有的努力都没有结果.

我正在将上传到php脚本的视频从各种格式(.avi,.mpg,.wmv,.mov等)转换为单个.flv格式.转换效果很好,但我遇到的问题是视频的分辨率.

这是我正在运行的命令(使用PHP vars):

ffmpeg -i $original -ab 96k -b 700k -ar 44100 -s 640x480 -acodec mp3 $converted

$ original和$ converted都包含这些文件的完整路径.我的问题是,即使源较小,它总是转换为640x480(就像我告诉它).显然,这是在下载视频时浪费磁盘空间和带宽.此外,这并不考虑输入视频是否为4:3以外的任何宽高比,如果我上传16:9视频,则会导致"压缩"转换.

我需要做三件事:

  1. 确定原始视频的宽高比.
  2. 如果不是4:3,则用黑色条填充顶部和底部.
  3. 如果原件的尺寸较大或与原件的宽度/高度相关的4:3宽高比(以较接近640x480为准),则转换为640x480.

我已经播放ffmpeg -i了一些视频,但是我没有看到一致的格式或位置来查找原始分辨率.一旦我能够弄清楚,我知道我可以"做数学"来找出正确的大小并指定填充以使用-padttop,-padbottom等来修复宽高比.

php ffmpeg video-processing

4
推荐指数
1
解决办法
8448
查看次数