底下的說明, 為將影片輸出到多個目的地(rtmp:flv 及 儲存檔案:h264)
推播電影
ffmpeg -i Videos/snake.mkv \ -b:v 4000k -r 24 -c:a aac -ac 1 -strict -2 -b:a 128k -ar 44100 -c:v h264_omx -f flv rtmp://mahaljsp.asuscomm.com/live/movie \ -b:v 4000k -r 24 -c:a aac -ac 1 -strict -2 -b:a 128k -ar 44100 -c:v h264_omx -f segment -segment_time 00:20:00 -reset_timestamps 1 output%03d.mp4
上述指令中, 使用硬体編碼 h264_omx, 一邊推播, 一邊儲存在樹莓派的sdcard上. 其cpu的資源耗損只有 200%(全速是 400%), 而且每秒幀輻可達24fps. 所以對樹莓派而言, 簡直是輕而易舉.
將轉檔結果儲存成檔案. 若要依一段時間就切割檔案, 使用如下參數
-segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4
推播WebCam
底下為二路編碼輸入二路, 速度很慢
nohup ffmpeg -video_size 1920x1080 -input_format mjpeg -i /dev/video0 \
-vf drawtext='fontfile=fonts/FreeSerif.ttf:text=%{localtime}:x=5:y=20:fontcolor=white:fontsize=36:box=1:boxcolor=0x000000@0.5' \
-b:v 4000k -r 24 -c:a aac -ac 1 -strict -2 -b:a 128k -ar 44100 -c:v h264_omx -f flv rtmp://mahaljsp.asuscomm.com/live/car \
-vf drawtext='fontfile=fonts/FreeSerif.ttf:text=%{localtime}:x=5:y=20:fontcolor=white:fontsize=36:box=1:boxcolor=0x000000@0.5' \
-b:v 4000k -r 24 -c:a aac -ac 1 -strict -2 -b:a 128k -ar 44100 -c:v h264_omx -f segment -segment_time 00:20:00 -reset_timestamps 1 output%03d.mp4
推播並儲存
以下使用usb webcam可以達到22fps, cpu只佔用 86%
單一編碼分二路, 一定要加 -flags global_header, 否則無法執行
#!/bin/bash
while ! ping -q -c 1 -W 1 google.com
do
sleep 1
done
ffmpeg -input_format mjpeg -video_size 1600x896 -i /dev/video0 \
-f alsa -i hw:1,0 \
-flags global_header \
-vf drawtext='fontfile=fonts/FreeSerif.ttf:text=%{localtime}:x=5:y=20:fontcolor=white:fontsize=36:box=1:boxcolor=0x000000@0.5' \
-b:v 4000k -vcodec h264_omx \
-c:a aac -b:a 64k \
-profile:v baseline -preset veryfast -pix_fmt yuv420p \
-f tee -map 0:v -map 1:a \
"[f=segment:segment_atclocktime=1:segment_time=1800:strftime=1]/home/pi/records/car_%Y%m%d-%H%M%S.mp4|\
[f=flv:onfail=ignore]rtmp://mahaljsp.asuscomm.com/live/car"