Hero img
ffmpegコマンド

batファイルを作成し、半自動でffmpegを実行する

動画の変換ならなんでもできる万能の動画編集ソフトffmpegでよく使うコマンドの紹介。


目次

  • ffmpeg
  • 目標
  • 環境
  • コマンド
  • 動画から連番画像化
  • 連番画像から動画
  • リサイズ
  • 動画と音合成
  • デバイスの確認
  • gif
  • webp
  • apng
  • avif
  • 配信
  • デモ用ソース
  • 半自動化
  • batテンプレ
  • 修正が必要なヶ所
  • 動画変換時によく使うコマンド
  • コーディックの指定
  • 動画のコーディック指定
  • 音声のコーディック指定
  • 結局どれを使う?
  • 音の調整
  • カット
  • ピクセルフォーマット

ffmpeg

動画系、画像系を編集、変換できるソフトです。コマンドで実行する必要があるので取っつきにくいですが多くのソフトが実はこのffmpegを利用しています。

目標

ffmpegよく使うコマンドの半自動化する

環境

windows 10
windowsであれば大丈夫です。
nvidiaのグラボがあればなお良い。

コマンド

実用的なffmpegコマンド

動画から連番画像化

フレームレートを指定することで希望の間隔で画像を抽出できます。

ffmpeg -i movie.mp4 -r 15 output_%06d.png

連番画像から動画

連番から動画にするにはコーディック、ピクセルフォーマット、フレームレートを指定した方がいいです。 以下はdemo0001.jpg~demo0421.jpgの画像を使用し、60FPSの動画になります。

ffmpeg -framerate 60 -i demo.%04d.jpg -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4

リサイズ

動画サイズを横720px、縦比率に合わせる

ffmpeg -i movie.mp4 -vf scale=720:-1 out.mp4

動画と音合成

ffmpeg -i 1.mp4 -i one.wav -map 0:0 -map 1:0 comp.mp4

デバイスの確認

ffmpeg -list_devices true -f dshow -i a

gif

gifアニメーション

ffmpeg -i %1 -r 24 "%~n1.gif"

webp

optionについて
エンコード損失の指定0~100 
lossless 0 損失を許可 
画質について0=高画質,30低画質
-qscale 5 
フォーマット
format=pal8
その他 rgb24 rgba yuv420p 
アニメーションのループ回数
-loop 0

webp画像に変換

ffmpeg -i %1 -vcodec libwebp -lossless 0 "%~n1.webp"

webpアニメーション

ffmpeg -i %1 -vcodec libwebp -an -lossless 0 -qscale 5 -vf fps=8,scale=640:-1,format=pal8 -y -loop 0  "%~n1.webp"

apng

optionについて
使用する色の数
colors=16

apngアニメーション カラーパレットを作成しそれを参考に、apngで使う色を決定させている。

ffmpeg -i %1 -vf "scale=640:-1,split[m][a];[m]palettegen=max_colors=16:stats_mode=full[palette];[a][palette]paletteuse" -plays 0 -pix_fmt pal8 -r 8 -b:v 100k -y   "%~n1.apng"

avif

avif画像

ffmpeg -i %1 -c:v libaom-av1 -b:v 80k -r 8 -vf scale=640:-1,framerate=8 -pix_fmt yuv420p -aom-params lossless=0 -movflags faststart -g 80 -cpu-used 8 -y  "%~n1.avif"

libsvtav1を使っている。libaomは遅すぎて実用的ではない。

配信

rtsp

ffmpeg -re -stream_loop -1 -i "F:\rtsptest.mp4" -vcodec libx264 -bf 0  -f rtsp -rtsp_transport tcp rtsp://domain:8554/

rtmp

ffmpeg -re -stream_loop -1 -i "F:\rtsptest.mp4" -c:v h264_nvenc -c:a copy -bf 0  -f flv rtmp://domain/key

srt

srtはffmpegの古いバージョンffmpeg 4.0または、ソースからビルドをする必要があります。windowsの場合はビルドはあきらめましょう
ffmpeg -re -stream_loop -1 -i "F:\rtsptest.mp4" -c:v copy -c:a copy -f mpegts 'srt://domain:3000'

デモ用ソース

デモ映像testsrc

ffmpeg -f lavfi -re -i "testsrc=size=1280x720:rate=30" -c:v libvpx  -f rtp "rtp://192.168.1.105:5004

デモ音声sine=frequency=800

ffmpeg -f lavfi -re -i "testsrc=size=1280x720:rate=30" -f lavfi -i "sine=frequency=800" -g 0 -c:v libx264 -c:a aac -strict experimental -f flv rtmp://test/publish

半自動化

半自動化はbatファイルを作成します。

batテンプレ

@ECHO OFF
cd /d %~dp0
:REPEAT
ffmpeg -i %1 ****ffmpeg command*****
if "%~2"=="" GOTO EXIT
shift
GOTO REPEAT
:EXIT
echo msgbox "ファイル名:%~n0",vbOKOnly,"終わったよ" > %TEMP%/ffmpegmsg.vbs & %TEMP%/ffmpegmsg.vbs

batファイルの細かい説明はここではしません。

修正が必要なヶ所

以下二行だけ修正すれば大丈夫なはずです。 pause

ffmpeg -i %1 ****ffmpeg command*****
echo msgbox "ファイル名:%~n0",vbOKOnly,"終わったよ" > %TEMP%/ffmpegmsg.vbs & %TEMP%/ffmpegmsg.vbs

「echo msgbox」の部分は処理終了後にメッセージボックスを表示させています。
echoの行をただ削除してもいいのですが、処理が最後まで終わったのか分からないため「pause」にするのがいいと思います。

動画変換時によく使うコマンド

コーディックの指定

動画のコーディックを指定します。 指定しなくても勝手にやってくれるので最悪なくても問題はありません。

動画のコーディック指定

コーディックの指定を行います。
※「-vcodec」と「-c:v」は全く同じ意味です。

-vcodec h264_nvenc
-c:v libx264

h264コーディックが一般的なコーディックなのでこれさえ覚えておけば大丈夫です。 他に必要になるとすれば av1、vp9 、h265、 h265(nvidia)、vp8等を使用するかもしれません。

-c:v libsvtav1
-c:v libvpx-vp9
-c:v libx265 
-c:v nvenc_hevc
-c:v libvpx

音声のコーディック指定

音声コーディックの指定 「-c:a」または「-acodec」 使い方

-c:a mp3
-acodec aac

音声コーディック一覧 mp3 aac opus libopus alibfdk_aac libmp3lame

結局どれを使う?

こだわり等がなければこれでいいのではないか?

-c:v libx264
-c:a mp3

音の調整

無音化

-an

音量調整

-af volume=12dB

ビットレート

-ab 128k

サンプリングレート

-ar 44100

カット

ss初めの位置,終了位置 -t

-ss 200 -t 360

ピクセルフォーマット

-pix_fmt yuv420p

関連記事

コメント

コメントを書く

質問や、間違いがありましたら、お気軽にどうぞ

※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください