ffmpeg null 参数
source link: https://zhangyiming748.github.io/post/ffmpeg-null-parameters/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
中文互联网没救了,一个问题国内搜个遍,除了废话占用全文搜索权重的就是没有验证过的错误答案,最后还是原始wiki页面一点一点抠出来的
在ffmpeg
中使用null
的方法有多种
这对于测试和基准测试,创建输入和过滤非常有用
- 测试解码速度
- 无需磁盘写入成本即可测试编码速度
- 测试设备输入速度
- 创建一个空白视频"画布"用于过滤
- 制作无声音频
- 修复电视媒体播放器问题
空复用器 ¶
空复用器 不生成任何输出文件. 它主要用于测试或基准测试目的. 空复用器使用包装帧,因此没有复用开销(即它可以接受任何类型的输入编解码器,例如不必是原始视频).
解码和分离 ¶
测试解码和分离 (使用空复用器):
ffmpeg -i input -f null -
编码 ¶
它还可用于测试编码,而无需输出文件的开销.
# 此示例将映射第一个视频流,使用 libx264 进行编码,然后丢弃输出
ffmpeg -i input -map 0:v:0 -c:v libx264 -f null -
使用特定的复用器 ¶
如果您想选择复用器但实际上不输出文件,你可以输出到 /dev/null
, 或者 NUL
在Windows系统
ffmpeg -y -i input -c:v mpeg4 -f mp4 /dev/null
-benchmark
选项 ¶
添加 -benchmark
全局选项 将在编码结束时输出基准测试信息,该信息可以为空复用器提供信息. 显示使用的 CPU 时间和最大内存消耗. 并非所有系统都支持最大内存消耗; 如果不支持,通常会显示为 0
ffmpeg -benchmark -i input output
...
bench: utime=8.483s
bench: maxrss=52736000kB
unix/linux 系统用户也可以使用 time
命令
time ffmpeg -i input output
...
real 0m3.365s
user 0m8.533s
sys 0m0.541s
过滤器 ¶
有多种 null 过滤器
anull ¶
anull 音频过滤器会将音频源原封不动地传递到输出
null 视频过滤器会将视频源原封不动地传递到输出
也可以看看 如何解决电视媒体播放器问题
空源文件 ¶
空源文件 音频源过滤器可以创建无声音频 例如,要将无声音频流添加到视频
ffmpeg -i input.mp4 -f lavfi -i anullsrc -c:v copy -c:a aac -shortest output.mp4
空源文件在使用concat过滤器时特别有用 因为过滤器的所有输入必须具有相同数量的流. 例如input0
和input1
具有 48000 Hz 采样率的视频和立体声音频,而input2
仅具有视频
ffmpeg -i input0 -i input1 -i input2 -t 1 -f lavfi -i anullsrc=r=48000:cl=stereo -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][3:a]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output
注意 -t 1
输入选项:您不需要将此持续时间值与关联的视频流相匹配. 它只需要更短,因为串联过滤器将用额外的静音来填充剩余的持续时间.
Windows 用户应将上述命令中的结尾''替换为'^'
也可以看看 如何解决电视媒体播放器问题
空源文件 ¶
空源文件视频源过滤器返回未处理的(即"原始未初始化内存")视频帧. 它可以用作其他过滤器的基础,其中输入被忽略或者您不介意有些随机输入. 使用 geq 滤波器在亮度平面中生成噪声的示例
ffmpeg -f lavfi -i nullsrc=s=256x256:d=5 -vf "geq=random(1)*255:128:128" output
空水槽 ¶
The 空水槽 音频接收器对输入音频完全不执行任何操作.
空水槽 ¶
空水槽 视频接收器绝对不会对输入视频执行任何操作. ffmpeg
是"贪婪的",会抓取它能找到的任何流,所以如果你的 过滤图 不"输出"任何内容,它只会 重新编码输入并忽略过滤器. 例子:
ffmpeg -i input -filter_complex "[0:v]split[a][b];[a]nullsink" -map "[b]" output.mkv
在这种情况下,"ffmpeg"输出指定:
split:output1 -> Stream #0:0 (libx264)
...这意味着分割的第二个输出正在被编码,并且第一个输出已被发送到空水槽
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK