最近在使用flutter开发项目,涉及到调用ffmpeg进行视频转码,同时希望可以在flutter中对转码进度进行监控。因此特意学习了一下ffmpeg一些特定的参数使用,使得作为外部进程的ffmpeg可以更好的和主程序进行交互,以下是我的一些心得。
1. -hide_banner
hide_banner选项可以屏蔽掉开头那一大串的版本输出,但要注意如果是使用了-version选项还是会输出功能版本等信息。
2. -progress fileName
该选项可以使得ffmpeg将处理过程的详细信息进行输出到一个文件,但如果参数为 - ,则为标准输出流stdout进行输出,输出的形式如下:
frame=0
fps=0.00
stream_0_0_q=0.0
bitrate= 0.9kbits/s
total_size=44
out_time_us=384000
out_time_ms=384000
out_time=00:00:00.384000
dup_frames=0
drop_frames=0
speed=10.9x
progress=continue
这里的progress如果是最后一次输出的话将会是end,另外这个out_time_ms的数值好像有点问题
3. -nostats
该选项可以关闭ffmpeg在处理过程中的输出,可以减少不必要的处理
另外:ffmpeg对信息的输出是stderr流,如果要直接捕获的话应该是监听stderr流,这个可以在log.c的源文件中看到相应的代码。
所以如果我们在程序中通过子进程调用ffmpeg的话,可以通过如下的方式:
ffmpeg -hide_banner -nostats -progress - -i [inputFile] [outputFile]
并监听标准输出流和标准错误流即可进行一定程度上的监控