0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFmpeg+SRT(その2)

Posted at

深堀

今回は、FFmpegとSRTとをトライしたときのメモの一部を記載。お題はいくつか。

SRTによるファイル転送時の受信側でのファイル保存

回線状況が細いときも含めて、今のところ下記状況がベストの組み合わせ(オプション)であった。

送信側
ffmpeg -re -i 送信ファイル -f mpegts "srt://192.168.10.202:8888?pkt_size=1316"

受信側
ffmpeg -fflags nobuffer -probesize 32k -analyzeduration 0 -i "srt://192.168.10.202:8888?mode=listener" -c copy -f mpegts output.ts(受信ファイル)

probesize(データの解析に必要なバッファ)、anlyzeduration(解析する最大時間) を指定する。あえて指定する必要はないかもしれないが、「その1」で記載したリアルタイム転送(特に回線が細い状況)では、これらのオプションを指定したほうがベターであった(ChatGPTにも聞いてトライした結果)。

ファイルフォーマット変換

オプション「-vf」の話。必要に迫られて、トライした記録。

すかし表示+再生

ffplay -i ファイル -vf "drawtext=text='HELLO':fontcolor=white:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2"

中央に「HELLO」を表示しながら、動画ファイルを再生する。

ffplay -i ファイル -vf "drawtext=text='こんにちは':fontfile='C\:/Windows/Fonts/msgothic.ttc':fontcolor=black:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2"

日本語を表示する場合、フォントを指定する(fontfile)必要がある。

すかし表示+保存

ffmpeg -i 入力ファイル -vf "drawtext=text='こんにちは':fontfile='C\:/Windows/Fonts/msgothic.ttc':fontcolor=black:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2" -c:v libx264 -preset ultrafast -c:a copy 出力ファイル

動画ファイルに「すかし」を入れて、ファイルを作成する。

解像度およびフレームレート変換

複数項目を変換するには、「""」内を「,」で区切って複数項目を指定。

ffmpeg -i ファイル -vf "scale=640:480,fps=30" -c:a copy 640x480_fps30.mp4

上記は、解像度「640x480」、フレームレート30fpsへの変換である。

フォーマット変換して表示 (Windows)

下記は、「ぼかし」を入れる(Windowsの場合、Linuxでは未調査)。

ffmpeg -i ファイル -vf "boxblur=5" -f sdl2 "Title"

他のフォーマット変換

他にも使えそうなものが多数あり。

  • "vflip":垂直反転、"hflip":水平反転
  • "setpts=PTS/2":2倍速

検索すれば、多数見つかる。

SRT

その1」で書き足りなかったところ。

ACKの数

受信側
ffplay -fflags nobuffer -autoexit "srt://192.168.56.1:8888?mode=listener"

送信側
ffmpeg -re -i 送信ファイル -f mpegts srt://192.168.56.1:8888

上記を実行したときの、単なる気づき。全体に占めるACKの割合が、送信ファイルにより異なっていた。下記は、解像度「1920x1080」、フレームレート「60fps」のケース。ACKの割合は、14.4%。

ACK_1920x1080_60fps - コピー.PNG

下記は、解像度「320x240」、フレームレート「30fps」のケース。ACKの割合は、29.8%。

ACK_320x240_30fps - コピー.PNG

両方とも再生時間はほぼ同じなのだが、低レートの方がACK多し。理由まで深追いせず。

非常に厳しい環境でのイレギュラー

回線が細く&不安定な状況では、見慣れないControl Packetあり。

送信側のあきらめ(Drop Request)

DropReq - コピー.PNG

「NAK (Loss Report)」により、受信していないデータを知らされているが、送信側にそれらのデータが存在していない場合に使われるようだ。上記では、赤枠のデータがもう存在せず、送れないという意味。

KeepAlive

KeepAlive - コピー.PNG

受信側でパケット受信タイムアウトが発生すると、「KeepAlive」を送出する。

参考

SRTのプロトコルとしての詳細については下記参照。

EOF

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?