在用ffmpeg 2.0做一个转码工具的时候,转出的视频 视频播放速度变快

在用最新版 ffmpeg 2.0 转换视频的时候 首先遇到的一个问题是 在 avformat_write_header(pFormatCtxOut, NULL);
处报错:[mp4 @ 0x8183600] track 1: codec frame size is not set 虽然报了这个错误 但是还是能够转码,只是转出来的视频本来30秒 但是15秒左右就没有了,应该没有丢帧,只不过画面播放得特别快,就像快进一样。下面是源码,求大神 出场---
// Created by showself on 13-8-19.
// Copyright (c) 2013年 showself. All rights reserved.
//

#include
#include "test2.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include

static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec,
enum AVCodecID codec_id);

void transTest2(const char *src, const char *dst)
{
const char *filename;
const char *outfilename;
AVFormatContext *pFormatCtxIn,*pFormatCtxOut;
AVInputFormat *inFmt;
AVOutputFormat *outFmt;
AVStream *audio_st,*video_st;
AVFrame *pFrameIn;
AVCodecContext *pVideoCodecCtxIn,*pAudioCodecCtxIn,*pVideoCodecCtxOut,*pAudioCodecCtxOut;
AVCodec *pVideoCodecIn,*pAudioCodecIn,*pVideoCodecOut,*pAudioCodecOut;
int i ,videoStream,audioStream;;
int ret = 0;
AVPacket packet;
// int frame_count;

/* Initialize libavcodec, and register all codecs and formats. */
av_register_all();

if (src == NULL) {
    printf("no input file");
    return;
}

filename = src;
outfilename = dst;
/*get inout format*/
inFmt = av_find_input_format("MOV");


/*allocate the input media context*/
pFormatCtxIn = avformat_alloc_context();
if (pFormatCtxIn == NULL) {
    printf("allocate the input media context error");
    return;
}

// open a video
if (avformat_open_input(&pFormatCtxIn, filename, inFmt, NULL)) {
    return;
}
// get stream info
if (avformat_find_stream_info(pFormatCtxIn, NULL)<0) {
    return;
}

// get streams index from a video
videoStream = -1;
audioStream = -1;

for (i=0; i<pFormatCtxIn->nb_streams; i++) {
    if(pFormatCtxIn->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
    {
        printf("%d stream 为视频\n",i);
        videoStream=i;
    }
    if (pFormatCtxIn->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
        audioStream = i;// 音轨位置
        printf("%d stream 为音轨\n",i);
    }
}

if(videoStream==-1)
    return ; // Didn't find a video stream or Did not find a audio stream
if (audioStream == -1) {
    return;
}

// get decode codec contex pointer 
pVideoCodecCtxIn = pFormatCtxIn->streams[videoStream]->codec;
pAudioCodecCtxIn = pFormatCtxIn->streams[audioStream]->codec;

// get decode codec pointer
pVideoCodecIn = avcodec_find_decoder(pVideoCodecCtxIn->codec_id);
if (pVideoCodecIn == NULL) {
    return;
}
pAudioCodecIn = avcodec_find_decoder(pAudioCodecCtxIn->codec_id);
if (pAudioCodecIn == NULL) {
    return;
}

// open codec
if (avcodec_open2(pVideoCodecCtxIn, pVideoCodecIn, NULL)<0) {
    return;
}
if (avcodec_open2(pAudioCodecCtxIn, pAudioCodecIn, NULL)<0) {
    return;
}

// allocate input frame
pFrameIn = av_frame_alloc();
if (pFrameIn == NULL) {
    return;
}




/* allocate the output media context */

// // method 1
// avformat_alloc_output_context2(&pFormatCtxOut, NULL, NULL, outfilename);
// if (!pFormatCtxOut) {
// printf("Could not deduce output format from file extension: using MPEG.\n");
// avformat_alloc_output_context2(&pFormatCtxOut, NULL, "mpeg", outfilename);
// }
// if (!pFormatCtxOut) {
// return ;
// }
// method 2
outFmt = av_guess_format(NULL, outfilename, NULL);
if (outFmt == NULL) {
return;
}
pFormatCtxOut = avformat_alloc_context();
if (pFormatCtxOut == NULL) {
return;
}
pFormatCtxOut->oformat = outFmt;
sprintf(pFormatCtxOut->filename, "%s",outfilename);

// get output codec  from AVOutputContext
pVideoCodecOut = avcodec_find_encoder(outFmt->video_codec);
if (pVideoCodecOut == NULL) {
    return;
}
pAudioCodecOut = avcodec_find_encoder(outFmt->audio_codec);
if (pAudioCodecOut == NULL) {
    return;
}


/* Add the audio and video streams using the default format codecs
 * and initialize the codecs. */
video_st = NULL;
audio_st = NULL;


// 添加一条视频流
if (outFmt->video_codec != AV_CODEC_ID_NONE) {
    // 解码 源视频流
    video_st = avformat_new_stream(pFormatCtxOut, pVideoCodecOut);
    if (video_st == NULL) {
        return;
    }
    pVideoCodecCtxOut = video_st->codec;
    pVideoCodecCtxOut->codec_type = AVMEDIA_TYPE_VIDEO;
    pVideoCodecCtxOut->codec_id = outFmt->video_codec;
    pVideoCodecCtxOut->bit_rate = pVideoCodecCtxIn->bit_rate/2;
    pVideoCodecCtxOut->width = pVideoCodecCtxIn->width;
    pVideoCodecCtxOut->height = pVideoCodecCtxIn->height;
    pVideoCodecCtxOut->time_base.den = 25;
    pVideoCodecCtxOut->time_base.num = 1;
    pVideoCodecCtxOut->gop_size = 12;
    pVideoCodecCtxOut->pix_fmt = PIX_FMT_YUV420P;
    if (pVideoCodecCtxOut->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
        /* just for testing, we also add B frames */
        pVideoCodecCtxOut->max_b_frames =2;
    }
    if (pVideoCodecCtxOut->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
        /* Needed to avoid using macroblocks in which some coeffs overflow.
         * This does not happen with normal video, it just happens here as
         * the motion of the chroma plane does not match the luma plane. */
        pVideoCodecCtxOut->mb_decision = 2;
    }

}



if (pFormatCtxOut->oformat->flags & AVFMT_GLOBALHEADER)
{
    pVideoCodecCtxOut->flags |= CODEC_FLAG_GLOBAL_HEADER;
}

// 添加一条音频流
if (outFmt->audio_codec != AV_CODEC_ID_NONE) {
    audio_st = avformat_new_stream(pFormatCtxOut, pAudioCodecOut);
    if (audio_st == NULL) {
        return;
    }
    pAudioCodecCtxOut = audio_st->codec;
    pAudioCodecCtxOut->codec_id = outFmt->audio_codec;
    pAudioCodecCtxOut->coder_type = AVMEDIA_TYPE_AUDIO;
    pAudioCodecCtxOut->sample_fmt = pAudioCodecCtxIn->sample_fmt;
    pAudioCodecCtxOut->bit_rate = pAudioCodecCtxIn->bit_rate;
    pAudioCodecCtxOut->sample_rate = pAudioCodecCtxIn->sample_rate;
    pAudioCodecCtxOut->channels = pAudioCodecCtxIn->channels;
    pAudioCodecCtxOut->channel_layout = pAudioCodecCtxIn->channel_layout;
}
if (pFormatCtxOut->oformat->flags & AVFMT_GLOBALHEADER)
{
    pAudioCodecCtxOut->flags |= CODEC_FLAG_GLOBAL_HEADER;
}

// open encode codec
if (avcodec_open2(pVideoCodecCtxOut, pVideoCodecOut, NULL)<0) {
return;
}

// if(avcodec_open2(pAudioCodecCtxOut, pAudioCodecOut, NULL)<0)
// {
// printf("audio encode codec not found\n");
// return;
// }

av_dump_format(pFormatCtxOut, 0, outfilename, 1);

// open the output file, if needed
if (!(pFormatCtxOut->flags & AVFMT_NOFILE)) { //
    if (avio_open(&pFormatCtxOut->pb, outfilename, AVIO_FLAG_WRITE) < 0) {
        fprintf(stderr, "Could not open '%s'\n", outfilename);
        return;
    }
}

printf("1\n");
// write the stream header, if any
// [mp4 @ 0x99a8a00] track 1: codec frame size is not set?
avformat_write_header(pFormatCtxOut, NULL);
printf("2\n");
av_init_packet(&packet);

int frameFinished;
int videoFrameCount=0,audioFrameCount=0;
int got_packet,frames=0;
while (av_read_frame(pFormatCtxIn, &packet)>=0) {// 只要有帧 就读到packet中
    printf("video frame %d audio frame %d dts-%lld pts-%lld \n",videoFrameCount,audioFrameCount,packet.dts,packet.pts);


    frames ++;
    /*decodec and codec*/
    if (packet.stream_index == videoStream)
    {
        ret = avcodec_decode_video2(pVideoCodecCtxIn, pFrameIn, &frameFinished, &packet);

        videoFrameCount++;
        if (frameFinished) {

// pFrameOut->data[0] = pFrameIn->data[0];
// pFrameOut->data[1] = pFrameIn->data[1];
// pFrameOut->data[2] = pFrameIn->data[2];
// pFrameOut->linesize[0] = pFrameIn->linesize[0];
// pFrameOut->linesize[1] = pFrameIn->linesize[1];
// pFrameOut->linesize[2] = pFrameIn->linesize[2];

            if (outFmt->flags & AVFMT_RAWPICTURE) { // 不改变图片尺寸
                AVPacket pkt;
                av_init_packet(&pkt);
                pkt.flags |= AV_PKT_FLAG_KEY;
                pkt.stream_index = video_st->index;
                pkt.data = (uint8_t *)pFormatCtxIn;
                pkt.size = sizeof(AVPicture);
                av_write_frame(pFormatCtxOut, &pkt);
            }
            else // 需要改变尺寸
            {
                AVPacket pkt = {0};

                av_init_packet(&pkt);
                ret = avcodec_encode_video2(pVideoCodecCtxOut, &pkt, pFrameIn, &got_packet);

                if (ret<0) {
                    return;
                }
                /* If size is zero, it means the image was buffered. */
                if (!ret && got_packet && pkt.size) {
                    printf("frame dts-%lld  pts-%lld \n",packet.dts,packet.pts);

                    pkt.stream_index = video_st->index;
                    pkt.pts = pVideoCodecCtxOut->coded_frame->pts;
                    if(pVideoCodecCtxOut->coded_frame->key_frame) // 如果是关键帧
                        pkt.flags |= AV_PKT_FLAG_KEY;
                    /* Write the compressed frame to the media file. */

// ret = av_interleaved_write_frame(pFormatCtxOut, &pkt);
av_write_frame(pFormatCtxOut, &pkt);
} else {
ret = 0;
}

            }
        }
    }
    else if(packet.stream_index == audioStream)
    {
        audioFrameCount ++;
        printf("frame dts-%lld  pts-%lld \n",packet.dts,packet.pts);
        av_write_frame(pFormatCtxOut, &packet);
    }

// /* get the delayed frames */
// for (got_packet = 1; got_packet; i++) { // got_output ’Ê
// fflush(stdout);
// ret = avcodec_encode_video2(pVideoCodecCtxOut, &packet, NULL, &got_packet);
// if (ret < 0) {
// fprintf(stderr, "Error encoding frame\n");
// exit(1);
// }
// if (got_packet) {
// printf("Write frame %3d (size=%5d)\n", i, packet.size);
// av_write_frame(pFormatCtxOut, &packet);
// }
// }

}

av_write_trailer(pFormatCtxOut);

avcodec_close(pVideoCodecCtxIn);
avcodec_close(pVideoCodecCtxOut);
avcodec_close(pAudioCodecCtxIn);
avcodec_close(pAudioCodecCtxOut);

}

1个回答

你现在有解决这个问题吗?我也碰到了。77848041,+我,交流

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
最新的 ffmpeg 2.8 其实连yuy2数据包都不能正确转换
说了你也不相信,我用 directx 采集到的数据是从web camera来的 yuy2 数据,我用自己写的转换程序可以成功转换正确的图像rgb24, yuy2 -> rgb24 -> I420 都可以,但是用ffmpeg的sws__scale 怎么也无法正确转换。 sws__scale 的解码过程如下 void scaleYUY2toI420(const void *pSrc, int widthSrc, int heightSrc, void *pDest, int widthDest, int heightDest, bool bQualityImportant/* = false*/) { struct SwsContext *pctx; AVPicture picSrc = { 0 }; AVPicture picDst = { 0 }; enum AVPixelFormat fmtSrc = AV_PIX_FMT_YUYV422; enum AVPixelFormat fmtDst = AV_PIX_FMT_YUV420P; avpicture_fill(&picSrc, (uint8_t*)pSrc, fmtSrc, widthSrc, heightSrc); // avpicture_fill(&picDst, (uint8_t*)pDest, fmtDst, widthDest, heightDest); pctx = sws_getContext(widthSrc, heightSrc, fmtSrc, widthDest, heightDest, fmtDst, bQualityImportant ? SWS_BICUBIC : SWS_POINT, NULL, NULL, NULL); if (pctx == NULL) return; sws_scale(pctx, picSrc.data, picSrc.linesize, 0, heightSrc, picDst.data, picDst.linesize); sws_freeContext(pctx); } 问题在哪里始终不得要领,希望专家们不吝赐教。 为了验证问题,我用 ffmpeg 转换 rgb24 -> I420每问题,是不是ffmpeg不支持 yuy2 packed 包到 i420?但是我看它的像素格式定义, AV_PIX_FMT_YUYV422 排在最前面啊
ffmpeg实现web上视频转码为mp4格式用video标签却无法播放
1.问题描述:调用ffmpeg将avi格式视频转码->mp4格式,使用最简单的<video>标签进行播放只能播放声音,没有画面(黑屏)。而暴风影音等本地视频播放软件却能够正常播放转码后的视频。 2.环境:SSH框架准备实现视频上传后的自动转码并且能够网页内播放,火狐浏览器。 3.已知mp4格式分为两种,其中H264类型才能进行html播放,但按照转码命令说已经转码成:视频H264、音频aac格式了,但是仍然是黑屏(有声音)。 4.未知:(1)转码时显示的相关命令行具体意义。(2)网上所说用格式工厂进行转码即可,有没有能够通过代码调用的视频转码方法予以解决呢? 5.以下为问题截图: (1)视频转码Java代码: ``` List<String> convert = new ArrayList<String>(); convert.add(ffmpegPath); // 添加转换工具路径 convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件 convert.add(sourceVideoPath); // 添加要转换格式的视频文件的路径 convert.add("-acodec"); convert.add("aac"); convert.add("-vcodec"); convert.add("libx264"); convert.add("-y"); convert.add(targetFolder+fileRealNameNoExtension+targetExtension); ``` (2)转码时的输出: ``` ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, avi, from 'E:\Test\projectVideos\temp\1557994804863.avi': Metadata: genre : Other track : 1 encoder : Lavf54.63.104 Duration: 00:00:16.80, start: 0.000000, bitrate: 2286 kb/s Stream #0:0: Video: h264 (Main) (H264 / 0x34363248), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2151 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp, 128 kb/s Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native)) Press [q] to stop, [?] for help [libx264 @ 0000000002ebf4c0] using SAR=1/1 [libx264 @ 0000000002ebf4c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0000000002ebf4c0] profile Progressive High, level 4.0, 4:2:0, 8-bit [libx264 @ 0000000002ebf4c0] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'E:\Test\projectVideos\encvideos\1557994804863.mp4': Metadata: genre : Other track : 1 encoder : Lavf58.27.103 Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc Metadata: encoder : Lavc58.52.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s Metadata: encoder : Lavc58.52.100 aac frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.06 bitrate= 5.5kbits/s speed=0.138x frame= 46 fps= 23 q=0.0 size= 0kB time=00:00:01.88 bitrate= 0.2kbits/s speed=0.936x frame= 64 fps= 25 q=28.0 size= 0kB time=00:00:02.57 bitrate= 0.1kbits/s speed=1.02x frame= 88 fps= 29 q=28.0 size= 0kB time=00:00:03.55 bitrate= 0.1kbits/s speed=1.17x frame= 108 fps= 31 q=28.0 size= 0kB time=00:00:04.34 bitrate= 0.1kbits/s speed=1.23x frame= 133 fps= 33 q=28.0 size= 0kB time=00:00:05.34 bitrate= 0.1kbits/s speed=1.32x frame= 155 fps= 34 q=28.0 size= 0kB time=00:00:06.22 bitrate= 0.1kbits/s speed=1.35x frame= 171 fps= 33 q=28.0 size= 0kB time=00:00:06.87 bitrate= 0.1kbits/s speed=1.33x frame= 186 fps= 33 q=28.0 size= 0kB time=00:00:07.47 bitrate= 0.1kbits/s speed=1.32x frame= 195 fps= 31 q=28.0 size= 0kB time=00:00:07.82 bitrate= 0.0kbits/s speed=1.25x frame= 206 fps= 30 q=28.0 size= 0kB time=00:00:08.26 bitrate= 0.0kbits/s speed=1.22x frame= 214 fps= 29 q=28.0 size= 0kB time=00:00:08.59 bitrate= 0.0kbits/s speed=1.17x frame= 223 fps= 28 q=28.0 size= 0kB time=00:00:08.96 bitrate= 0.0kbits/s speed=1.14x frame= 229 fps= 27 q=28.0 size= 0kB time=00:00:09.19 bitrate= 0.0kbits/s speed=1.09x frame= 232 fps= 25 q=28.0 size= 0kB time=00:00:09.28 bitrate= 0.0kbits/s speed=1.01x frame= 235 fps= 24 q=28.0 size= 256kB time=00:00:09.42 bitrate= 222.5kbits/s speed=0.965x frame= 240 fps= 23 q=28.0 size= 256kB time=00:00:09.63 bitrate= 217.7kbits/s speed=0.928x frame= 243 fps= 22 q=28.0 size= 256kB time=00:00:09.72 bitrate= 215.6kbits/s speed=0.894x frame= 247 fps= 21 q=28.0 size= 256kB time=00:00:09.89 bitrate= 212.1kbits/s speed=0.856x frame= 253 fps= 21 q=28.0 size= 512kB time=00:00:10.12 bitrate= 414.3kbits/s speed=0.832x frame= 258 fps= 20 q=28.0 size= 512kB time=00:00:10.33 bitrate= 406.0kbits/s speed=0.812x frame= 264 fps= 20 q=28.0 size= 512kB time=00:00:10.56 bitrate= 397.0kbits/s speed=0.791x frame= 268 fps= 19 q=28.0 size= 768kB time=00:00:10.72 bitrate= 586.5kbits/s speed=0.773x frame= 272 fps= 19 q=28.0 size= 768kB time=00:00:10.91 bitrate= 576.5kbits/s speed=0.753x frame= 278 fps= 19 q=28.0 size= 768kB time=00:00:11.14 bitrate= 564.5kbits/s speed=0.743x frame= 281 fps= 18 q=28.0 size= 768kB time=00:00:11.26 bitrate= 558.7kbits/s speed=0.725x frame= 286 fps= 18 q=28.0 size= 1024kB time=00:00:11.47 bitrate= 731.3kbits/s speed=0.715x frame= 291 fps= 17 q=28.0 size= 1024kB time=00:00:11.67 bitrate= 718.3kbits/s speed=0.701x frame= 296 fps= 17 q=25.0 size= 1024kB time=00:00:11.86 bitrate= 707.0kbits/s speed=0.687x frame= 303 fps= 17 q=28.0 size= 1280kB time=00:00:12.14 bitrate= 863.5kbits/s speed=0.681x frame= 308 fps= 17 q=28.0 size= 1280kB time=00:00:12.35 bitrate= 848.9kbits/s speed=0.67x frame= 312 fps= 16 q=28.0 size= 1280kB time=00:00:12.51 bitrate= 837.8kbits/s speed=0.661x frame= 319 fps= 16 q=28.0 size= 1280kB time=00:00:12.79 bitrate= 819.6kbits/s speed=0.658x frame= 341 fps= 17 q=28.0 size= 1280kB time=00:00:13.65 bitrate= 768.0kbits/s speed=0.684x frame= 362 fps= 18 q=28.0 size= 1280kB time=00:00:14.48 bitrate= 723.7kbits/s speed=0.708x frame= 391 fps= 19 q=28.0 size= 1280kB time=00:00:15.67 bitrate= 669.0kbits/s speed=0.746x frame= 419 fps= 19 q=28.0 size= 1280kB time=00:00:16.67 bitrate= 629.0kbits/s speed=0.774x frame= 419 fps= 19 q=-1.0 Lsize= 1538kB time=00:00:16.71 bitrate= 753.7kbits/s speed=0.753x video:1480kB audio:43kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.976535% [libx264 @ 0000000002ebf4c0] frame I:2 Avg QP:13.37 size: 32816 [libx264 @ 0000000002ebf4c0] frame P:143 Avg QP:14.70 size: 6977 [libx264 @ 0000000002ebf4c0] frame B:274 Avg QP:13.65 size: 1647 [libx264 @ 0000000002ebf4c0] consecutive B-frames: 9.8% 7.6% 4.3% 78.3% [libx264 @ 0000000002ebf4c0] mb I I16..4: 38.7% 53.1% 8.1% [libx264 @ 0000000002ebf4c0] mb P I16..4: 17.5% 18.5% 0.2% P16..4: 5.5% 0.4% 0.2% 0.0% 0.0% skip:57.7% [libx264 @ 0000000002ebf4c0] mb B I16..4: 2.0% 0.7% 0.0% B16..8: 3.7% 0.2% 0.0% direct: 2.9% skip:90.5% L0:49.2% L1:48.4% BI: 2.4% [libx264 @ 0000000002ebf4c0] 8x8 transform intra:48.1% inter:84.8% [libx264 @ 0000000002ebf4c0] coded y,uvDC,uvAC intra: 3.9% 31.3% 4.5% inter: 0.7% 5.4% 0.2% [libx264 @ 0000000002ebf4c0] i16 v,h,dc,p: 22% 68% 4% 6% [libx264 @ 0000000002ebf4c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 27% 42% 0% 0% 0% 0% 0% 0% [libx264 @ 0000000002ebf4c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 28% 24% 2% 4% 3% 4% 2% 3% [libx264 @ 0000000002ebf4c0] i8c dc,h,v,p: 48% 39% 11% 2% [libx264 @ 0000000002ebf4c0] Weighted P-Frames: Y:23.1% UV:22.4% [libx264 @ 0000000002ebf4c0] ref P L0: 65.5% 9.2% 23.1% 1.9% 0.3% [libx264 @ 0000000002ebf4c0] ref B L0: 71.1% 28.4% 0.5% [libx264 @ 0000000002ebf4c0] ref B L1: 98.8% 1.2% [libx264 @ 0000000002ebf4c0] kb/s:723.03 [aac @ 0000000002dc0980] Qavg: 47784.133 生成mp4视频为:E:\Test\projectVideos\temp\1557994804863.mp4 ``` (3)播放时的截图 ![图片说明](https://img-ask.csdn.net/upload/201905/16/1557997780_707491.png) (4) 播放视频jsp代码(使用的是video-js,但测试时也试了一下不加视频插件直接<video>标签播放,结果一样) ``` <video id="playVideo" class="video-js vjs-default-skin" controls ="true" preload="auto" width="960" height="480" poster="/images/${VIDEO.vpicture}" data-setup='{}'> <source src="/videos/${VIDEO.vpath}" type='video/mp4' /> </video> ``` ("/videos"为虚拟路径 实为本地存储地址) 希望好心人能够予以慷慨解答!~ 补充:在转wmv格式到MP4格式时出现了 ``` ConverVideoTest说:传入工具类的源视频为:E:\Test\projectVideos\temp\1558578421815.wmv ----接收到文件(E:\Test\projectVideos\temp\1558578421815.wmv)需要转换------- ----开始转文件(E:\Test\projectVideos\temp\1558578421815.wmv)-------------------------- 源视频类型为:wmv 可以转换,统一转为mp4文件 调用了ffmpeg.exe工具 该文件夹存在。 ffmpeg输入的命令:E:\ffmpeg\bin\ffmpeg.exe-iE:\Test\projectVideos\temp\1558578421815.wmv-acodecaac-vcodeclibx264-yE:\Test\projectVideos\encvideos\1558578421815.mp4 ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, asf, from 'E:\Test\projectVideos\temp\1558578421815.wmv': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 Duration: 00:00:16.58, bitrate: 1969 kb/s Stream #0:0(chi): Audio: wmapro (b[1][0][0] / 0x0162), 48000 Hz, stereo, fltp, 256 kb/s Stream #0:1(chi): Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p, 1352x696 [SAR 1:1 DAR 169:87], 3400 kb/s, 30 tbr, 1k tbn, 60 tbc Stream mapping: Stream #0:1 -> #0:0 (vc1 (native) -> h264 (libx264)) Stream #0:0 -> #0:1 (wmapro (native) -> aac (native)) Press [q] to stop, [?] for help [libx264 @ 0000000000531c80] using SAR=1/1 [libx264 @ 0000000000531c80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0000000000531c80] profile Progressive High, level 3.2, 4:2:0, 8-bit [libx264 @ 0000000000531c80] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 frame= 11 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 52 fps= 48 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 85 fps= 54 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 145 fps= 64 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=47 drop=0 speed=N/A frame= 171 fps= 61 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=55 drop=0 speed=N/A Too many packets buffered for output stream 0:0. [libx264 @ 0000000000531c80] frame I:2 Avg QP:15.28 size: 56950 [libx264 @ 0000000000531c80] frame P:34 Avg QP:14.18 size: 1252 [libx264 @ 0000000000531c80] frame B:93 Avg QP:15.53 size: 140 [libx264 @ 0000000000531c80] consecutive B-frames: 3.1% 1.6% 2.3% 93.0% [libx264 @ 0000000000531c80] mb I I16..4: 14.9% 79.5% 5.6% [libx264 @ 0000000000531c80] mb P I16..4: 0.7% 1.1% 0.0% P16..4: 4.1% 1.4% 1.3% 0.0% 0.0% skip:91.4% [libx264 @ 0000000000531c80] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 3.6% 0.0% 0.0% direct: 0.0% skip:96.4% L0:36.8% L1:63.2% BI: 0.0% [libx264 @ 0000000000531c80] 8x8 transform intra:74.4% inter:80.1% [libx264 @ 0000000000531c80] coded y,uvDC,uvAC intra: 38.4% 33.4% 20.3% inter: 0.5% 0.2% 0.0% [libx264 @ 0000000000531c80] i16 v,h,dc,p: 61% 25% 9% 6% [libx264 @ 0000000000531c80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 31% 21% 2% 3% 3% 3% 3% 3% [libx264 @ 0000000000531c80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 32% 14% 4% 5% 5% 5% 4% 6% [libx264 @ 0000000000531c80] i8c dc,h,v,p: 76% 13% 8% 4% [libx264 @ 0000000000531c80] Weighted P-Frames: Y:0.0% UV:0.0% [libx264 @ 0000000000531c80] ref P L0: 85.1% 6.8% 6.5% 1.6% [libx264 @ 0000000000531c80] ref B L0: 48.1% 47.5% 4.4% [libx264 @ 0000000000531c80] ref B L1: 93.2% 6.8% [libx264 @ 0000000000531c80] kb/s:315.41 **Conversion failed!** 生成mp4视频为:E:\Test\projectVideos\temp1558578421815.mp4 ===========视频转码结束,开始截图================= 该文件夹存在。 截图命令:E:\ffmpeg\bin\ffmpeg.exe-ss00:00:01-iE:\Test\projectVideos\temp\1558578421815.wmv-y-fimage2-s154x90E:\Test\projectVideos\images\1558578421815.jpg ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, asf, from 'E:\Test\projectVideos\temp\1558578421815.wmv': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 Duration: 00:00:16.58, bitrate: 1969 kb/s Stream #0:0(chi): Audio: wmapro (b[1][0][0] / 0x0162), 48000 Hz, stereo, fltp, 256 kb/s Stream #0:1(chi): Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p, 1352x696 [SAR 1:1 DAR 169:87], 3400 kb/s, 30 tbr, 1k tbn, 60 tbc Stream mapping: Stream #0:1 -> #0:0 (vc1 (native) -> mjpeg (native)) Press [q] to stop, [?] for help [swscaler @ 0000000002ecd4c0] deprecated pixel format used, make sure you did set range correctly Output #0, image2, to 'E:\Test\projectVideos\images\1558578421815.jpg': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 encoder : Lavf58.27.103 Stream #0:0(chi): Video: mjpeg, yuvj420p(pc), 154x90 [SAR 2535:2233 DAR 169:87], q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc Metadata: encoder : Lavc58.52.100 mjpeg Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 [image2 @ 0000000000628e00] Could not get frame filename number 2 from pattern 'E:\Test\projectVideos\images\1558578421815.jpg'. Use '-frames:v 1' for a single image, or '-update' option, or use a pattern such as %03d within the filename. av_interleaved_write_frame(): Invalid argument frame= 2 fps=0.0 q=1.6 size=N/A time=00:00:00.06 bitrate=N/A speed=0.102x frame= 2 fps=0.0 q=1.6 Lsize=N/A time=00:00:00.06 bitrate=N/A speed=0.097x video:3kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Conversion failed! 截图进程结束 截图成功! ``` 即出现了Conversion failed!!!
ffmpeg x264 多线程问题
ffmpeg -i 9.avi -vcodec libx264 -map 0 9.264 -i 10.avi -vcodec libx264 -map 1 10.264 -i 11.avi -vcodec libx264 -map 2 11.264 使用上面的命令将三个文件同时转码为H264编码的文件,转码变的异常的慢,请各位帮忙看看是什么原因。我这样做主要是为了看看三个视频文件同时转码的速率与一个视频文件的转码速的对比,但现在这种结果肯定是不正常的。 另外,请教各位,对于同一个视频文件,输出的视频编码文件的质量同原视频文件一样,转码速度受哪些转码参数影响?
java 调用ffmpeg对视频进行转码
java 调用ffmpeg对视频进行转码 ,只有当全部转换成mp4文件时,该视频才能播放。可不可以边转码边播放该视频?是要调用qt-faststart吗?如果调用它,那么如何使用qt-faststart.exe文件?
Mac下编译Android FFmpeg2.2.2报错gcc is unable to create an executable file
大家好。报错如题。查看config.log里面有错: EGIN /var/folders/ch/3lnns2f14bv398_ghdz1v9_h0000gn/T//ffconf.nj0OFFb3.c 1 #include <stddef.h> 2 #if !(defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4) 3 #error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4" 4 #endif END /var/folders/ch/3lnns2f14bv398_ghdz1v9_h0000gn/T//ffconf.nj0OFFb3.c 有很多都是类似的,还有比如 #error "unsatisfied condition: defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T" #error "unsatisfied condition: defined __ARM_ARCH_5__ || defined __TARGET_ARCH_5" 这种。 我的config.sh如下: #!/bin/bash export PREBUILT=/Users/AAA/Documents/Development/Android/Environment/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64 export PLATFORM=/Users/AAA/Documents/Development/Android/Environment/android-ndk-r9d/platforms/android-9/arch-arm ./configure --target-os=linux \ --arch=arm \ --enable-version3 \ --enable-gpl \ --enable-nonfree \ --disable-stripping \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-symver \ --enable-encoders \ --enable-decoders \ --enable-muxers \ --disable-devices \ --disable-protocols \ --enable-protocol=file \ --enable-avfilter \ --enable-network \ --enable-avdevice \ --disable-asm \ --enable-cross-compile \ --enable-runtime-cpudetect \ --sysroot=$PLATFORM \ --disable-everything \ --disable-doc \ --enable-avresample \ --enable-demuxer=rtsp \ --enable-muxer=rtsp \ --enable-protocol=rtp \ --enable-hwaccels \ --enable-zlib \ --prefix=$PLATFORM/usr \ --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --extra-cflags="-I$PLATFORM/usr/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \ --disable-asm \ --enable-neon \ --enable-armv5te \ --extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PLATFORM/usr/lib/crtbegin_dynamic.o $PLATFORM/usr/lib/crtend_android.o -lc -lm -ldl" 谢谢大家了。
有人知道在 java中使用ffmpeg转码时,怎么判断转码是否已经结束了呢
if(!strFileType.equals(".mp4")&&!strFileType.equals(".flv")&&!strFileType.equals(".mov")) { commend.add("E:\\ffmpeg\\bin\\ffmpeg.exe"); commend.add("-i"); commend.add(resourcePath); commend.add("-ab"); commend.add("56"); commend.add("-ar"); commend.add("22050"); commend.add("-qscale"); commend.add("8"); commend.add("-r"); commend.add("15"); commend.add("-s"); commend.add("600x500"); commend.add(ServletActionContext.getServletContext().getRealPath("/videos")+"//"+savename+".flv"); vE.setVEUrl(savename+".flv"); try { ProcessBuilder builder = new ProcessBuilder(commend); Process p=builder.start(); //p.waitFor();好像不行啊?。。阻塞了貌似 } catch (IOException e) { e.printStackTrace(); }
使用ffmpeg保存H.264的RTSP流到AVI文件中程序执行没有报错,但是文件是空的。
使用ffmpeg保存H.264的RTSP流到AVI文件中程序执行没有报错,但是文件是空的,其中ffmpeg也根据文件名生成了相应的文件,,avformat_write_header ,av_interleaved_write_frame, av_interleaved_write_frame均返回0(0即正确返回)但是,为什么生成的AVI文件中是0个字节啊?
c# aforge.video.ffmpeg,version=2.2.5.0
debug在x64情况下会弹出这个错误.怎么解决?只有在anycpu可以.
在java中使用ffmpeg的问题
我要实现的是微信公众号网页中用户可以把手机录的视频上传到服务器,目前存在的问题是ios的mov格式视频在安卓手机端无法通过video标签播放。 于是我在网上找到可以通过java调用ffmpeg.exe实现转码的方法,但是由于对ffmpeg不熟悉,故而有一些问题不太明白。 1、html5上传文件可以通过二进制流来上传,数据到服务器后写成文件。然而ffmpeg肯定也是需要读取文件然后解码、再编码.....,那么我可以直接调用ffmpeg来接收html5上传过来的二进制流,然后转码吗? 2、有其他的网页插件或者方式来实现手机浏览器播放mov和MP4格式的视频吗?除了flash。
ffmpeg.exe使用命令行进行录屏,为什么在ie上不能进行播放?
视频编码为H264,保存文件为mp4格式,同样的在media player上也不能进行播放 这是我录屏的命令:ffmpeg.exe -f gdigrab -i desktop -r 15 -vf lutyuv="u=128:v=128" -vcodec libx264 rest.mp4 另外,我尝试了录制成mpeg格式,再进行转码mp4则不存在不能播放的问题
ffmpeg制作Gif动画遇到的问题 .net
.net将视频转成Gif动画 ProcessStartInfo startInfo = new ProcessStartInfo("f:/ffmpeg.exe"); startInfo.WindowStyle = ProcessWindowStyle.Normal; startInfo.Arguments = "-i F:/001.flv -vframes 30 -y -f gif f:/12333.gif"; Process.Start(startInfo); 生产的gif文件是0字节。
关于c#内部调用ffmpeg.exe处理视频文件时的命令
直接通过cmd,手打ffmpeg -i in.avi -vf drawtext="fontfile=arial.ttf: timecode='09\:57\:00\:00': r=10: \x=(w+tw)/2:fontcolor=Red:fontsize=30" -an -y out.avi进行视频处理时该命令是能够正确完成功能的。 但是,在c#内部调用时该如何把那串字符正确的输入进去啊,怎么输都不对。 System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.WorkingDirectory = Application.StartupPath; proc.StartInfo.UseShellExecute = false; //use false if you want to hide the window string command_line = "-i " + filename + " -vf drawtext=\"" + "fontfile=arial.ttf: timecode='09\\:57\\:00\\:00': r=10: \\x=(w+tw)/2:fontcolor=Red:fontsize=30\"" + "-an " + name1; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.FileName = "ffmpeg"; proc.StartInfo.Arguments = command_line; proc.Start();
为什么海思硬件解码不支持ffmpeg转出的h264视频
我用ffmpeg把MP4文件准换成h264,用海思的示例代码都不能播放,海思自己提供的示例h264视频都可以正常播放,用ffmpeg转出来的h264有什么不同吗?
在树莓派(Raspbian系统)下安装open,编译时,cap_ffmpeg.cpp报错不通过
如题,已经两天了!在试了opencv2.4.9,2.4.10,2.3.1三个版本,在make时都是在 同一个地方报错,下贴上报错的内容 modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:215: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.cpp.o' failed make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_ffmpeg.cpp.o ] Error 1 CMakeFiles/Makefile2:1772: recipe for target 'modules/highgui/CMakeFiles/opencv_ highgui.dir/all' failed make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2 Makefile:137: recipe for target 'all' failed make: *** [all] Error 2 我怀疑是cap_ffmpeg.h或者cap_ffmpeg.cpp有什么问题,但是不知道该怎么办, 百度了很多,其中这个帖子http://www.xuebuyuan.com/2046558.html似乎问题 和我很相似,但是并没有解决办法。找到了另外一个帖子http://blog.csdn.net/xizero00/article/details/7386695,问题也一样,它给出了解决办法还有改好的cap_ffmpeg.h,但是放上去,还是不管用。 毕设就差这个问题了.....求解救
ffmpeg解码部分视频失败
我有一些视频,能够用播放器播放,但是用ffmpeg-3.4解不出来。 准确的说是用我自己编的ffmpeg库解不出来,用公司同样ffmpeg-3.4就能解出来。 但是我的编译应该没有大问题,因为大部分视频我都能够顺利解码的 视频解码错误时报: ``` [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] STSC entry 1 is invalid (first=12 count=0 id=1) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] stream 0, contradictionary STSC and STCO [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] error reading header ``` 正常解码出来的信息是: ``` Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fail.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isom creation_time : 2019-08-06T16:42:23.000000Z Duration: 00:00:10.89, start: 0.000000, bitrate: N/A Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 2815 kb/s, 25.66 fps, 25.64 tbr, 1k tbn, 51.31 tbc (default) Metadata: creation_time : 2019-08-06T16:42:24.000000Z handler_name : encoder : VC Coding ``` 我的编译选项: ``` ./configure --prefix=./ --bindir=bin/ffmpeg --incdir=include/ffmpeg --libdir=lib64/ffmpeg --disable-x86asm --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro' --enable-libx264 --enable-libx265 --enable-avfilter --enable-pthreads --enable-shared --enable-gpl --disable-debug --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda-8.0/include --extra-ldflags=-L/usr/local/cuda-8.0/lib64 ``` 怀疑是我编译的时候有什么选项没有开,或者有人告诉我这个视频有什么特殊的地方需要我加特殊的编解码器吗?
2.2.1版本的vlc播放rtmp流会自动断开,而2.2.1以下的版本都不会
2.2.1版本的vlc播放rtmp流会自动断开,而2.2.1以下的版本都不会 通过vlc的 工具-》编码器信息-》统计 这里面可以发现2.2.1版本的vlc播放时候会直接丢掉前面一些帧,比如一次丢掉34帧,然后进行播放,后面都很正常,但是vlc2.2.1 它不会一次直接丢掉前面的34个无效帧,而是直接播放,这样发送数据时候过快,client还未来得及处理,结果client端就直接断开了,但是断开后,rtmp server还是运行的,这时候重新连接client,于是后面可以正常播放了,我想就是第一个I帧残缺引起的错误,我播放的是flv文件,是通过ffmpeg从rtmp://live.hkstv.hk.lxdns.com/live/hks 上面下载下来的 ffmpeg -i "rtmp://live.hkstv.hk.lxdns.com/live/hks" -vcodec copy -acodec copy test.flv 。 请教下哪位大神,假设低版本的vlc处理前面的一些帧时候 一次丢掉34帧数据(这里34帧作为参考,可以更多或更少,看文件本身),这样做的好处,和2.2.1版本vlc 却不是这样处理,而是直接播放那些视音频帧,从而断开连接。 还发现一个问题,就是2.2.1 vlc版本播放rtmp流时候,查看vlc的 工具-》编码器信息-》统计 ,发现视音频的 已解码 已播放 都是0,但是某个时间一下增长到355 355 ,而2.2.1及以下低版本在播放的同时 (视音频的 已解码 已播放) 慢慢增长,请问下 这个是啥情况啊
ffmpeg API转码码率怎么控制
ffmpeg API转码码率设置为450k,但是mediainfo查看时有2000多k,用ffmpeg EXE转码出来的码率就很正常,请问是不是参数设置有问题?![我自己的转码程序文件信息](https://img-ask.csdn.net/upload/201506/27/1435392066_158513.png)![ffmpeg exe转码文件信息](https://img-ask.csdn.net/upload/201506/27/1435392105_883820.png)
C#using AForge.Video.FFMPEG;能录制视频但没有声音。
C#using AForge.Video.FFMPEG;能录制视频但没有声音。
ffmpeg转换视频格式问题
使用java调用ffmpeg转换多个视频,会同时把多个视频进行转,这样会导致CPU使用率达到100%,如果同时转换的视频到达某一数目,电脑就会卡死。 本人尝试过实时获取输出流来查看转换状态,代码如下: Process process = Runtime.getRuntime().exec(cmd); final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String s = null; while((s=br.readLine()) != null){ System.out.println(s); } 但,当执行到s=br.readLine()方法时会卡着不动了。 请问有大神知道如何控制ffmpeg转换完一个视频后,再进行第二个视频的转换。
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
(接上文《源码阅读(18):Java中主要的Map结构——HashMap容器(中)》) 3.4.4、HashMap添加K-V键值对(红黑树方式) 上文我们介绍了在HashMap中table数组的某个索引位上,基于单向链表添加新的K-V键值对对象(HashMap.Node&lt;K, V&gt;类的实例),但是我们同时知道在某些的场景下,HashMap中table数据的某个索引位上,数据是按照红黑树
c++制作的植物大战僵尸,开源,一代二代结合游戏
    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。 目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度学习图
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 万字申请,废话报告,魔幻形式主义大作怎么写?兄dei,狗屁不通文章生成器了解一下。这个富有灵魂的项目名吸引了众人的目光。项目仅仅诞生一周,便冲上了GitHub趋势榜榜首(Js中文网 -前端进阶资源教程)、是榜首哦
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问