エロ話を垂れ流すブログ。18歳未満閲覧禁止。
当サイトの記事にはアフィリエイト広告のリンクが含まれる場合があります

pixivのうごイラにアップするときに便利なffmpegコマンド

ブログへ動画を掲載する際、pixivのうごイラにアップすることも多いのですが、その際使っているffmpegコマンドを忘れないうちに記事に掲載しておこうと思います。

うごイラの条件

  • ファイル形式はPNGまたはJPEGのみ
  • 最大枚数150枚
  • 1枚あたり8MB以下、合計30MB以下
  • アニメーションGIFの場合は上限枚数150枚、16MB以下

GIFは画質がアレなので今まで使ったことありませんが、どうしても長尺にしたいならアリなのかも?

ffmpegで動画を連番画像へ変換

30fpsなら5秒までUP可能。下記はバッチファイル例。長辺1024pxまで小さくしているのでお好みで変更をどうぞ。pix_fmtを指定しているのは、これがないとアニメ絵の場合、モスキートノイズがひどいからです。

mkdir pixiv 2>nul & del /q pixiv\*
ffmpeg -i "%~1" -vf "fps=30,scale='if(gt(iw,ih),min(1024,iw),-1)':'if(gt(iw,ih),-1,min(1024,ih))'" -q:v 3 -pix_fmt yuvj444p "pixiv\out_%%03d.jpg"

15fpsなら10秒動画までアップ可能。

mkdir pixiv 2>nul & del /q pixiv\*
ffmpeg -i "%~1" -vf "fps=15,scale='if(gt(iw,ih),min(1024,iw),-1)':'if(gt(iw,ih),-1,min(1024,ih))'" -q:v 3 -pix_fmt yuvj444p "pixiv\out_%%03d.jpg"

10fpsなら15秒動画までアップ可能だけどかなりガクガク。

mkdir pixiv 2>nul & del /q pixiv\*
ffmpeg -i "%~1" -vf "fps=10,scale='if(gt(iw,ih),min(1024,iw),-1)':'if(gt(iw,ih),-1,min(1024,ih))'" -q:v 3 -pix_fmt yuvj444p "pixiv\out_%%03d.jpg"

動画ファイルからワークフローの削除

最近はあまり使わないけど、EasyWan22などワークフローを丸ごとmp4に埋め込むケースではファイルサイズが巨大になる上、Shotcut等の動画編集ソフトがフリーズしそうになるため、このバッチファイルで一括してメタデータの削除をしていました。

@echo off
for %%f in (%*) do (
    ffmpeg -i "%%f" -map_metadata -1 -c copy "%%~nf_clean.mp4"
)

ピンポンループの作り方

動画の最初の5秒と、それを逆再生した5秒を繋げた10秒動画を作る場合のコマンド。

ffmpeg -i "%~1" -filter_complex "[0:v]trim=0:5,setpts=PTS-STARTPTS,split[v1][v2]; [v2]reverse,setpts=PTS-STARTPTS[v_rev]; [v1][v_rev]concat=n=2:v=1:a=0[outv]" -map "[outv]" -c:v libx264 -crf 18 -pix_fmt yuv420p -movflags +faststart "pingpong_%~nx1"

なぜ5秒きっかりで切り取るかというと、WanVideo 2.2などで生成した場合、81フレーム=5.0625秒と端数が出るので、そのまま2つ繋げると160枚くらいになり、うごイラの制限を超えるためです。

ピンポンループ動画の具体例

5秒あたりで逆再生しているのがわかるかと思います。

videoタグの書き方

一部の端末ではplaysinlineがないと再生直後に全画面に移行するらしいので入れておいたほうが吉。

<video src="video.mp4" autoplay loop muted playsinline></video>

videoタグで置いた動画がぐるぐるで再生できない場合

対応フォーマットなのにブラウザで再生できない場合、moov atom(ムーブ・アトム)という管理データが、ファイルの最後尾に置かれていることが原因な場合が多く、このコマンドで目次データをファイルの先頭に移動させることで解決する。

ffmpeg -i "%~1" -c copy -movflags +faststart "web_%~nx1"

h.264でギリギリまでファイルサイズを減らしたい

個人サイトを運営しているとレンタルサーバーの容量との闘いなので、互換性を保ちつつ1バイトでも減らすためにこんなバッチファイルを使っています。

ffmpeg -i "%~1" -vf "scale='if(gt(ih,1080),-2,-2)':'if(gt(ih,1080),1080,ih)'" -c:v libx264 -preset slow -tune animation -profile:v high -level 4.0 -crf 28 -pix_fmt yuv420p -movflags +faststart -map_metadata -1 -map_chapters -1 -c:a aac -b:a 96k "%~n1-diet.mp4"

CRF28まで品質を落としつつも、tune animationでアニメ絵に特化した圧縮で劣化を抑え、メタデータを排除し、解像度も1080p以下、音声があれば96kまで落とす設定です。

AV1とopusが使えたらここまでしなくても良いのだけれど、iPhoneが対応してくれないので致し方なし。

複数の動画を結合して透かしも入れたい

下記の内容で作ったバッチファイルに、複数ファイルをドラッグ&ドロップすれば結合できます。

@echo off
:: --- 設定エリア ---
set "MY_TEXT=Sample"
set "FONT_PATH=%LOCALAPPDATA%\Microsoft\Windows\Fonts\07LogoTypeGothic7.ttf"
set "FONT_PATH=%FONT_PATH:\=/%"
set "FONT_PATH=%FONT_PATH::=\:%"

:: 出力ファイル名
set "OUT_FILE=combined_web_optimized.mp4"
set "LIST_FILE=concat_list.txt"
if exist "%LIST_FILE%" del "%LIST_FILE%"
:: ------------------

:loop
if "%~1" == "" goto process
:: パスにスペースが含まれても大丈夫なように記述
echo file '%~1' >> "%LIST_FILE%"
shift
goto loop

:process
if not exist "%LIST_FILE%" goto end

echo Web最適化設定で圧縮を開始します...
echo 設定: CRF28 / SLOW / ANIMATION / Web-Optimized

ffmpeg -f concat -safe 0 -i "%LIST_FILE%" ^
 -vf "drawtext=text='%MY_TEXT%':x=W-tw-20:y=H-th-20:fontsize=H/20:[email protected]:fontfile='%FONT_PATH%'" ^
 -c:v libx264 ^
 -preset slow ^
 -tune animation ^
 -profile:v high ^
 -level 4.0 ^
 -crf 28 ^
 -pix_fmt yuv420p ^
 -movflags +faststart ^
 -map_metadata -1 ^
 -map_chapters -1 ^
 -an -y "%OUT_FILE%"

:: 一時ファイルの削除
if exist "%LIST_FILE%" del "%LIST_FILE%"

if %errorlevel% equ 0 (
    echo.
    echo 【成功】圧縮が完了しました: %OUT_FILE%
) else (
    echo.
    echo 【エラー】処理中に問題が発生しました。
)

:end
pause

WanVideoで5秒のシーンをいくつか作った後、動画繋げるだけのために編集ソフト使うの面倒だなぁと思ってバッチファイルにしました。

透かしがいらない場合はこの1行を削除すればOK。

 -vf "drawtext=text='%MY_TEXT%':x=W-tw-20:y=H-th-20:fontsize=H/20:[email protected]:fontfile='%FONT_PATH%'" ^

逆に透かしを使う場合は FONT_PATH に有効なフォント名を指定すること。

set "FONT_PATH=%LOCALAPPDATA%\Microsoft\Windows\Fonts\07LogoTypeGothic7.ttf"

まとめ

備忘録を兼ねたffmpegコマンドのメモですが、どこかの誰かのお役に立てば幸いです。

PR

関連記事

LTX2.3-10Eros v1.2とWan2.2蒸留モデルとの比較

LTXなのにエロ動画が生成できるぞー!と噂の(?) LTX2.3-10Eros で動画生成したので、Wan2.2蒸留モデルとの比較をしてみました。 生成環境はメインメモリ64GB、GPUはRTX

LTX2.3とIrodori-TTSでリップシンクテスト

先日、コメント欄でLTX2.3やIrodori-TTSの話題があり、久しぶりに音声生成したくなったので、LTX2.3でパンチラ動画作りつつ、音声も入れてみました。 LTX2.3で変な音声のまま動

z-imageで構図を作ってから動画化してみる

つい先日、Qwen Image Editデビューしたばかりですが、そのときComfyUIの公式テンプレートにZ-Image-Turboなるものがあり、ずっと気になっていました。 ChatGPT君に聞

背面手コキでモザイクテスト

EasyWan22からComfyUI公式テンプレートへ乗り換えた後は、動画編集ソフトでちまちまモザイク処理していたのですが、正直クソ面倒くさーい…と嘆いておりました。しかし先日、 EasyWanVi

コメント

  • 試したところ、libx265でエンコードした動画はiPhoneのブラウザから再生できましたので、libx265の方がlibx264より容量減るなら使ってみると良いかもしれません
    [返信]
    • ぼくもそう思っていたのですが、h265でアップすると高確率でiPhoneユーザーから再生できないという苦情が届きますw
      実機持っていないのでAIの受け売りですが、対応状況は下記のようなのでまだ全面的にH265にするのは早そうです。

      -- 以下、CharGPTによる解説

      H.265(HEVC)は「iPhoneなら必ず再生できる」わけではありません。
      対応可否は購入年ではなく、機種・iOS・動画仕様で決まります。

      【iPhone / iPad(Safari)】
      ・Safariは iOS 11以降でHEVC対応
      ・ただし 動画の仕様によっては再生不可のケースがある

      再生できない主な例(2020年以降購入でも発生する)
      ・HEVC Main10(10bit)/ HDR(HLG・PQ)動画
       → iPhone 7 / 8 / X / XR / XS などでは非対応
      ・HEVC + 特殊なプロファイル(4:2:2 / 4:4:4)
      ・Safari以外のブラウザ(Chrome / Firefox / アプリ内WebView)
      ・MPEG-TS や特殊コンテナ

      確実に再生できる条件
      ・Safari使用
      ・HEVC Main(8bit / SDR)
      ・iPhone 7以降(2016年〜)

      HDR(10bit HEVC)まで含めて安定再生できる目安
      ・iPhone XS / XR 以降(2018年〜)

      【Windows 10 / 11(Edge / Chrome)】
      ・ブラウザはHEVCを内蔵していない
      ・OSまたはGPUドライバにHEVCデコーダがあれば再生可能
      ・メーカー製PCや最近のGPUでは最初から再生できることが多い
      ・Microsoft Storeの有料HEVC拡張は「必須ではなく補助手段」

      【Firefox / Linux】
      ・FirefoxはOSやGPUに関係なくHEVC非対応
      ・Linuxブラウザも非対応

      【結論】
      ・H.265は「環境+動画仕様」を強く選ぶ
      ・iPhoneでも「HEVCだから再生できる」とは限らない
      ・一般公開Webでは H.264が唯一の安全解
      [返信]
  • 安定はどう考えても h.264 で決まりなのは間違いないですねw
    だいたいはそれで再生できるはずなので。

    h.265は10年前の古い機種はさすがにダメかもしれませんが、2021年のiPhone13だと観れました。
    いちおう自分がテストしたコマンドですが、オプションは -tag:v hvc1 を入れないとダメです。外すとiPhoneで再生できなくなります。
    ffmpeg -i "%INPUT%" -vf "scale='if(gt(iw,ih),320,-2)':'if(gt(iw,ih),-2,320)'" -c:v libx265 -crf 28 -pix_fmt yuv420p -tag:v hvc1 -c:a aac -b:a 96k -movflags +faststart "%OUT%"

    再生確認したHTMLはこちら
    <video controls playsinline>
    <source src="test.mp4" type='video/mp4; codecs="hvc1"' />
    </video>
    [返信]
    • そうそう、tagも罠なんですよねーw HEVCはライセンスで失敗しているのでもうWeb標準になることはないだろうなぁと思うちょります。AV1が最有力なのでしょうけれど、これも普及が遅れているので何年先になるか。
      自分のローカルディスクではAV1+opusで保存しているので、アップするときだけH264に変換することが多いです。

      Geminiに相談したらYouTube使えないならPornHubでも使ったら?みたいなこと言われてエー…となりましたw
      [返信]

新しいコメントを投稿する

[新規投稿]
 
TOP