0244 | ใช้ GPU intel transcode video ด้วย ffmpeg
API ใหม่ๆ ของ ffmpeg จะทำงานบน vaapi (video accelerator api) เพราะงั้นเวลา transcode เลยต้องใช้ interface ของ vaapi ประมาณนี้
ffmpeg \ -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi \ -i inputfile.mp4 \ -c:v h264_vaapi -b:v 1500k -profile:v main -g 100 \ -c:a aac -b:a 128k \ -f mp4 output.mp4 |
- สั่ง ffmpeg
- ตั้งค่าให้สัญญาณ video ขาเข้า ไป decode ด้วย vaapi (เพื่อให้เอาผลลัพท์ไปใช้ต่อใน vaapi ได้)
- ระบุสัญญาณ input
- ระบุการแปลง format ให้ใช้ vaapi h264 encoder ปรับ profile/bitrate ตามชอบ option อื่นๆ ไปดูใน docs
- ตั้ง codec เสียง
- เก็บ output เป็น format mp4 ลงไฟล์ output.mp4
ref: https://trac.ffmpeg.org/wiki/Hardware/VAAPI
แถม อันนี้ใช้ vlc clean สัญญาณกล้องวงจรปิด ก่อนส่งให้ ffmpeg transcode ต่อ (ไม่รู้ทำไม ffmpeg transcode ตรงๆ ไม่ได้)
vlc \ 'rtsp://192.168.1.102/user=admin&password=&channel=1&stream=0.sdp?' \ --sout '#duplicate{dst=std{access=file,mux=ts,dst=-}}' | \ ffmpeg \ -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi \ -i - \ -c:v h264_vaapi -b:v 1500k -profile:v main -g 100 \ -y -f flv rtmp://127.0.0.1/live/cctv2 |