在Powershell中忽略来自FFMPEG控制台输出的特定警告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Powershell中忽略来自FFMPEG控制台输出的特定警告相关的知识,希望对你有一定的参考价值。

有一些麻烦警告垃圾邮件我的FFmpeg控制台输出,希望有人可以提供帮助。

我在利用分段的同时输出到多个文件,以保持每个部分同步而没有音频漂移我需要将所有内容设置为恒定的整数帧速率。问题是当使用具有整数帧速率的帧帧(复制帧)时,您会在控制台中不断发出警告“过去持续时间0.x太大”。

我已经尝试过在线警告的每一个“解决方案”,但每个都有它的缺点。我发现简单地用-loglevel错误使控制台静音并使用-stats来保持某种程度的冗长是迄今为止最好的解决方案,但后来我无法看到我正在编写的控制台中哪个部分是高度的烦人。没有一个日志级别选项可以专门用于静音警告,而且从我的大量实验中没有其他方法可以有效地防止警告在我的用例中发送垃圾邮件。

在Powershell(我使用的是CMD)中,我希望我可以捕获警告并使用某种过滤器从控制台输出中省略它。我已经尝试在命令结束时抛出这个:

| Where-Object {$_ -notcontains 'Past'}

但没有运气。我对Powershell很缺乏经验,请原谅我,据我所知你想要“$ _”之后的某种对象,但我不认为FFmpeg将文本与标题或类似内容分开,所以我不确定该怎么做放在那里。

无论如何,任何帮助将不胜感激。

完整命令(无控制台抑制):

ffmpeg -y -hide_banner -thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -rtbufsize 2147.48M `
-i audio="Analog (1+2) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -rtbufsize 2147.48M `
-i audio="ADAT (5+6) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -video_size 3840x2160 -rtbufsize 2147.48M `
-framerate 60 -pixel_format nv12 -i video="Video (00 Pro Capture HDMI 4K+)":audio="ADAT (3+4) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -rtbufsize 2147.48M `
-i audio="SPDIF/ADAT (1+2) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -r 25 -f lavfi -rtbufsize 2147.48M -i color=c=black:s=50x50 `
-map 4,0 -map 0 -c:v libx264 -r 25 -rc-lookahead 50 -forced-idr 1 -sc_threshold 0 -flags +cgop `
-force_key_frames "expr:gte(t,n_forced*2)" -preset ultrafast -pix_fmt nv12 -b:v 16K -minrate 16K -maxrate 16K -bufsize 16k `
-c:a aac -ar 44100 -b:a 384k -ac 2 -vf "fps=25" -af "aresample=async=250" -vsync 1 -ss 00:00:01.479 `
-max_muxing_queue_size 9999 -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 `
-segment_format_options max_delay=0 C:UsersdjcimVideosPCTheirsTPC%02d.ts `
-map 4,1 -map 1 -c:v libx264 -r 25 -rc-lookahead 50 -forced-idr 1 -sc_threshold 0 -flags +cgop `
-force_key_frames "expr:gte(t,n_forced*2)" -preset ultrafast -pix_fmt nv12 -b:v 16K -minrate 16K -maxrate 16K -bufsize 16k `
-c:a aac -ar 44100 -b:a 384k -ac 2 -vf "fps=25" -af "aresample=async=250" -vsync 1 -ss 00:00:00.850 `
-max_muxing_queue_size 9999 -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 `
-segment_format_options max_delay=0 C:UsersdjcimVideosPCSoundboardSPC%02d.ts `
-map 2:0,2:1 -map 2:1 -c:v h264_nvenc -r 60 -rc-lookahead 120 -forced-idr 1 -strict_gop 1 -sc_threshold 0 -flags +cgop `
-force_key_frames "expr:gte(t,n_forced*2)" -preset: llhp -pix_fmt nv12 -b:v 250M -minrate 250M -maxrate 250M -bufsize 250M `
-c:a aac -ar 44100 -b:a 384k -ac 2 -af "atrim=0.086, asetpts=PTS-STARTPTS, aresample=async=250" -vsync 1 `
-max_muxing_queue_size 9999 -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 `
-segment_format_options max_delay=0 C:UsersdjcimVideosPCPCPC%02d.ts `
-map 4,3 -map 3 -c:v h264_nvenc -r 25 -rc-lookahead 50 -forced-idr 1 -strict_gop 1 -sc_threshold 0 -flags +cgop `
-force_key_frames "expr:gte(t,n_forced*2)" -preset: llhp -pix_fmt yuv420p -b:v 16K -minrate 16K -maxrate 16K -bufsize 16K `
-c:a aac -ar 44100 -b:a 384k -ac 2 -vf "fps=25" -af "pan=mono|c0=c0, adelay=120|120, aresample=async=250" -vsync 1 `
-ss 00:00:00.065 -max_muxing_queue_size 9999 -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 `
-segment_format_options max_delay=0 C:UsersdjcimVideosPCCameraCPC%02d.ts
答案

正如Gyan在我最初的问题的评论中所建议的那样 - 自2018年7月开始建立FFmpeg后,将警告发送到比默认值更高的loglevel。

更新后,警告消息不再在我的控制台中发送垃圾邮件。

以上是关于在Powershell中忽略来自FFMPEG控制台输出的特定警告的主要内容,如果未能解决你的问题,请参考以下文章

在 PowerShell 中忽略输出的更好(更清洁)方法是啥? [关闭]

在 PowerShell 中运行 openssl 命令

评估链式过滤器时忽略过滤器分号的 FFmpeg 结尾

忽略特定行的 powershell 脚本失败

为啥ffmpeg在转换https m3u8流时忽略protocol_whitelist标志?

powershell/sqlplus 错误 SP2-0042:未知命令“■@” - 忽略行的其余部分