Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
Autostart Ffmpeg when I connect to Red5 ? [on hold]
6 novembre 2013, par Alex ScottI have setup Red5 media server on my server along with ffmpeg and I can connect to my Red5 server using Flash Media Encoder and I can view my stream within my website.
My problem is that I know you can now use ffmpeg to convert the stream into segmented files and create the m3u8 playlist.
Unfortunately, my stream is not live 24/7, only on weekends, so I want to know if it is possible to automatically start the ffmpeg decoding process when the stream is active and end it when the stream finishes?
The website which I am using this on is Official Sound FM.
Thanks in advance for helping me with this matter and if anyone should require my services to setup a similar streaming service with them, please don't hesitate to ask me.
-
libavcodec/libx264 do not produce B-frames
6 novembre 2013, par Rob SchmidtI am writing an application in C++ that uses libavcodec with libx264 to encode video. However, the encoded data ended up being much larger than I expected. I analyzed the results and discovered that my encoding never produced B-frames, only I- and P-frames.
I created a standalone utility based on the ffmpeg source code and examples to test my encoder setup. It reads in an H.264 file, re-encodes the decoded frames, and outputs the result to a file using the ITU H.264 Annex B format. I also used ffmpeg to perform the same operation so I could compare against a known good implementation. My utility never outputs B-frames whereas ffmpeg does.
I have since tried to figure out what ffmpeg does that my code doesn't. I first tried manually specifying encoder settings related to B-frames. This had no effect.
I then tried running both ffmpeg and my utility under gdb and comparing the contents of the AVStream, AVCodecContext, and X264Context prior to opening the encoder and manually setting any fields that appeared different. Even with identical settings, I still only produce I- and P-frames.
Finally, I thought that perhaps the problem was with my timestamp handling. I reworked my test utility to mimic the pipeline used by ffmpeg and to output timestamp debugging output like ffmpeg does. Even with my timestamps identical to ffmpeg's I still get no B-frames.
At this point I don't know what else to try. When I run ffmpeg, I run it with the command line below. Note that aside from the "superfast" preset, I pretty much use the default values.
ffmpeg -v debug -i ~/annexb.264 -codec:v libx264 -preset superfast -g 30 -f h264 ./out.264
The code that configures the encoder is listed below. It specifies the "superfast" preset too.
static AVStream *add_video_stream(AVFormatContext *output_ctx, AVCodec **output_codec, enum AVCodecID codec_id) { *output_codec = avcodec_find_encoder(codec_id); if (*output_codec == NULL) { printf("Could not find encoder for '%s' (%d)\n", avcodec_get_name(codec_id), codec_id); return NULL; } AVStream *output_stream = avformat_new_stream(output_ctx, *output_codec); if (output_stream == NULL) { printf("Could not create video stream.\n"); return NULL; } output_stream->id = output_ctx->nb_streams - 1; AVCodecContext *codec_ctx = output_stream->codec; avcodec_get_context_defaults3(codec_ctx, *output_codec); codec_ctx->width = 1280; codec_ctx->height = 720; codec_ctx->time_base.den = 15000; codec_ctx->time_base.num = 1001; /* codec_ctx->gop_size = 30;*/ codec_ctx->pix_fmt = AV_PIX_FMT_YUVJ420P; // try to force B-frame output /* codec_ctx->max_b_frames = 3;*/ /* codec_ctx->b_frame_strategy = 2;*/ output_stream->sample_aspect_ratio.num = 1; output_stream->sample_aspect_ratio.den = 1; codec_ctx->sample_aspect_ratio.num = 1; codec_ctx->sample_aspect_ratio.den = 1; codec_ctx->chroma_sample_location = AVCHROMA_LOC_LEFT; codec_ctx->bits_per_raw_sample = 8; if ((output_ctx->oformat->flags & AVFMT_GLOBALHEADER) != 0) { codec_ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; } return output_stream; } int main(int argc, char **argv) { // ... open input file avformat_alloc_output_context2(&output_ctx, NULL, "h264", output_path); if (output_ctx == NULL) { fprintf(stderr, "Unable to allocate output context.\n"); return 1; } AVCodec *output_codec = NULL; output_stream = add_video_stream(output_ctx, &output_codec, output_ctx->oformat->video_codec); if (output_stream == NULL) { fprintf(stderr, "Error adding video stream to output context.\n"); return 1; } encode_ctx = output_stream->codec; // seems to have no effect #if 0 if (decode_ctx->extradata_size != 0) { size_t extradata_size = decode_ctx->extradata_size; printf("extradata_size: %zu\n", extradata_size); encode_ctx->extradata = av_mallocz(extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); memcpy(encode_ctx->extradata, decode_ctx->extradata, extradata_size); encode_ctx->extradata_size = extradata_size; } #endif // 0 AVDictionary *opts = NULL; av_dict_set(&opts, "preset", "superfast", 0); // av_dict_set(&opts, "threads", "auto", 0); // seems to have no effect ret = avcodec_open2(encode_ctx, output_codec, &opts); if (ret < 0) { fprintf(stderr, "Unable to open output video cocec: %s\n", av_err2str(ret)); return 1; } // ... decoding/encoding loop, clean up, etc. return 0; }
My test utility produces the following debug output in which you can see there are no B-frames produced:
[libx264 @ 0x1b8c9c0] using mv_range_thread = 56 [libx264 @ 0x1b8c9c0] using SAR=1/1 [libx264 @ 0x1b8c9c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x1b8c9c0] profile High, level 3.1 Output #0, h264, to './out.264': Stream #0:0, 0, 1/90000: Video: h264, yuvj420p, 1280x720 [SAR 1:1 DAR 16:9], 1001/15000, q=-1--1, 90k tbn, 14.99 tbc
[libx264 @ 0x1b8c9c0] frame= 0 QP=17.22 NAL=3 Slice:I Poc:0 I:3600 P:0 SKIP:0 size=122837 bytes [libx264 @ 0x1b8c9c0] frame= 1 QP=18.03 NAL=2 Slice:P Poc:2 I:411 P:1825 SKIP:1364 size=25863 bytes [libx264 @ 0x1b8c9c0] frame= 2 QP=17.03 NAL=2 Slice:P Poc:4 I:369 P:2159 SKIP:1072 size=37880 bytes [libx264 @ 0x1b8c9c0] frame= 3 QP=16.90 NAL=2 Slice:P Poc:6 I:498 P:2330 SKIP:772 size=50509 bytes [libx264 @ 0x1b8c9c0] frame= 4 QP=16.68 NAL=2 Slice:P Poc:8 I:504 P:2233 SKIP:863 size=50791 bytes [libx264 @ 0x1b8c9c0] frame= 5 QP=16.52 NAL=2 Slice:P Poc:10 I:513 P:2286 SKIP:801 size=51820 bytes [libx264 @ 0x1b8c9c0] frame= 6 QP=16.49 NAL=2 Slice:P Poc:12 I:461 P:2293 SKIP:846 size=51311 bytes [libx264 @ 0x1b8c9c0] frame= 7 QP=16.65 NAL=2 Slice:P Poc:14 I:476 P:2287 SKIP:837 size=51196 bytes [libx264 @ 0x1b8c9c0] frame= 8 QP=16.66 NAL=2 Slice:P Poc:16 I:508 P:2240 SKIP:852 size=51577 bytes [libx264 @ 0x1b8c9c0] frame= 9 QP=16.55 NAL=2 Slice:P Poc:18 I:477 P:2278 SKIP:845 size=51531 bytes [libx264 @ 0x1b8c9c0] frame= 10 QP=16.67 NAL=2 Slice:P Poc:20 I:517 P:2233 SKIP:850 size=51946 bytes [libx264 @ 0x1b8c9c0] frame I:7 Avg QP:13.71 size:152207 [libx264 @ 0x1b8c9c0] frame P:190 Avg QP:16.66 size: 50949 [libx264 @ 0x1b8c9c0] mb I I16..4: 27.1% 30.8% 42.1% [libx264 @ 0x1b8c9c0] mb P I16..4: 6.8% 6.0% 0.8% P16..4: 61.8% 0.0% 0.0% 0.0% 0.0% skip:24.7% [libx264 @ 0x1b8c9c0] 8x8 transform intra:41.2% inter:86.9% [libx264 @ 0x1b8c9c0] coded y,uvDC,uvAC intra: 92.2% 28.3% 5.4% inter: 50.3% 1.9% 0.0% [libx264 @ 0x1b8c9c0] i16 v,h,dc,p: 7% 7% 77% 8% [libx264 @ 0x1b8c9c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 7% 15% 49% 6% 4% 3% 5% 3% 8% [libx264 @ 0x1b8c9c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 25% 24% 6% 7% 4% 6% 3% 6% [libx264 @ 0x1b8c9c0] i8c dc,h,v,p: 72% 14% 10% 4% [libx264 @ 0x1b8c9c0] Weighted P-Frames: Y:0.0% UV:0.0% [libx264 @ 0x1b8c9c0] kb/s:6539.11 ffmpeg, on the other hand, produces the following output that is almost identical but includes B-frames:
[libx264 @ 0x20b9c40] using mv_range_thread = 56 [libx264 @ 0x20b9c40] using SAR=1/1 [libx264 @ 0x20b9c40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x20b9c40] profile High, level 3.1 [h264 @ 0x20b8160] detected 4 logical cores Output #0, h264, to './out.264': Metadata: encoder : Lavf54.63.104 Stream #0:0, 0, 1/90000: Video: h264, yuvj420p, 1280x720 [SAR 1:1 DAR 16:9], 1001/15000, q=-1--1, 90k tbn, 14.99 tbc Stream mapping: Stream #0:0 -> #0:0 (h264 -> libx264)
[libx264 @ 0x20b9c40] frame= 0 QP=17.22 NAL=3 Slice:I Poc:0 I:3600 P:0 SKIP:0 size=122835 bytes [libx264 @ 0x20b9c40] frame= 1 QP=18.75 NAL=2 Slice:P Poc:8 I:984 P:2045 SKIP:571 size=54208 bytes [libx264 @ 0x20b9c40] frame= 2 QP=19.40 NAL=2 Slice:B Poc:4 I:447 P:1581 SKIP:1572 size=24930 bytes [libx264 @ 0x20b9c40] frame= 3 QP=19.78 NAL=0 Slice:B Poc:2 I:199 P:1002 SKIP:2399 size=10717 bytes [libx264 @ 0x20b9c40] frame= 4 QP=20.19 NAL=0 Slice:B Poc:6 I:204 P:1155 SKIP:2241 size=15937 bytes [libx264 @ 0x20b9c40] frame= 5 QP=18.11 NAL=2 Slice:P Poc:16 I:990 P:2221 SKIP:389 size=64240 bytes [libx264 @ 0x20b9c40] frame= 6 QP=19.35 NAL=2 Slice:B Poc:12 I:439 P:1784 SKIP:1377 size=34048 bytes [libx264 @ 0x20b9c40] frame= 7 QP=19.88 NAL=0 Slice:B Poc:10 I:275 P:1035 SKIP:2290 size=16911 bytes [libx264 @ 0x20b9c40] frame= 8 QP=19.91 NAL=0 Slice:B Poc:14 I:257 P:1270 SKIP:2073 size=19172 bytes [libx264 @ 0x20b9c40] frame= 9 QP=17.90 NAL=2 Slice:P Poc:24 I:962 P:2204 SKIP:434 size=67439 bytes [libx264 @ 0x20b9c40] frame= 10 QP=18.84 NAL=2 Slice:B Poc:20 I:474 P:1911 SKIP:1215 size=37742 bytes [libx264 @ 0x20b9c40] frame I:7 Avg QP:15.95 size:130124 [libx264 @ 0x20b9c40] frame P:52 Avg QP:17.78 size: 64787 [libx264 @ 0x20b9c40] frame B:138 Avg QP:19.32 size: 26231 [libx264 @ 0x20b9c40] consecutive B-frames: 6.6% 0.0% 0.0% 93.4% [libx264 @ 0x20b9c40] mb I I16..4: 30.2% 35.2% 34.6% [libx264 @ 0x20b9c40] mb P I16..4: 13.9% 11.4% 0.3% P16..4: 60.4% 0.0% 0.0% 0.0% 0.0% skip:13.9% [libx264 @ 0x20b9c40] mb B I16..4: 5.7% 3.3% 0.0% B16..8: 15.8% 0.0% 0.0% direct:25.7% skip:49.5% L0:43.2% L1:37.3% BI:19.5% [libx264 @ 0x20b9c40] 8x8 transform intra:39.4% inter:77.2% [libx264 @ 0x20b9c40] coded y,uvDC,uvAC intra: 90.7% 26.6% 3.0% inter: 34.0% 4.1% 0.0% [libx264 @ 0x20b9c40] i16 v,h,dc,p: 7% 7% 77% 9% [libx264 @ 0x20b9c40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 7% 16% 51% 5% 4% 3% 5% 3% 7% [libx264 @ 0x20b9c40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 27% 20% 6% 6% 3% 6% 3% 6% [libx264 @ 0x20b9c40] i8c dc,h,v,p: 71% 15% 11% 3% [libx264 @ 0x20b9c40] Weighted P-Frames: Y:0.0% UV:0.0% [libx264 @ 0x20b9c40] kb/s:4807.16 I'm sure I'm missing something simple, but I can't for the life of me see what it is. Any assistance would be greatly appreciated.
-
Convert to webm format with CFR
6 novembre 2013, par user1910483I use the webm format in my program and for normal work I need Constant frame rate(CFR), but all of the programs that I convert the video from .ogv set Variable Frame Rate (VFR). Set -qcomp 0 option to ffmpeg has no effect, although the documentation states that should be set CBR. Encoder vpxenc takes yuv420 format, so it fits poorly. Is there a program that will correctly set the CBR mode?
-
How to use ffmpeg binary in android ?
6 novembre 2013, par cjose3I want make a video from images. I see in some posts (Using FFmpeg with Android-NDK, Create a Video file from images using ffmpeg images-using-ffmpeg) That use command line, is the best choice?? it's possible?
How are build ffmpeg.so? How I can add to the project?
This is the command that pretenfi use:
ffmpeg -r 1 -pattern_type glob -i '*.jpg' out.mp4
thanks very much. I have 2 weeks search!
Sorry for my English.
-
correctly escaping text in drawtext filter
6 novembre 2013, par menteAccording to documentation
%{}:,
should be escaped with slash. But when I escape%
the text is not added. There's error message sayingStray % near ')'
. But what does it mean and how I can fix it? Command and output:$ /usr/bin/ffmpeg -y -i /home/www/255871.mov -af 'aresample=async=1:min_hard_comp=0.100000' -vf 'scale=480:trunc(ow/a/2)*2,transpose=1 [in];movie=watermarks/text-box440.mov,scale=320:55 [bg];[in][bg] overlay=x=20:y=main_h-80,drawtext=fontsize=20:fix_bounds=1:fontfile=Helvetica\\:Style=bold:fontcolor=0xe6b300:text=small kitten \%\):x=30:y=h-80+ascent/2:draw=gte(t\,0)\;lt(t\,5) [out]' -pix_fmt yuv420p -r 24.39 -map_metadata -1 -movflags +faststart -f mp4 -vcodec libx264 -b:v 800k -maxrate 1100k -bufsize 2M -bt 256k -profile:vbaseline -acodec libfdk_aac -ab 64k -ar 44100 -ac 1 /tmp/kitten.mp4 ffmpeg version 1.2 Copyright (c) 2000-2013 the FFmpeg developers built on Mar 15 2013 18:40:14 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4) configuration: --enable-gpl --enable-libmp3lame --enable-libvo-aacenc --enable-libx264 --enable-version3 --enable-pthreads --enable-libfaac --enable-nonfree --enable-libfdk_a ac --enable-fontconfig --enable-libfreetype libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/www/255871.mov': Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2012-07-17 07:42:35 model : iPhone 3GS model-rus : iPhone 3GS encoder : 4.2.1 encoder-rus : 4.2.1 date : 2012-07-17T10:42:35+0300 date-rus : 2012-07-17T10:42:35+0300 make : Apple make-rus : Apple Duration: 00:00:09.38, start: 0.000000, bitrate: 790 kb/s Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 480x360, 720 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 1200 tbc Metadata: rotate : 90 creation_time : 2012-07-17 07:42:35 handler_name : Core Media Data Handler Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s Metadata: creation_time : 2012-07-17 07:42:35 handler_name : Core Media Data Handler [Parsed_drawtext_5 @ 0x2ae9b00] Using "/usr/share/fonts/default/Type1/n019003l.pfb" [libx264 @ 0x2ae7d40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x2ae7d40] profile Constrained Baseline, level 2.1 [libx264 @ 0x2ae7d40] 264 - core 130 r2274 c832fe9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=800 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1100 vbv_bufsize=2000 nal_hrd=none ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to '/tmp/kitten.mp4': Metadata: encoder : Lavf54.63.104 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 360x480, q=-1--1, 800 kb/s, 19512 tbn, 24.39 tbc Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, mono, s16, 64 kb/s Stream mapping: Stream #0:0 -> #0:0 (h264 -> libx264) Stream #0:1 -> #0:1 (aac -> libfdk_aac) Press [q] to stop, [?] for help [Parsed_drawtext_5 @ 0x2ae9b00] Stray % near ')' Last message repeated 201 times Stray % near ')'0.0 q=27.0 size= 480kB time=00:00:07.96 bitrate= 493.4kbits/s dup=0 drop=35 [Parsed_drawtext_5 @ 0x2ae9b00] Stray % near ')' Last message repeated 77 times Starting second pass: moving header on top of the file frame= 231 fps=0.0 q=-1.0 Lsize= 1002kB time=00:00:09.47 bitrate= 866.6kbits/s dup=0 drop=50 video:921kB audio:74kB subtitle:0 global headers:0kB muxing overhead 0.680957% [libx264 @ 0x2ae7d40] frame I:1 Avg QP:24.43 size: 13264 [libx264 @ 0x2ae7d40] frame P:230 Avg QP:23.72 size: 4041 [libx264 @ 0x2ae7d40] mb I I16..4: 24.8% 0.0% 75.2% [libx264 @ 0x2ae7d40] mb P I16..4: 2.3% 0.0% 4.8% P16..4: 34.4% 28.8% 9.4% 0.0% 0.0% skip:20.3% [libx264 @ 0x2ae7d40] coded y,uvDC,uvAC intra: 62.5% 54.2% 4.4% inter: 19.6% 20.3% 0.1% [libx264 @ 0x2ae7d40] i16 v,h,dc,p: 36% 29% 19% 16% [libx264 @ 0x2ae7d40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 21% 20% 6% 8% 7% 7% 6% 6% [libx264 @ 0x2ae7d40] i8c dc,h,v,p: 65% 15% 17% 3% [libx264 @ 0x2ae7d40] ref P L0: 93.4% 4.3% 2.3% [libx264 @ 0x2ae7d40] kb/s:796.32