我使用以下内容对图像流进行编码:
ffmpeg -y -i pipe: -f mjpeg -r 60 -probesize 42M -s 1280x720 -vf mpdecimate,setpts=N/60/TB -vcodec libx264 -preset ultrafast -tune zerolatency -b:v 5505K -pix_fmt yuv420p out.mp4
生成的视频只能通过 ffplay 播放。这不是本文所建议的像素格式问题线. 如上所述这里,ffmpeg 在流式传输的情况下不会写入标头。
但是,如果我将它通过管道传输到另一个 ffmpeg 进程,则输出正常,可以用任何播放器播放:
ffmpeg -y -i pipe: -f mjpeg -r 60 -probesize 42M -s 1280x720 -vf mpdecimate,setpts=N/60/TB -vcodec libx264 -preset ultrafast -tune zerolatency -b:v 5505K -pix_fmt yuv420p -f nut pipe: | ffmpeg -y -i pipe: -vcodec copy out.mp4
如何在没有第二个ffmpeg的情况下获取视频文件?
答案1
您正在使用libx264
编码器对 H.264 进行编码,而不是mjpeg
。
-f mjpeg
适用于原始比特流,并且仅mjpeg
当-c:v
不是指定。您可能需要一个常规容器(如 Quicktime MOV)来保存流。
使用
ffmpeg -y -f mjpeg -i pipe:0 -r 60 -s 1280x720 -vf mpdecimate,setpts=N/60/TB -vcodec libx264 -preset ultrafast -tune zerolatency -b:v 5505K -pix_fmt yuv420p out.mp4