3

ffmpeg null 参数

 9 months ago
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.
neoserver,ios ssh client

中文互联网没救了,一个问题国内搜个遍,除了废话占用全文搜索权重的就是没有验证过的错误答案,最后还是原始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过滤器时特别有用 因为过滤器的所有输入必须具有相同数量的流. 例如input0input1具有 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)

...这意味着分割的第二个输出正在被编码,并且第一个输出已被发送到空水槽


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK