Raspivid + FFMPEG + killall = :-)

Raspivid + FFMPEG + killall = :-)

我正在使用 Raspivid 和 ffmpeg 录制带音频的立体声视频。效果很好。

raspivid -t 0 -n -w 1792 -h 896 -fps 20 -g 20 -ih -fl -b 8000000 -3d sbs -co -15 -fli auto -pf baseline  -o - | ffmpeg -y -f alsa -ac 2 -acodec pcm_s32le -sample_rate 11025 -thread_queue_size 32k -i hw:1,0 -thread_queue_size 32k -framerate 20 -i - -f mp4 -c:v libx264  -b:a 64k -preset ultrafast -pix_fmt yuv420p test.mp4

要停止录制过程(从节点),我正在使用:

killall -q raspivid ffmpeg

这有效(生成 test.mp4),但不会让 Raspivid/ffmpeg 完全完成工作。它会在完成时立即杀死所有内容。通常还有大约 5-10 秒的渲染时间才能完成 - 所以我从 killall 中损失了这些时间。

可以触发什么过程来停止该过程但让其完成渲染 mp4 的所有帧?

答案1

解决了

这个问题实际上与终止操作无关。真正的问题与录制管道的帧速率有关,该速率为 8 FPS。通过删除管道中的许多多余标签(例如 -thread_queue_size 32k、-c:v libx264 -b:a 64k 和 -preset ultrafast -pix_fmt yuv420p),这个问题得到了显著改善。

这个优化的管道现在以 33 FPS 稳定记录,这太棒了!

raspivid -t 0 -n -w 1792 -h 896 -fps 20 -g 20 -ih -fl -b 8000000 -3d sbs -co -15 -fli auto -pf baseline -o - | ffmpeg -y -f alsa -ac 2 -acodec pcm_s32le -sample_rate 11025 -i hw:1,0 -framerate 20 -i - -f mp4 -c:v copy -b:a 64k 测试.mp4

相关内容