Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
Optimizing Painting video encoding in Android
26 octobre 2013, par coder000001I want to create live painting video as export feature for a painting application.
I can create a video with a series of images, with the use of a library ( FFMPEG or MediaCodec). But, this would require too much processing power to compare the images and encode the video.
While drawing, I know exactly which pixels are changed. So, I can save lot of processing if I can pass this info to FFMPEG, instead of having the FFMPEG figure this out from the images.
Is there away to efficiently encode the video for this purpose ?
-
How to convert video or audio directly through php5-ffmpeg API [on hold]
25 octobre 2013, par user2719515How to convert video or audio directly through php5-ffmpeg API without using exec()?
-
FFMPEG enocde flv with alpha channel
25 octobre 2013, par treeI'm trying to encode a video (mov) to an flv with alpha channel in FFMPEG but I can't seem to either
- find a codec that is supported
- find one that actually maintains the alpha
Does anyone know how to set that up?
Thanks,
ffmpeg -i abc_btr_1280x800_Takeover.mov -vcodec flv -pix_fmt yuv444p -s 1280x800 test4.flv
here is the report...
ffmpeg started on 2013-10-25 at 15:47:30 Report written to "ffmpeg-20131025-154730.log" Command line: ffmpeg -i abc_btr_1280x800_Takeover.mov -vcodec flv -pix_fmt yuv444p -s 1280x800 test4.flv -report ffmpeg version N-57367-g2f31b73 Copyright (c) 2000-2013 the FFmpeg developers built on Oct 23 2013 20:34:17 with gcc 4.8.2 (GCC) configuration: --disable-static --enable-shared --enable-gpl --enable-version3 -- disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r -- enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable- libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame -- enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib libavutil 52. 47.101 / 52. 47.101 libavcodec 55. 38.101 / 55. 38.101 libavformat 55. 19.104 / 55. 19.104 libavdevice 55. 4.100 / 55. 4.100 libavfilter 3. 89.100 / 3. 89.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 libpostproc 52. 3.100 / 52. 3.100 Splitting the commandline. Reading option '-i' ... matched as input file with argument 'abc_btr_1280x800_Takeover.mov'. Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'flv'. Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv444p'. Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '1280x800'. Reading option 'test4.flv' ... matched as output file. Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'. Finished splitting the commandline. Parsing a group of options: global . Applying option report (generate a report) with argument 1. Successfully parsed a group of options. Parsing a group of options: input file abc_btr_1280x800_Takeover.mov. Successfully parsed a group of options. Opening an input file: abc_btr_1280x800_Takeover.mov. [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100 [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] ISO: File Type Major Brand: qt [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] File position before avformat_find_stream_info() is 281624339 [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] All info found [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] File position after avformat_find_stream_info() is 288732 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'abc_btr_1280x800_Takeover.mov': Metadata: major_brand : qt minor_version : 537199360 compatible_brands: qt creation_time : 2013-09-22 02:50:18 Duration: 00:00:10.00, start: 0.000000, bitrate: 225299 kb/s Stream #0:0(eng), 1, 1/24: Video: qtrle (rle / 0x20656C72), bgra, 1280x800, 225293 kb/s, SAR 1280:1280 DAR 8:5, 24 fps, 24 tbr, 24 tbn, 24 tbc (default) Metadata: creation_time : 2013-09-22 02:50:18 handler_name : Apple Alias Data Handler timecode : 00:00:00:00 Stream #0:1(eng), 0, 1/24: Data: none (tmcd / 0x64636D74), 0 kb/s (default) Metadata: creation_time : 2013-09-22 02:50:22 handler_name : Apple Alias Data Handler timecode : 00:00:00:00 Successfully opened the file. Parsing a group of options: output file test4.flv. Applying option vcodec (force video codec ('copy' to copy stream)) with argument flv. Applying option pix_fmt (set pixel format) with argument yuv444p. Applying option s (set frame size (WxH or abbreviation)) with argument 1280x800. Successfully parsed a group of options. Opening an output file: test4.flv. Successfully opened the file. detected 4 logical cores [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'video_size' to value '1280x800' [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'pix_fmt' to value '30' [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'time_base' to value '1/24' [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'pixel_aspect' to value '1280/1280' [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'sws_param' to value 'flags=2' [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'frame_rate' to value '24/1' [graph 0 input from stream 0:0 @ 0000000000303bc0] w:1280 h:800 pixfmt:bgra tb:1/24 fr:24/1 sar:1/1 sws_param:flags=2 [scaler for output stream 0:0 @ 00000000003056a0] Setting 'w' to value '1280' [scaler for output stream 0:0 @ 00000000003056a0] Setting 'h' to value '800' [scaler for output stream 0:0 @ 00000000003056a0] Setting 'flags' to value '0x4' [scaler for output stream 0:0 @ 00000000003056a0] w:1280 h:800 flags:'0x4' interl:0 Incompatible pixel format 'yuv444p' for codec 'flv', auto-selecting format 'yuv420p' [format @ 00000000002f8320] compat: called with args=[yuv420p] [format @ 00000000002f8320] Setting 'pix_fmts' to value 'yuv420p' [AVFilterGraph @ 000000000085bc60] query_formats: 5 queried, 4 merged, 0 already done, 0 delayed [scaler for output stream 0:0 @ 00000000003056a0] w:1280 h:800 fmt:bgra sar:1/1 -> w:1280 h:800 fmt:yuv420p sar:1/1 flags:0x4 [flv @ 0000000000374be0] intra_quant_bias = 0 inter_quant_bias = -64 Output #0, flv, to 'test4.flv': Metadata: major_brand : qt minor_version : 537199360 compatible_brands: qt encoder : Lavf55.19.104 Stream #0:0(eng), 0, 1/1000: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 1280x800 [SAR 1:1 DAR 8:5], q=2-31, 200 kb/s, 1k tbn, 24 tbc (default) Metadata: creation_time : 2013-09-22 02:50:18 handler_name : Apple Alias Data Handler timecode : 00:00:00:00 Stream mapping: Stream #0:0 -> #0:0 (qtrle -> flv) Press [q] to stop, [?] for help frame= 27 fps=0.0 q=31.0 size= 351kB time=00:00:01.12 bitrate=2554.2kbits/s frame= 46 fps= 45 q=31.0 size= 477kB time=00:00:01.91 bitrate=2039.5kbits/s frame= 60 fps= 39 q=31.0 size= 543kB time=00:00:02.50 bitrate=1779.4kbits/s frame= 74 fps= 36 q=31.0 size= 629kB time=00:00:03.08 bitrate=1672.4kbits/s frame= 96 fps= 37 q=31.0 size= 795kB time=00:00:04.00 bitrate=1627.4kbits/s frame= 123 fps= 40 q=31.0 size= 924kB time=00:00:05.12 bitrate=1477.0kbits/s frame= 149 fps= 41 q=31.0 size= 1133kB time=00:00:06.20 bitrate=1494.7kbits/s frame= 175 fps= 43 q=31.0 size= 1224kB time=00:00:07.29 bitrate=1375.5kbits/s frame= 201 fps= 44 q=31.0 size= 1352kB time=00:00:08.37 bitrate=1322.7kbits/s frame= 228 fps= 45 q=31.0 size= 1461kB time=00:00:09.50 bitrate=1260.1kbits/s [output stream 0:0 @ 00000000003053c0] EOF on sink link output stream 0:0:default. No more output streams to write to, finishing. frame= 240 fps= 45 q=31.0 Lsize= 1600kB time=00:00:10.00 bitrate=1310.4kbits/s video:1596kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.252476% 240 frames successfully decoded, 0 decoding errors [AVIOContext @ 000000000032dfc0] Statistics: 3 seeks, 242 writeouts [AVIOContext @ 000000000085bde0] Statistics: 281664506 bytes read, 3 seeks
-
ffmpeg error on decode
25 octobre 2013, par ademar111190I'm developing an android app with the libav and I'm trying decode a 3gp with code below:
#define simbiLog(...) __android_log_print(ANDROID_LOG_DEBUG, "simbiose", __VA_ARGS__)
...
AVCodec *codec; AVCodecContext *c = NULL; int len; FILE *infile, *outfile; uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE]; AVPacket avpkt; AVFrame *decoded_frame = NULL; simbiLog("inbuf size: %d", sizeof(inbuf) / sizeof(inbuf[0])); av_register_all(); av_init_packet(&avpkt); codec = avcodec_find_decoder(AV_CODEC_ID_AMR_NB); if (!codec) { simbiLog("codec not found"); return ERROR; } c = avcodec_alloc_context3(codec); if (!c) { simbiLog("Could not allocate audio codec context"); return ERROR; } int open = avcodec_open2(c, codec, NULL); if (open < 0) { simbiLog("could not open codec %d", open); return ERROR; } infile = fopen(inputPath, "rb"); if (!infile) { simbiLog("could not open %s", inputPath); return ERROR; } outfile = fopen(outputPath, "wb"); if (!outfile) { simbiLog("could not open %s", outputPath); return ERROR; } avpkt.data = inbuf; avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, infile); int iterations = 0; while (avpkt.size > 0) { simbiLog("iteration %d", (++iterations)); simbiLog("avpkt.size %d avpkt.data %X", avpkt.size, avpkt.data); int got_frame = 0; if (!decoded_frame) { if (!(decoded_frame = avcodec_alloc_frame())) { simbiLog("out of memory"); return ERROR; } } else { avcodec_get_frame_defaults(decoded_frame); } //below the error, but it isn't occur on first time, only in 4th loop interation len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt); if (len < 0) { simbiLog("Error while decoding error %d frame %d duration %d", len, got_frame, avpkt.duration); return ERROR; } else { simbiLog("Decoding length %d frame %d duration %d", len, got_frame, avpkt.duration); } if (got_frame) { int data_size = av_samples_get_buffer_size(NULL, c->channels, decoded_frame->nb_samples, c->sample_fmt, 1); size_t* fwrite_size = fwrite(decoded_frame->data[0], 1, data_size, outfile); simbiLog("fwrite returned %d", fwrite_size); } avpkt.size -= len; avpkt.data += len; if (avpkt.size < AUDIO_REFILL_THRESH) { memmove(inbuf, avpkt.data, avpkt.size); avpkt.data = inbuf; len = fread(avpkt.data + avpkt.size, 1, AUDIO_INBUF_SIZE - avpkt.size, infile); if (len > 0) avpkt.size += len; simbiLog("fread returned %d", len); } } fclose(outfile); fclose(infile); avcodec_close(c); av_free(c); av_free(decoded_frame);
but I'm getting the follow log and error:
inbuf size: 20488 iteration 1 avpkt.size 3305 avpkt.data BEEED40C Decoding length 13 frame 1 duration 0 fwrite returned 640 fread returned 0 iteration 2 avpkt.size 3292 avpkt.data BEEED40C Decoding length 13 frame 1 duration 0 fwrite returned 640 fread returned 0 iteration 3 avpkt.size 3279 avpkt.data BEEED40C Decoding length 14 frame 1 duration 0 fwrite returned 640 fread returned 0 iteration 4 avpkt.size 3265 avpkt.data BEEED40C Error while decoding error -1052488119 frame 0 duration 0
the audio file I'm trying decode:
$ avprobe blue.3gp avprobe version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2007-2013 the Libav developers built on Mar 30 2013 22:23:21 with gcc 4.7.2 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'blue.3gp': Metadata: major_brand : 3gp4 minor_version : 0 compatible_brands: isom3gp4 creation_time : 2013-09-19 18:53:38 Duration: 00:00:01.52, start: 0.000000, bitrate: 17 kb/s Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s Metadata: creation_time : 2013-09-19 18:53:38
thanks a lot!
EDITED
I read on ffmper documentation about the method
avcodec_decode_audio4
the follow:@warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE larger than the actual read bytes because some optimized bitstream readers read 32 or 64 bits at once and could read over the end. @note You might have to align the input buffer. The alignment requirements depend on the CPU and the decoder.
and I see here a solution using
posix_memalign
, to android i founded a similar method calledmemalign
, so i did the change:removed:
uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
inserted:
int inbufSize = sizeof(uint8_t) * (AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); uint8_t *inbuf = memalign(FF_INPUT_BUFFER_PADDING_SIZE, inbufSize); simbiLog("inbuf size: %d", inbufSize); for (; inbufSize >= 0; inbufSize--) simbiLog("inbuf position: %d index: %p", inbufSize, &inbuf[inbufSize]);
I'm getting the correct memory sequence position, but the error not changed.
A piece of outpout:
inbuf position: 37 index: 0x4e43d745 inbuf position: 36 index: 0x4e43d744 inbuf position: 35 index: 0x4e43d743 inbuf position: 34 index: 0x4e43d742 inbuf position: 33 index: 0x4e43d741 inbuf position: 32 index: 0x4e43d740 inbuf position: 31 index: 0x4e43d73f inbuf position: 30 index: 0x4e43d73e inbuf position: 29 index: 0x4e43d73d inbuf position: 28 index: 0x4e43d73c inbuf position: 27 index: 0x4e43d73b inbuf position: 26 index: 0x4e43d73a inbuf position: 25 index: 0x4e43d739 inbuf position: 24 index: 0x4e43d738 inbuf position: 23 index: 0x4e43d737 inbuf position: 22 index: 0x4e43d736 inbuf position: 21 index: 0x4e43d735 inbuf position: 20 index: 0x4e43d734 inbuf position: 19 index: 0x4e43d733
-
SYNTAX ERROR : missing '(' before '{'
25 octobre 2013, par JAYANTHITHIS IS MY PIECE OF CODE
if ((test->duration >= 0) &&( av_rescale_q(test->pts, test->time_base, AV_TIME_BASE_Q) >= test->duration)) return AVERROR_EOF;
AV_TIME_BASE_Q defined by,
#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
I m getting error on AV_TIME_BASE_Q like
2>c:\users\awki6\desktop\ffmpeg\libavfilter\vsrc_testsrc.cpp(146): error C2143: syntax error : missing ')' before '{'