我想在Gstreamer中播放mp4视频,但是我找不到x264dec的错误.我写了这个管道
gst-launch filesrc \
location=/media/thesis/Gstreamer/pub_Irma.mp4 \
! qtdemux name=demux demux. ! queue ! faad \
! audioconvert ! audioresample ! autoaudiosink demuxer. \
! queue ! x264dec ! ffmpegcolorspace ! autovideosink
Run Code Online (Sandbox Code Playgroud)
在此步骤之后,我的目标是生成mp4视频解码的执行跟踪.我不知道x264dec的问题在哪里.
我有一段代码,它采用图像流并使用x264将它们写入文件进行编码和avconv.相关位如下
// Setup encoder
sprintf(cmd, "avconv -i pipe: -vcodec copy %s", filename);
fp = popen(cmd, "w");
x264_param_default_preset(¶ms, "ultrafast", "stillimage,zerolatency");
params.i_fps_num = fps;
params.i_fps_den = 1;
x264_picture_alloc(&in, X264_CSP_I420, width, height);
params.i_csp = X264_CSP_I420;
in.img.i_csp = X264_CSP_I420;
x.params.b_vfr_input = 0;
in.i_pts = -1;
out.i_pts = -1;
params.i_width = width;
params.i_height = height;
encoder = x264_encoder_open(¶ms);
in.img.i_plane = 1;
in.img.i_stride[0] = width;
ret = x264_encoder_headers(encoder, &nals, &nheader);
header_size = nals[0].i_payload + nals[1].i_payload + nals[2].i_payload;
fwrite(nals[0].p_payload, header_size, 1, fp);
...
// Loop body
++in.i_pts; …Run Code Online (Sandbox Code Playgroud) 我正在处理的iPhone应用程序在特定的用户定义的时间间隔内捕获图像,我正在寻找一种方法将这些图像组合成H264编码的视频.我已经对谷歌进行了一些研究,看起来我将不得不在iPhone上使用像ffmpeg/mencoder这样的东西?(还发现有人将ffmpeg移植到iPhone,ffmpeg4iPhone)
但是,我发现x264是GPL许可证,如果我使用ffmpeg,则需要我开源我的项目.还发现有人建议使用Ogg Theora,但如果我使用它,我需要将它移植到iPhone.(我不知道现在该怎么做).
这有什么解决方法吗?有任何想法吗?谢谢.
我在使用 opencv2.3.1 VideoWriter 编写玩具示例视频时遇到问题,这是我的做法:
writer = cv2.VideoWriter('test1.avi',cv.CV_FOURCC('P','I','M','1'),25,(640,480))
for i in range(1000):
x = np.random.randint(10,size=(480,640)).astype('uint8')
writer.write(x)
#del writer (with or without tested)
Run Code Online (Sandbox Code Playgroud)
如果扩展名是 mpg,我尝试了所有可能的组合,结果是 0 字节的文件,如果是 avi,则是 5.5kb。我应该说有些人指出我应该从源代码构建 ffmpeg 库,而不是 apt-get 它。好吧,我在本网站http://vinayhacks.blogspot.com/2011/11/installing-opencv-231-with-ffmpeg-on-64.html的帮助下在一台新机器上做到了这一点 。编译opencv时也出现错误(该错误与ffmpeg有关)。现在我真的没有想法了,如何使用 OPENCV 生成视频?
提前致谢
我遇到了一个奇怪的问题.我试着安装x264.运行sudo ./configure --enable-shared时,它给出了:
找不到汇编程序最低版本是yasm-0.7.0如果你真的想在没有asm的情况下编译,请使用--disable-asm进行配置.
但我已经安装了yasm-0.7.0,以证明,我运行yasm --version,它给出了:
*yasm 0.7.0.2066编译于2012年5月8日.版权所有(c)2001-2008 Peter Johnson和其他Yasm开发人员.运行yasm --license以获取许可概述和摘要.*
我将yasm安装到/ usr/local/yasm,为什么找不到yasm?
我一直在尝试编写一个派生自Live555中FramedSource的类,它允许我将实时数据从我的D3D9应用程序传输到MP4或类似程序.
我每帧做的是将后备缓冲区作为纹理抓取到系统内存中,然后将其从RGB - > YUV420P转换,然后使用x264对其进行编码,然后理想地将NAL数据包传递到Live555.我创建了一个名为H264FramedSource的类,它基本上是通过复制DeviceSource文件从FramedSource派生的.我没有将输入作为输入文件,而是将其作为NAL数据包,我更新了每个帧.
我对编解码器和流媒体都很陌生,所以我可能做的一切都完全错了.在每个doGetNextFrame()中,我应该抓住NAL数据包并执行类似的操作
memcpy(fTo, nal->p_payload, nal->i_payload)
Run Code Online (Sandbox Code Playgroud)
我假设有效载荷是我的帧数据,以字节为单位?如果有人从FramedSource那里得到一个类的例子,它可能至少接近我想要做的事情,我很乐意看到它,这对我来说是全新的,并且弄清楚发生了什么有点棘手.Live555的文档几乎就是代码本身,这并不能让我很容易理解.
我一直在研究一些流媒体软件,它使用H.264通过网络从各种摄像机和流中获取实时信息.为了实现这一点,我直接使用x264编码器(带有"zerolatency"预设)并提供NAL,因为它们可用于libavformat以打包到RTP(最终是RTSP).理想情况下,此应用程序应尽可能实时.在大多数情况下,这一直运作良好.
然而不幸的是,存在某种同步问题:客户端上的任何视频回放似乎都显示了一些平滑帧,然后是短暂停顿,然后是更多帧; 重复.此外,似乎有大约4秒的延迟.我尝试过的每一个视频播放器都会出现这种情况:Totem,VLC和基本的gstreamer管道.
我把它煮成了一个小小的测试用例:
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <x264.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#define WIDTH 640
#define HEIGHT 480
#define FPS 30
#define BITRATE 400000
#define RTP_ADDRESS "127.0.0.1"
#define RTP_PORT 49990
struct AVFormatContext* avctx;
struct x264_t* encoder;
struct SwsContext* imgctx;
uint8_t test = 0x80;
void create_sample_picture(x264_picture_t* picture)
{
// create a frame to store in
x264_picture_alloc(picture, X264_CSP_I420, WIDTH, HEIGHT);
// fake image generation
// disregard how wrong this is; just writing a quick test
int strides = …Run Code Online (Sandbox Code Playgroud) 从维基,我读到了
FFmpeg是一个自由软件项目,可生成用于处理多媒体数据的库和程序.FFmpeg最值得注意的部分是libavcodec,一个由其他几个项目使用的音频/视频编解码器库,libavformat,音频/视频容器mux和demux库,以及用于转码多媒体文件的ffmpeg命令行程序.
那么ffmpeg是avcodec的包装器?我经常听到人们使用ffmpeg用x264编码视频.那么ffmpeg也是x264的包装器?
它们有什么关系?
我想知道哪些命令行设置我需要明确设置(或避免)使用ffmpeg将视频编码成x264(mp4格式),默认情况下可以在Quicktime中播放.我发现许多预定义的预设文件对我有用,但其中一些不会,例如我无法使任何无损的文件工作,我也对这些文件感兴趣.例如,libx264-lossless_max.ffpreset将对我的视频进行编码,但它只能在VLC中播放,而不能在Quicktime中播放.在Quicktime中,视频保持黑色.我知道Perian是一个选项,但我希望我的文件可以在不安装Perian的情况下播放.谢谢你的帮助.
文件来自尼康D3s(mov),用ffmpeg转换为mp4.所有其他文件(avi,flv,mp4等)都没有问题
请参阅文件:http://shootitlive.s3.amazonaws.com/output.mp4 (从不同主机提供时,Chrome中的相同非工作结果,并且始终在Safari中使用,在Firefox中使用闪存,Chromium)
/ usr/local/bin/ffmpeg -i nonworking.MOV -acodec libfaac -ab 128k -vcodec libx264 -preset slow -crf 30 -threads 0 -s 768x576 -sepect 1.33333333333 -ar 48000 output.mp4
无法找到任何奇怪的东西(但不知道该找什么):
ffmpeg -v 5 -i filename -f null - 2>error.log`
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?