标签: video-processing

使用FFmpeg旋转视频

我一直试图找出如何使用FFmpeg旋转视频.我正在处理以纵向模式拍摄的iPhone视频.我知道如何使用MediaInfo(优秀的库,顺便说一句)确定当前的旋转度,但我现在卡在FFmpeg上.

根据我的阅读,您需要使用的是vfilter选项.根据我的看法,它应该是这样的:

ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4
Run Code Online (Sandbox Code Playgroud)

但是,我不能让这个工作.首先,-vfilters不再存在,它现在只是-vf.其次,我收到此错误:

No such filter: 'rotate'
Error opening filters!
Run Code Online (Sandbox Code Playgroud)

据我所知,我有一个FFmpeg的全选版本.运行ffmpeg -filters显示:

Filters:
anull            Pass the source unchanged to the output.
aspect           Set the frame aspect ratio.
crop             Crop the input video to x:y:width:height.
fifo             Buffer input images and send them when they are requested.
format           Convert the input video to one of the specified pixel formats.
hflip            Horizontally flip the input video.
noformat …
Run Code Online (Sandbox Code Playgroud)

ffmpeg rotation video-processing

395
推荐指数
8
解决办法
28万
查看次数

如何训练人工神经网络使用视觉输入玩暗黑破坏神2?

我正在努力让人工神经网络玩电子游戏,我希望能从这里的精彩社区获得一些帮助.

我已经确定了暗黑破坏神2.因此,游戏玩法是实时的,并且从等角度的角度来看,玩家控制着摄像机所在的单个化身.

为了使事情具体化,任务是获得你的角色x经验值,而不将其生命值降为0,通过杀死怪物获得经验值.以下是游戏玩法的示例:

这里

现在,由于我希望网络仅根据屏幕上的像素获得的信息进行操作,因此必须学习非常丰富的表示以便有效地发挥作用,因为这可能需要它(至少隐含地)知道如何将游戏世界划分为对象以及如何与它们进行交互.

所有这些信息都必须以某种方式传授给网络.我不能为我的生活想到如何培养这件事.我唯一的想法就是有一个单独的程序从屏幕上直观地从游戏中提取一些好的/坏的东西(例如健康,黄金,经验),然后在强化学习过程中使用该属性.我认为这将是答案的一部分,但我认为这还不够; 从原始视觉输入到目标导向行为的抽象层次太多,这种有限的反馈在我的一生中训练网络.

所以,我的问题是:你还有什么其他的方法来训练网络至少完成这项任务的某些部分?最好不要制作数千个带标签的例子......

只是为了更多方向:我正在寻找其他一些强化学习来源和/或任何用于在此设置中提取有用信息的无监督方法.或者,如果您可以想到一种将标记数据从游戏世界中取出而无需手动标记的方法,则可以采用监督算法.

UPDATE(04/27/12):

奇怪的是,我仍然在努力,似乎正在取得进展.让ANN控制器工作的最大秘诀是使用适合该任务的最先进的ANN架构.因此,我一直在使用一个深层次的信念网络,这是由我用无人监督的方式训练的因素条件限制Boltzmann机器(在我玩游戏的视频中),然后使用时间差异反向传播进行微调(即用标准进行强化学习)前馈人工神经网络.

仍在寻找更有价值的输入,特别是关于实时动作选择的问题以及如何编码用于ANN处理的彩色图像:-)

UPDATE(15年10月21日):

记得我在今天回答了这个问题,我想应该提一下,这不再是一个疯狂的想法.自从我上次更新以来,DeepMind发布了他们的自然论文,用于通过视觉输入获取神经网络来玩atari游戏.事实上,唯一阻止我使用他们的架构来玩,暗黑2的有限子集是缺乏对底层游戏引擎的访问.渲染到屏幕然后将其重定向到网络的速度太慢,无法在合理的时间内进行训练.因此,我们可能不会很快看到这种机器人在玩暗黑破坏神2,但这只是因为它会播放某些东西,无论是开源还是对渲染目标的API访问.(也许是地震?)

machine-learning video-processing computer-vision reinforcement-learning neural-network

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

适用于C#/ .NET的Solid FFmpeg包装器

我已经在网上搜索了一段时间,为C#/ .NET提供了一个可靠的 FFmpeg包装器.但我还没有想出一些有用的东西.我发现了以下三个项目,但是所有这些项目都在早期的alpha阶段就已经死了.

FFmpeg.NET
ffmpeg-sharp
FFLIB.NET

所以我的问题是,是否有人知道更成熟的包装项目?
我不是在寻找带有工作队列等的完整转码引擎.只是一个简单的包装器,所以我不必进行命令行调用,然后解析控制台输出,但可以进行方法调用并使用eventlisteners进行操作.

请随意提及任何活跃的项目,即使它们在早期阶段仍然存在.

.net c# video ffmpeg video-processing

81
推荐指数
5
解决办法
8万
查看次数

使用相同格式缩小视频大小并减小帧大小

这个问题可能非常基础

有没有办法减少有损压缩(WMV,MPEG)格式的帧大小/速率,以获得相同格式的较小尺寸的较小视频.

是否有任何开源或专有api?

compression video video-processing lossy-compression

71
推荐指数
3
解决办法
10万
查看次数

使用GStreamer编辑服务的过渡会冻结,但无需过渡即可正常工作

我正在尝试使用gstreamer的GStreamer编辑服务来连接2个视频,并在两者之间进行转换.

这个命令只是将两段视频连接在一起而没有过渡,工作正常:

ges-launch-0.10 vshort01.mov 0 5 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
Run Code Online (Sandbox Code Playgroud)

这是它的输出:

$ ges-launch-0.10 vshort01.mov 0 5 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
save_path: (null)
load_path: (null)
Adding file:///home/rory/vshort01.mov inpoint:0:00:00.000000000 duration:0:00:05.000000000
Adding file:///home/rory/vshort02.mov inpoint:0:00:05.000000000 duration:0:00:05.000000000
Done
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用此命令在两个视频之间进行短暂转换,它就会挂起.

ges-launch-0.10 vshort01.mov 0 5 +transition crossfade 2 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
Run Code Online (Sandbox Code Playgroud)

输出,我得到的是:

save_path: (null)
load_path: (null)
Adding file:///home/rory/vshort01.mov inpoint:0:00:00.000000000 duration:0:00:05.000000000
Adding <transition:crossfade> duration 0:00:02.000000000
Adding file:///home/rory/vshort02.mov inpoint:0:00:05.000000000 duration:0:00:05.000000000
Run Code Online (Sandbox Code Playgroud)

它挂起了.该文件/tmp/foo.mov保持0字节,并且没有CPU活动.

我是ges0.10-toolsubuntu 11.04 natty上的软件包版本0.10.1-1.我今天从git clone尝试了一个新构建的gst-editing-services版本c2668d058501513b734c8a8013a5e78c817712bb …

video ubuntu video-processing gstreamer

48
推荐指数
0
解决办法
1036
查看次数

从视频中提取特定帧的最快方法(PHP/ffmpeg/anything)

我有一个网页,其中(除其他外)需要从用户上传的视频中提取特定的框架.用户在播放器中寻找.mp4的特定部分,然后单击一个按钮,ajax调用被激活到一个PHP脚本,该脚本获取.mp4,以及视频的确切时间,并使用它来提取一个"缩略图"框架.

我目前的解决方案是使用php exec命令:

exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");

......效果很好,除了它和糖蜜一样慢.我的猜测是ffmpeg对于这项工作来说有点太多了,我可以通过利用底层库或其他东西做得更好......但是我不知道如何做到这一点.

理想情况下,我不想安装任何需要真正"安装过程"的东西......即,使用我的网络应用程序将可执行文件放入文件夹中很好,但我宁愿不必实际运行安装程序.此外,解决方案应该能够在mac,linux和windows上运行(尽管linux是首要任务).

我该怎么做才能加快这个过程?

谢谢.

php video mp4 ffmpeg video-processing

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

ffmpeg视频到opengl纹理

我正在尝试使用ffmpeg渲染帧并将其从视频转换为OpenGL纹理以放置在四边形上.我已经筋疲力尽了谷歌并没有找到答案,我找到了答案,但似乎没有一个有效.

基本上,我avcodec_decode_video2()用来解码帧然后sws_scale()将帧转换为RGB然后glTexSubImage2D()从它创建一个openGL纹理,但似乎无法使任何东西工作.

我确保"目标"AVFrame在SWS上下文设置中具有2维的功能.这是我的代码:

SwsContext *img_convert_ctx = sws_getContext(pCodecCtx->width,
                pCodecCtx->height, pCodecCtx->pix_fmt, 512,
                256, PIX_FMT_RGB24, SWS_BICUBIC, NULL,
                NULL, NULL);

//While still frames to read
while(av_read_frame(pFormatCtx, &packet)>=0) {
    glClear(GL_COLOR_BUFFER_BIT);

    //If the packet is from the video stream
    if(packet.stream_index == videoStream) {
        //Decode the video
        avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

        //If we got a frame then convert it and put it into RGB buffer
        if(frameFinished) {
            printf("frame finished: %i\n", number);
            sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

            glBindTexture(GL_TEXTURE_2D, texture);
            //gluBuild2DMipmaps(GL_TEXTURE_2D, …
Run Code Online (Sandbox Code Playgroud)

opengl textures ffmpeg video-processing render-to-texture

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

开源数字视频指纹识别

有没有开源数字视频指纹计划?

即:可以比较两个质量不同的视频文件,但表明它们属于同一事件,程序等的东西.

open-source image-comparison project video-processing

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

如何检测视频文件是以纵向方式录制还是以横向方式录制在iOS中

AlAssetsGroup enumerateAssetsAtIndexes用来列出照片(相机)应用程序中的资产.对于给定的视频资源,我想确定它是以纵向还是横向模式拍摄的.

在下面的代码,资产是一个AlAsset和我已经测试,看看它是否是一个视频资产[asset valueForProperty:ALAssetPropertyType]AlAssetTypeVideo,则:

int orientation = [[asset valueForProperty:ALAssetPropertyOrientation] intValue];
Run Code Online (Sandbox Code Playgroud)

在这种情况下orientation,总是0 ALAssetOrientationUp.也许这是预期的,所有视频都是正确的,但是纵向视频在MPEG-4中表示为90度旋转的景观视频(即所有视频实际上都是风景,如果不是,请尝试使用Mac上的MediaInfo应用程序相信我).

文件中的位置和/或如何在纵向握住手机时访问告诉我实际记录的信息?

考虑到资产的网址,我也尝试了这个:

AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
CGSize size = [avAsset naturalSize];
NSLog(@"size.width = %f size.height = %f", size.width, size.height);
CGAffineTransform txf = [avAsset preferredTransform];
NSLog(@"txf.a = %f txf.b = %f  txf.c = %f  txf.d = %f  txf.tx = %f  txf.ty = %f",
            txf.a, txf.b, txf.c, txf.d, txf.tx, txf.ty);
Run Code Online (Sandbox Code Playgroud)

这总是产生宽度>高度因此对于iPhone 4,宽度= 1280高度= 720并且变换a和d值是1.0,其他是 …

objective-c video-processing video-encoding ios

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

在ffmpeg中进行后处理以在MP4文件中移动'moov atom'(qt-faststart)

是否可以从命令行运行ffmpeg,它将'moov atom'元数据放在MP4文件的开头或运行qt-faststart作为ffmpeg中的后处理操作,这样生成的文件就可以通过互联网?

我当然可以将它作为一个单独的命令运行,但更喜欢它是某种东西

  • 作为ffmpeg中的选项,或
  • 作为转换后的一部分,通过ffmpeg转换视频文件时的命令行选项

编辑1

http://ffmpeg.org/ffmpeg.html#mov

MOV/MP4复用器

多路复用器选项包括:

'-moov_size字节'

Reserves space for the moov atom at the beginning of the file instead of 
placing the moov atom at the end. If the space reserved is insufficient, 
muxing will fail.
Run Code Online (Sandbox Code Playgroud)

mp4 ffmpeg video-processing video-streaming video-conversion

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