Newest 'x264' Questions - Stack Overflow
Les articles publiés sur le site
-
Android jni x264_encoder_encode Out of memory error
25 octobre 2020, par Stanley WintergreenI am using a library x264 to encode a video stream from a camera into a codec h264. I follow examples like: 1, 2, 3. I am receiving data from a camera using
Camera.setPreviewCallbackWithBuffer
.During the call of the method
x264_encoder_encode
, memory is allocated inside the JNI that is not released and after a while I get an out of memory error. I wrote this JNI. The following code is enough to reproduce the problem:JNIEXPORT jbyteArray JNICALL Java_org_videolan_x264_x264JNI_encode( JNIEnv *env, jclass cls, jlong encoder_context_pointer, jbyteArray decoded, jlong time ) { EncoderContext* encoder_context = (EncoderContext*) encoder_context_pointer; x264_nal_t* pp_nal; int pi_nal; x264_picture_t picture_out; int frame_size = x264_encoder_encode( encoder_context->x264_encoder, &pp_nal, &pi_nal, &encoder_context->picture_in, &picture_out ); return NULL; }
It seems to me that I take into account everything that is recommended in the examples, but apparently this is not so. I also believe that the method works because I receive an array with the expected data in response.
-
How can I learn the effective quality of the h264_nvenc encoder ?
24 septembre 2020, par pfdint2I seek to ascertain the end-product quality of various cq ("constant quality") values for the h264_nvenc video encoder.
To use the h264_nvenc encoder through ffmpeg and with a target quality, I follow the instructions in Nvidia's documentation, last paragraph of the linked anchor.
I specify a Variable Bit Rate rate control mode (rc=vbr_hq) and a target quality (cq=
). This should be enough to test various values of cq. The story should end there. HOWEVER, that only outputs the same perfect quality video of extremely large size for any cq value. (Using cq=1, cq=20, and cq=51 all output a file with the same hash.)
Per documentation, I can also specify a maxBitRate (maxrate=
). If I don't specify a maxrate, the documentation indicates: If maxBitRate is not specified, the encoder will use as many bits as needed to achieve the target quality.
But that's not the behavior I'm observing. I'm seeing the encoder use as many bits as possible, not as many bits as needed. The resultant video has an overall bitrate of ~100Mb/s. Double the source video.
If I do set a maxrate, it is observed by the encoder. But if I have to set the bitrate correctly for every cq value, what is the point of the cq value? I would just set cq=1 and test various bitrates, which would then only be applicable to a specific video.
Is there some warning or output that notes that the bitrate was insufficient to reach the target quality that I'm not seeing? That would at least allow me to brute force this.
Or am I misunderstanding the relationship between these settings?
-
FFMPEG creates incorrect Source duration
13 septembre 2020, par Byron WhitlockWhen transcoding movies from an AVI to mp4 sometimes FFMPEG sets the "Source Duration" incorrectly.
This messes up playback on IOS devices. Specifically, it causes the video to cut out at "Source duration" while the audio still plays.
FFMPEG output transcode doesn't' show anything odd at all. Looks normal, no errors or warnings.
- Can I force FFMPEG to never add the "Source Duration" metadata?
- How do I edit the track metadata shown by mediainfo? I tried Mp4box, and a few others, but I can't seem to figure out how to edit track level metadata.
Thanks.
Log is below.
ffmpeg version N-77455-g4707497 Copyright (c) 2000-2015 the FFmpeg developers built with gcc 5.2.0 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --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-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib libavutil 55. 11.100 / 55. 11.100 libavcodec 57. 20.100 / 57. 20.100 libavformat 57. 20.100 / 57. 20.100 libavdevice 57. 0.100 / 57. 0.100 libavfilter 6. 21.101 / 6. 21.101 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Input #0, avi, from 'E:\MEDIA\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO.avi': Metadata: encoder : VirtualDubMod 1.5.10.2 (build 2542/release) Duration: 01:51:43.27, start: 0.000000, bitrate: 1765 kb/s Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x304 [SAR 1:1 DAR 45:19], 1563 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn, 23.98 tbc Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s [libx264 @ 000000f3c80a0a80] using SAR=405/304 [libx264 @ 000000f3c80a0a80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2 [libx264 @ 000000f3c80a0a80] profile High, level 3.1 [libx264 @ 000000f3c80a0a80] 264 - core 148 r2638 7599210 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - 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=23 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=1280 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'F:\STREAMS\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO.avi.1280x720_1000kbps.TEMP.mp4': Metadata: encoder : Lavf57.20.100 Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 405:304 DAR 45:19], q=-1--1, 1280 kb/s, 23.98 fps, 10000k tbn, 23.98 tbc Metadata: encoder : Lavc57.20.100 libx264 Side data: unknown side data type 10 (24 bytes) Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 160 kb/s Metadata: encoder : Lavc57.20.100 aac Stream mapping: Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (ac3 (native) -> aac (native)) Press [q] to stop, [?] for help [mpeg4 @ 000000f3c80ae220] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using the mpeg4_unpack_bframes bitstream filter without encoding but stream copy to fix it. frame= 15 fps=0.0 q=0.0 size= 0kB time=00:00:01.18 bitrate= 0.3kbits/s dup=1 drop=0 speed=2.36x --SNIP--- frame=160704 fps= 16 q=30.0 size= 1180376kB time=01:51:43.08 bitrate=1442.6kbits/s dup=1 drop=0 speed=0.671x [libx264 @ 0000001f60c5d900] frame I:1167 Avg QP:19.08 size: 44465 [libx264 @ 0000001f60c5d900] frame P:63049 Avg QP:22.26 size: 12774 [libx264 @ 0000001f60c5d900] frame B:110691 Avg QP:24.81 size: 2739 [libx264 @ 0000001f60c5d900] consecutive B-frames: 6.0% 22.8% 18.3% 53.0% [libx264 @ 0000001f60c5d900] mb I I16..4: 14.0% 76.1% 9.9% [libx264 @ 0000001f60c5d900] mb P I16..4: 2.5% 6.6% 0.4% P16..4: 44.5% 10.8% 5.2% 0.0% 0.0% skip:30.0% [libx264 @ 0000001f60c5d900] mb B I16..4: 0.1% 0.3% 0.0% B16..8: 32.1% 1.6% 0.2% direct: 0.9% skip:64.9% L0:37.9% L1:58.7% BI: 3.5% [libx264 @ 0000001f60c5d900] final ratefactor: 23.25 [libx264 @ 0000001f60c5d900] 8x8 transform intra:70.8% inter:85.8% [libx264 @ 0000001f60c5d900] coded y,uvDC,uvAC intra: 47.1% 56.6% 19.5% inter: 10.7% 14.2% 0.4% [libx264 @ 0000001f60c5d900] i16 v,h,dc,p: 46% 20% 8% 26% [libx264 @ 0000001f60c5d900] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 17% 25% 5% 7% 7% 7% 6% 6% [libx264 @ 0000001f60c5d900] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 20% 12% 5% 10% 9% 8% 5% 4% [libx264 @ 0000001f60c5d900] i8c dc,h,v,p: 58% 18% 18% 6% [libx264 @ 0000001f60c5d900] Weighted P-Frames: Y:1.4% UV:0.8% [libx264 @ 0000001f60c5d900] ref P L0: 62.6% 12.9% 18.9% 5.6% 0.1% [libx264 @ 0000001f60c5d900] ref B L0: 87.6% 11.0% 1.4% [libx264 @ 0000001f60c5d900] ref B L1: 94.6% 5.4% [libx264 @ 0000001f60c5d900] kb/s:1272.59 [aac @ 0000001f60b52180] Qavg: 954.859
Edit
This has something to do with data, when I run this command (cut at 10 minutes)
ffmpeg.exe -i CI.mp4 -ss 00:00:00 -t 00:08:00 -vcodec copy -map_metadata 0 -acodec copy CI2.mp4
Mediainfo shows
Duration : 9mn 49s Source duration : 2mn 40s
When I run this one (18 minutes)
ffmpeg.exe -i CI.mp4 -ss 00:00:00 -t 00:18:00 -vcodec copy -map_metadata 0 -acodec copy CI2.mp4
Mediainfo shows
Duration : 17mn 49s Source duration : 3mn 30s
How can I edit the metadata directly
-
What is ffmpeg, avcodec, x264 ? [closed]
11 septembre 2020, par onmyway133From wiki, I read that
FFmpeg is a free software project that produces libraries and programs for handling multimedia data. The most notable parts of FFmpeg are libavcodec, an audio/video codec library used by several other projects, libavformat, an audio/video container mux and demux library, and the ffmpeg command line program for transcoding multimedia files.
So ffmpeg is a wrapper of avcodec? And I often hear that people encode video with x264 using ffmpeg. So ffmpeg is also a wrapper of x264?
How are they related ?
-
how to make omxh264enc output filler data ?
8 septembre 2020, par BlueWaterCrystalI require filler data from the encoder to artificially raise the bitrate to sustain constant bitrate.
normally x264enc does this but omx264enc doesn't seem to. even though there seems be a value within its code PROP_FILLER_DATA