我一直试图找出如何使用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) 我正在努力让人工神经网络玩电子游戏,我希望能从这里的精彩社区获得一些帮助.
我已经确定了暗黑破坏神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
我已经在网上搜索了一段时间,为C#/ .NET提供了一个可靠的 FFmpeg包装器.但我还没有想出一些有用的东西.我发现了以下三个项目,但是所有这些项目都在早期的alpha阶段就已经死了.
FFmpeg.NET
ffmpeg-sharp
FFLIB.NET
所以我的问题是,是否有人知道更成熟的包装项目?
我不是在寻找带有工作队列等的完整转码引擎.只是一个简单的包装器,所以我不必进行命令行调用,然后解析控制台输出,但可以进行方法调用并使用eventlisteners进行操作.
请随意提及任何活跃的项目,即使它们在早期阶段仍然存在.
这个问题可能非常基础
有没有办法减少有损压缩(WMV,MPEG)格式的帧大小/速率,以获得相同格式的较小尺寸的较小视频.
是否有任何开源或专有api?
我正在尝试使用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 …
我有一个网页,其中(除其他外)需要从用户上传的视频中提取特定的框架.用户在播放器中寻找.mp4的特定部分,然后单击一个按钮,ajax调用被激活到一个PHP脚本,该脚本获取.mp4,以及视频的确切时间,并使用它来提取一个"缩略图"框架.
我目前的解决方案是使用php exec命令:
exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");
......效果很好,除了它和糖蜜一样慢.我的猜测是ffmpeg对于这项工作来说有点太多了,我可以通过利用底层库或其他东西做得更好......但是我不知道如何做到这一点.
理想情况下,我不想安装任何需要真正"安装过程"的东西......即,使用我的网络应用程序将可执行文件放入文件夹中很好,但我宁愿不必实际运行安装程序.此外,解决方案应该能够在mac,linux和windows上运行(尽管linux是首要任务).
我该怎么做才能加快这个过程?
谢谢.
我正在尝试使用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) 有没有开源数字视频指纹计划?
即:可以比较两个质量不同的视频文件,但表明它们属于同一事件,程序等的东西.
我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,其他是 …
是否可以从命令行运行ffmpeg,它将'moov atom'元数据放在MP4文件的开头或运行qt-faststart作为ffmpeg中的后处理操作,这样生成的文件就可以通过互联网?
我当然可以将它作为一个单独的命令运行,但更喜欢它是某种东西
编辑1
http://ffmpeg.org/ffmpeg.html#mov
MOV/MP4复用器
多路复用器选项包括:
'-moov_size字节'
Run Code Online (Sandbox Code Playgroud)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.
mp4 ffmpeg video-processing video-streaming video-conversion
video-processing ×10
ffmpeg ×5
video ×4
mp4 ×2
.net ×1
c# ×1
compression ×1
gstreamer ×1
ios ×1
objective-c ×1
open-source ×1
opengl ×1
php ×1
project ×1
rotation ×1
textures ×1
ubuntu ×1