Nin*_*ura 2 buffer ffmpeg capture
所以我一直在用 ffmpeg 遇到这个问题,这是一个让硬件和命令真正做我想做的事情的旅程,但我仍然有一个问题。
有时,当我录制时,我只是开始疯狂丢帧,这可能是在录制一个小时甚至十个小时之后......一切都会正常工作,然后突然间我会因为“实时性”而开始丢帧缓冲区太满或接近太满”。无论我将比特率设置为多低,都会发生这种情况,并且缓冲区大小在允许的范围内很高,最终我将开始丢帧。几乎看起来像是一个省电功能正在启动,但它似乎太不一致了。就像我说的,有时我可以走 10 个小时而没有这个问题。
有任何想法吗?
这是我的代码块:
ffmpeg -guess_layout_max 0 -y -f dshow -video_size 3440x1440 -rtbufsize 2147.48M -pixel_format nv12 -framerate 200 ^
-i video="Video (00 Pro Capture HDMI 4K+)":audio="SPDIF/ADAT (1+2) (RME Fireface UC)" -map 0:0,0:1 -map 0:1 ^
-preset: llhp -codec:v h264_nvenc -pix_fmt nv12 -b:v 250M -maxrate:v 250M -minrate:v 250M -bufsize:v 250M -b:a 320k ^
-ac 2 -r 100 -async 1 -vsync 1 -segment_time 600 -segment_wrap 9 -f segment C:\Users\djcim\Videos\PC\PC%02d.mp4 ^
-guess_layout_max 0 -f dshow -rtbufsize 2000M -i audio="Analog (3+4) (RME Fireface UC)" -map 1:0 -b:a 320k -ac 2 ^
-af "adelay=200|200" -segment_time 600 -segment_wrap 9 -f segment C:\Users\djcim\Videos\PC\Voices\Theirs\TPC%02d.wav ^
-guess_layout_max 0 -f dshow -rtbufsize 2000M -i audio="Analog (5+6) (RME Fireface UC)" -map 2:0 -b:a 320k -ac 2 ^
-af "adelay=825|825" -segment_time 600 -segment_wrap 9 -f segment C:\Users\djcim\Videos\PC\Voices\Mine\MPC%02d.wav
Run Code Online (Sandbox Code Playgroud)
这是错误,它在锁定 ffmpeg 之前重复了大约 300 次,迫使我在再次开始录制之前退出:
[dshow @ 0000019a596bdcc0] real-time buffer [Video (00 Pro Capture HDMI 4K+)] [video input] too full or near too full (62% of size: 2147480000 [rtbufsize parameter])! frame dropped!
Run Code Online (Sandbox Code Playgroud)
解决了,
认为解决方案是对 h.265 进行编码,但由于某种原因根本不起作用,认为这可能是我的构建,所以我获得了最新的夜间构建。仍然无法让 h.265 工作,所以我回到 h.264 并开始收到一个我之前从未见过的新警告,告诉我我的“线程队列大小”太小了。经过几个小时的反复试验/发现每个输入有一个线程队列大小,我最终得到了以下代码块:
ffmpeg -y -thread_queue_size 5096 -guess_layout_max 0 -f dshow -video_size 3440x1440 -rtbufsize 2147.48M -framerate 200 ^
-pixel_format nv12 -i video="Video (00 Pro Capture HDMI 4K+)":audio="SPDIF/ADAT (1+2) (RME Fireface UC)" -map 0:0,0:1 ^
-map 0:1 -preset: llhp -c:v h264_nvenc -pix_fmt nv12 -b:v 250M -minrate 250M -maxrate 250M -bufsize 250M -b:a 320k -ac 2 ^
-r 100 -async 1 -vsync 1 -segment_time 600 -segment_wrap 9 -f segment C:\Users\djcim\Videos\PC\PC%02d.mp4 ^
-guess_layout_max 0 -thread_queue_size 5096 -f dshow -rtbufsize 2000M -i audio="Analog (3+4) (RME Fireface UC)" -map 1:0 ^
-b:a 320k -ac 2 -af "adelay=200|200" -segment_time 600 -segment_wrap 9 -f segment ^
C:\Users\djcim\Videos\PC\Voices\Theirs\TPC%02d.wav ^
-guess_layout_max 0 -thread_queue_size 5096 -f dshow -rtbufsize 2000M -i audio="Analog (5+6) (RME Fireface UC)" -map 2:0 ^
-b:a 320k -ac 2 -af "adelay=825|825" -segment_time 600 -segment_wrap 9 -f segment ^
C:\Users\djcim\Videos\PC\Voices\Mine\MPC%02d.wav
Run Code Online (Sandbox Code Playgroud)
基本上我在每个输入中添加了 -thread_queue_size 5096,从那以后就没有在摄取时丢帧。一切都保持同步,画面非常流畅。
| 归档时间: |
|
| 查看次数: |
4826 次 |
| 最近记录: |