Skip to content

Instantly share code, notes, and snippets.

@windyakin
Created July 26, 2020 09:13
Show Gist options
  • Save windyakin/a82cc68a0f64a9e8b57555c8ba975c05 to your computer and use it in GitHub Desktop.
Save windyakin/a82cc68a0f64a9e8b57555c8ba975c05 to your computer and use it in GitHub Desktop.
ffmpeg broadcast with clock command

ffmpeg で時間表示しながらエンコードするやつ

自分用のメモなので大した情報はないです

環境

  • Raspberry Pi 3 B+ Rev 1.2
    • 1280x720 の動画のエンコードをギリギリリアルタイムでできる程度の能力しかない
    • 電源も大した電圧用意できなかったので変えたら変わるかも
    • 今回実験で使ったのが Docker なので直に動かしたらもうちょっと改善する?
    • ただCPUパフォーマンスを考えると Raspberry Pi 4 とかにするほうがいろいろ手っ取り早い気もする
  • ffmpeg
    • on Docker
    • linuxserver/ffmpeg

ffmpeg のコンテナを起動する

docker run --rm -it -e TZ=Asia/Tokyo -v $(pwd):/mnt --entrypoint /bin/bash linuxserver/ffmpeg

command.sh の解説

-re

  • 等倍速モードにするやつ
  • 入力に対してエンコードが早くできると困るときに使う
    • 使用する場面としては生配信のエンコードぐらいしか思いつかないが

-i

  • input

-vf

  • Video Filterの略 ここ以下になんか色々足していくので読みづらくなる
  • 描画エフェクトを複数指定できる
  • エフェクト同士の区切りは ,
  • エフェクトのオプションに関する区切りは :
  • ネットに転がってるエフェクトを見ると一見難しそうだが↑がわかれば何をしているかが一目瞭然

drawbox

図形描画

  • y=(ih-h)
    • 出現する箱の y point (縦位置) の指定
    • ih は Input Height = 入力している動画の高さ
    • h は Height = 自分自身の高さ
  • w=iw
    • 出現する箱の width (幅)
    • iw は Input Width = 入力してる動画の幅
  • h=110
    • 出現する箱の height (高さ)
  • t=fill
    • thickness の略らしい
    • 数値を指定すると border の幅を指定できる的な雰囲気を感じた
    • fill にすると塗りつぶし
  • color=black@0.8
    • 出現する箱の色
    • @ 以降の数値は不透明度

drawtext

文字描画

  • fontfile=/mnt/Cica-Bold.ttf
    • フォントファイル
    • 日本語とかもいけるっぽい
  • fontsize=30
    • フォントサイズ
  • textfile='/mnt/insert.txt'
    • これでテキストファイルを入力することができる
  • reload=1
    • エンコ中にテキストファイルの更新をすると動画内のテキストも切り替える
  • fontcolor=white@1
    • テキスト色指定
    • @ 以降の数値は不透明度
  • x=w-mod(4*n\,w+tw)
    • テキストの x position = 横位置
    • このコマンドではスクロールするようにしている
    • w-mod は計算式をこういい感じにする
    • 4*nn の4倍速でスクロール
    • w は Width で入力している動画の幅
    • tw は Text Width の略
  • y=(h-th/2)-40
    • テキストの y position = 縦位置
    • h は Height で入力している動画の高さ
    • th は Text Height の略
  • bordercolor=black@0.8
    • 縁取りの色
  • borderw=1
    • 縁取りの太さ
ffmpeg -re -i /mnt/input.mp4 \
-vf "drawbox= y=(ih-h): w=iw: h=110: t=fill: color=black@0.8, drawtext= fontfile=/mnt/Cica-Bold.ttf: fontsize=30: textfile='/mnt/insert.txt': reload=1: fontcolor=white@1: x=w-mod(4*n\,w+tw): y=(h-th/2)-40: bordercolor=black@0.8: borderw=1" \
-preset ultrafast \
/mnt/output.mp4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment