标签: video-processing

如何使用OS X中的shell脚本以编程方式将FLV视频文件转换为MP4?

我想批量转换包含数百个FLV文件的目录,以便每个文件都具有MP4等效项.我正在尝试通过编写shell脚本并从终端运行它来自动执行此过程.我该怎么做呢?大多数可用的指令都是针对使用ffmpeg的Linux,但我认为OS X没有它.谢谢.

unix macos shell video-processing transcoding

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

如何使用OpenCV在视频上查找对象

要跟踪视频帧上的对象,首先我从视频中提取图像帧并将这些图像保存到文件夹中.然后我应该处理这些图像以找到一个对象.实际上我不知道这是否是实用的,因为所有的算法都是一步完成的.它是否正确?

c++ opencv video-capture image-processing video-processing

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

如何使用VLC或FFMPEG命令行将外部音频轨道添加到视频文件

我想使用bash脚本将audio.mp3音轨添加到无声的video.mp4文件中,"cvlc""ffmpeg"命令行的正确语法是什么?

我用VLC和--no-audio选项录制了视频,因此没有可以从原始视频复制的比特率或编码等设置.

ffmpeg vlc video-processing audio-processing

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

在VTDecompressionSessionCreate中解码H264 VideoToolkit API失败,错误为-8971

我正在尝试使用硬件支持的视频工具包解码器编写视频解码器.但是,如果我尝试初始化解码会话,如下面发布的示例,我在调用VTDecompressionSessionCreate时收到错误-8971.谁能告诉我这里做错了什么?

感谢你并致以真诚的问候,

奥利弗

OSStatus status;

int tmpWidth = sps.EncodedWidth();
int tmpHeight = sps.EncodedHeight();
NSLog(@"Got new Width and Height from SPS - %dx%d", tmpWidth, tmpHeight);

const VTDecompressionOutputCallbackRecord callback = { ReceivedDecompressedFrame, self };
status = CMVideoFormatDescriptionCreate(NULL,
                                       kCMVideoCodecType_H264,
                                       tmpWidth,
                                       tmpHeight,
                                       NULL,
                                       &decoderFormatDescription);

if (status == noErr)
{
    // Set the pixel attributes for the destination buffer
    CFMutableDictionaryRef destinationPixelBufferAttributes = CFDictionaryCreateMutable(
                                                                 NULL, // CFAllocatorRef allocator
                                                                 0,    // CFIndex capacity
                                                                 &kCFTypeDictionaryKeyCallBacks, 
                                                                 &kCFTypeDictionaryValueCallBacks);

    SInt32 destinationPixelType = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
    CFDictionarySetValue(destinationPixelBufferAttributes,kCVPixelBufferPixelFormatTypeKey, CFNumberCreate(NULL, kCFNumberSInt32Type, &destinationPixelType));
    CFDictionarySetValue(destinationPixelBufferAttributes,kCVPixelBufferWidthKey, CFNumberCreate(NULL, kCFNumberSInt32Type, &tmpWidth)); …
Run Code Online (Sandbox Code Playgroud)

macos xcode video-processing h.264 ios

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

使用视频中的ffmpeg进行场景变换/镜头检测/图像提取

我正在尝试为视频获取有代表性的帧,以便删除可能出现在视频中的冗余帧.这是我用来获取帧的方法.

./ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png

我也试过了

./ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr thumb%04d.png

这方面的主要问题是模糊.如果我只是每5秒对帧进行一次采样,我看不到任何模糊,但是使用上面两个命令我会得到很多模糊.

该视频可在此处找到,http://www.cs.umd.edu/~bharat/video.mp4

为了每10秒对视频进行一次采样,我使用以下内容:

./ffmpeg -i video.mp4 -r 1/10 filename%03d.jpg

使用正常采样输出: 采样输出

使用select输出: 选择输出

但是,对于某些视频,正常采样可能不好,并且可能会创建冗余帧.有没有办法在ffmpeg中使用一些选项并获得没有这种模糊的帧?如果正常采样可以获得良好的帧,则附近应该存在没有模糊的帧.我已经查看了ffmpeg中的场景切换等选项,但我不熟悉将它们用于此应用程序.

video ffmpeg image-processing video-processing computer-vision

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

python脚本中的ffmpeg

我想在python脚本中运行以下命令,我还想让它循环遍历文件夹中的几个视频.这是我想要运行的命令.

ffmpeg -i mymovie.avi -f image2 -vf fps=fps=1 output%d.png

我希望适合这样的事情:

import ffmpy
import os

path = './Videos/MyVideos/'
for filename in os.listdir(path):
    name = filename.replace('.avi','')
    os.mkdir(os.path.join(path,name))
    *ffmpeg command here*
Run Code Online (Sandbox Code Playgroud)

我找到了一个名为ffmpy的ffmpeg包装器,这可能是一个解决方案吗?

python ffmpeg video-processing

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

编程屏幕录像机 - 输出问题

我想要记录屏幕(通过每秒捕获15个屏幕截图).这部分我知道怎么做.但我不知道如何将其写成一些流行的视频格式.我找到的最佳选择是将帧写入分离的PNG文件并使用命令行Mencoder,它可以将它们转换为多种输出格式.但也许有人有另一个想法?

要求:

  • 必须是多平台解决方案(我使用Free Pascal/Lazarus).Windows,Linux,MacOS
  • 存在一些图书馆吗?
  • 可能是复杂的命令行应用程序,它也为我记录屏幕,但我必须有可能编辑帧之前将整个原始数据转换为流行的视频格式
  • 所有能给我一些想法的材料都值得赞赏.API,图书馆,甚至除了FPC之外的任何其他语言(我会尝试重写它或找到一些等价物)
  • 我还考虑将帧写入视频RAW格式然后使用Mencoder(他可以处理它)或其他解决方案,但找不到任何用于视频RAW数据的API/doc

问候

delphi freepascal video-processing lazarus

8
推荐指数
1
解决办法
2378
查看次数

如何使用 NumPy 将 sRGB 转换为 NV12 格式?

NV12格式定义了具有 420 次采样的 YUV 颜色空间的特定颜色通道排序。
NV12格式主要用于视频编码/解码管道。

NV12 的 libyuv 描述

NV12 是一种双平面格式,具有全尺寸 Y 平面,后跟具有编织 U 和 V 值的单个色度平面。NV21 相同,但具有编织的 V 和 U 值。NV12中的12指的是每像素12位。NV12 具有半宽和半高色度通道,因此是 420 子采样。

在 NV12 上下文中,YUV 格式主要指YCbCr颜色空间。NV12 元素每个元素(类型)
有 8 位。 在帖子的上下文中,YUV 元素处于“有限范围”标准:Y 范围为 [16, 235],U,V 范围为 [16, 240]。 uint8

sRGB(标准红绿蓝)是 PC 系统使用的标准色彩空间。
在本文中,sRGB颜色分量范围为 [0, 255](uint8类型)。
RGB 元素排序与帖子无关(假设有 3 个颜色平面)。

目前至少有 2 种可能的 YCbCr 格式应用 NV12:

NV12 元件订购示例:
YYYYYY
YYYYYY …

python numpy image-processing video-processing nv12-nv21

8
推荐指数
1
解决办法
6838
查看次数

有什么方法可以加快 ffmpeg 的处理时间

我在处理过程中遇到了问题。我使用10美元的数字托管套餐中的真实联合服务器,并使用Amazon s3的云服务。问题是上传视频时,无论视频大小如何,无论其大小是 1 MB 还是 2 Giga。上传过程结束后,处理过程开始上传,没有问题但是当处理过程需要很长时间以至于我无法完成时,解决方案是什么,是我有问题还是这个过程普通的?我使用 laravel-ffmpeg 并通过 laravel 队列将视频切割成多种质量,我将在下面将代码附加给您。

public function handle()
{
    //180p
    $lowBitrate1 = (new X264('aac'))->setKiloBitrate(613);
    //270p
    $lowBitrate2 = (new X264('aac'))->setKiloBitrate(906);
    //360p
    $midBitrate1 = (new X264('aac'))->setKiloBitrate(1687);
    //540p
    $midBitrate2 = (new X264('aac'))->setKiloBitrate(2227);
    //720p
    $highBitrate1 = (new X264('aac'))->setKiloBitrate(4300);
    //1080
    $highBitrate2 = (new X264('aac'))->setKiloBitrate(7917);

FFMpeg::fromDisk('s3')
    ->open($this->movie->path)
    ->exportForHLS()
    ->onProgress(function ($percent) {
        $this->movie->update([
            'percent' => $percent
        ]);
    })
    ->setSegmentLength(10)// optional
    ->addFormat($lowBitrate1)
    ->addFormat($lowBitrate2)
    ->addFormat($midBitrate1)
    ->addFormat($midBitrate2)
    ->addFormat($highBitrate1)
    ->addFormat($highBitrate2)
    ->toDisk('s3')
    ->save("public/Movies/{$this->movie->id}/{$this->movie->id}.m3u8");
}//end of handle
Run Code Online (Sandbox Code Playgroud)

ffmpeg file-upload video-processing ffmpeg-php laravel

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

用python给视频添加字幕

我有一段人们说话的视频。我还有一份成绩单。我将单词分成句子,这样我就可以在屏幕上一次显示一个句子,就像电影中的普通字幕一样。为此,我创建了一个 csv,其中每个帧都有一行,并且每行都包含该句子时间块内的完整句子。这样,我循环遍历所有帧,并将该句子的文本放在该句子内的每个帧上。我是在 OpenCV 中做的。

\n

样本成绩单 csv:

\n
frame     sentence\n0           hello\n1           hello\n2           how are you\n3           how are you\n4           how are you\n5           how are you\n6           how are you\n7           how are you \n8           fine\n...\n
Run Code Online (Sandbox Code Playgroud)\n

csv 的长度与视频中的帧数相同。要绘制字幕,我这样做:

\n
import cv2\nimport pandas as pd\n\ndf = pd.read_csv('data.csv')\nvideo = cv2.VideoCapture('vid.mp4')\nnum_frames = video.get(cv2.CAP_PROP_FRAME_COUNT)\n\nassert len(df) == num_frames\n\nfor i in list(range(0, num_frames)):\n    ret, frame = video.read()\n    cv2.putText(frame, str(df.sentence), (0,50),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3, cv2.LINE_AA, True)\n\n    # additional standard cv2 code below...\n
Run Code Online (Sandbox Code Playgroud)\n

这可行,但现在我没有任何音频。我知道 OpenCV 不适用于任何音频,但是还有其他解决方法吗?这种方法在我的管道中效果很好,因此我希望能够将这些帧写入新视频,但保留音频,同时使用尽可能少的附加库。

\n

编辑 …

python video opencv video-processing

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