Reputation: 61
I got a h.264 video I would like to encode to h.265 using FFmpeg:
ffmpeg.exe -i h264source.mkv -vcodec libx265 -preset slower -threads 0 -crf 24 -an h265output.mkv
The source h.264 video is a recording of a RTMP-stream. At some point the video stops moving for 3 seconds. This is because of connection-issues of the original RTMP-stream. Of course the resulting h.265 video also stops moving for 3 seconds at the same point. But other than the h.264 video, the picture of the h.265 video is not frozen for only 3 seconds, it is frozen until the end of the video.
I am using VLCplayer 3.0.8 for playback and it shows the following messages for the h.265 video:
avcodec: Using D3D11VA (NVIDIA GeForce GT 1030, vendor 10de(NVIDIA), device 1d01, revision a1) for hardware decoding
avcodec error: hardware acceleration picture allocation failed
avcodec error: hardware acceleration picture allocation failed
avcodec error: hardware acceleration picture allocation failed
avcodec error: avcodec_send_packet critical error
When I disable hardware acceleration in VLCplayer the playback of the h.265 video works fine.
Next I encoded the h.264 to h.265 using HandBrake 1.3.0 and the resulting h.265 video also works fine in VLCplayer with hardware acceleration enabled.
So my question is: Why is the playback of the h.264 and the h.265-handbrake-videos working fine in VLCplayer but not the h.265-ffmpeg video?
When I encode the h.264 to huffyuv and then to h.265 using FFmpeg, the resulting h.265-video also works fine:
ffmpeg.exe -i h264source.mkv -vcodec huffyuv -an huffyuv.mkv
ffmpeg.exe -i huffyuv.mkv -vcodec libx265 -preset slower -threads 0 -crf 24 -an h265output.mkv
I am using the windows build by Zeranoe, ffmpeg-4.2.2-win64-static.
C:\ffmpeg>ffmpeg.exe -loglevel verbose -i h264source.mkv -vcodec libx265 -preset slower -threads 0 -crf 24 -an h265output.mkv
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
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. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[h264 @ 000001e8dc09d6c0] Reinit context to 864x480, pix_fmt: yuv420p
Input #0, matroska,webm, from 'h264source.mkv':
Metadata:
COMPATIBLE_BRANDS: isomiso2avc1mp41
MAJOR_BRAND : isom
MINOR_VERSION : 512
ENCODER : Lavf58.29.100
Duration: 00:01:55.67, start: 0.000000, bitrate: 958 kb/s
Stream #0:0: Video: h264 (Constrained Baseline), 1 reference frame, yuv420p(progressive, left), 852x480 (864x480) [SAR 1:1 DAR 71:40], 30 fps, 30 tbr, 1k tbn, 60 tbc (default)
Metadata:
ENCODER : Lavc58.54.100 libx264
DURATION : 00:01:55.666000000
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
Press [q] to stop, [?] for help
[h264 @ 000001e8dc77b080] Reinit context to 864x480, pix_fmt: yuv420p
[graph 0 input from stream 0:0 @ 000001e8dd38ee40] w:852 h:480 pixfmt:yuv420p tb:1/1000 fr:30/1 sar:1/1 sws_param:flags=2
x265 [info]: HEVC encoder version 3.2+35-acc5d16999e2
x265 [info]: build info [Windows][GCC 9.2.1][64 bit] 8bit+10bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [info]: Main profile, Level-3 (Main tier)
x265 [info]: Thread pool created using 16 threads
x265 [info]: Slices : 1
x265 [info]: frame threads / pool features : 4 / wpp(8 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 3 inter / 3 intra
x265 [info]: ME / range / subpel / merge : star / 57 / 4 / 4
x265 [info]: Keyframe min / max / scenecut / bias : 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt : 40 / 8 / 2
x265 [info]: b-pyramid / weightp / weightb : 1 / 1 / 1
x265 [info]: References / ref-limit cu / depth : 5 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress : CRF-24.0 / 0.60
x265 [info]: tools: rect amp limit-modes rd=6 psy-rd=2.00 rdoq=2 psy-rdoq=1.00
x265 [info]: tools: rskip limit-tu=4 signhide tmvp b-intra
x265 [info]: tools: strong-intra-smoothing deblock sao
Output #0, matroska, to 'h265output.mkv':
Metadata:
COMPATIBLE_BRANDS: isomiso2avc1mp41
MAJOR_BRAND : isom
MINOR_VERSION : 512
encoder : Lavf58.29.100
Stream #0:0: Video: hevc (libx265), 1 reference frame, yuv420p(left), 852x480 [SAR 1:1 DAR 71:40], q=2-31, 30 fps, 1k tbn, 30 tbc (default)
Metadata:
DURATION : 00:01:55.666000000
encoder : Lavc58.54.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
No more output streams to write to, finishing
frame= 3178 fps= 14 q=-0.0 Lsize= 5105kB time=00:01:55.56 bitrate= 361.9kbits/s speed=0.506x
video:5080kB audio:0kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: 0.492293%
Input file #0 (h264source.mkv):
Input stream #0:0 (video): 3178 packets read (13837009 bytes); 3178 frames decoded;
Total: 3178 packets (13837009 bytes) demuxed
Output file #0 (h265output.mkv):
Output stream #0:0 (video): 3178 frames encoded; 3178 packets muxed (5201780 bytes);
Total: 3178 packets (5201780 bytes) muxed
[AVIOContext @ 000001e8dc77af40] Statistics: 8 seeks, 40 writeouts
x265 [info]: frame I: 13, Avg QP:18.10 kb/s: 6779.10
x265 [info]: frame P: 1754, Avg QP:22.52 kb/s: 619.00
x265 [info]: frame B: 1411, Avg QP:31.19 kb/s: 50.69
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x265 [info]: Weighted B-Frames: Y:0.0% UV:0.0%
x265 [info]: consecutive B-frames: 67.4% 8.3% 8.6% 10.9% 2.7% 2.0% 0.2% 0.0% 0.0%
encoded 3178 frames in 228.50s (13.91 fps), 391.87 kb/s, Avg QP:26.35
[AVIOContext @ 000001e8dc0936c0] Statistics: 13860805 bytes read, 0 seeks
Any advices?
Upvotes: 3
Views: 8872
Reputation: 61
As Jay said in the comments, it has to do with forcing key frames. His link https://superuser.com/questions/908280/what-is-the-correct-way-to-fix-keyframes-in-ffmpeg-for-dash solved the problem for me.
I hope other people with the same problem will find this post to also fix the problem...
Upvotes: 3