ffmpeg でパイプを使用して svg ファイルからビデオを作成する方法は?

ffmpeg でパイプを使用して svg ファイルからビデオを作成する方法は?

データベースに保存されている SVG グラフィックからビデオを作成したいと考えています。それをアーカイブするための手順は次のとおりです。

  1. データベースに接続する
  2. パイプを入力として受け取るffmpegコマンドを作成する
  3. ffmpegの子プロセスを起動する
  4. プロセスの出力を待ちます。

別のスレッドを開始します: すべての svg ファイルに対して次の操作を実行します:

  1. データベースからSVGをバイトバッファにダウンロードする
  2. ffmpeg子プロセスのstdinにバイトバッファを書き込む

コードを実行すると、svg ファイルを ffmpeg にパイプするときに問題が発生します。

を使用しましたffmpeg -f image2pipe -c:v svg -i - -c:v libx264 -y Downloads/out.mp4。しかし、ffmpeg で次のエラーが発生します。

[image2pipe @ 0x562ebd74c300] Could not find codec parameters for stream 0 (Video: svg (librsvg), none): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options

ffmpeg にフォーマットがあることがわかったのでsvg_pipe、それを試してみましたが、成功せず、同じエラーが発生しました。

もう 1 つの可能性としては、すべての svg ファイルを一時ディレクトリにダウンロードし、パイプなしで ffmpeg を使用することです。これは私が試したときには機能しました。コマンドは次のようになります。ffmpeg -i *.svg -c:v libx264 out.mp4ただし、私の場合はこれを避けたいと思います。

パイプされていないコマンドは機能するのに、パイプされたコマンド (例: cat sample.svg | ffmpeg -f svg_pipe -i - -c:v libx264 out.mp4) は失敗するのはなぜですか? また、私の場合、パイプをどのように使用すればよいですか?

現在の解決策: 私は-f rawvideo引数を使ってグラフィックスをffmpegにパイプしています。これは有効な解決策ですが、SVGグラフィックスを生のRGB形式に変換する必要があることが前提となっています。この解決策はここから得ました。答えStackoverflow で。

答え1

試行錯誤を繰り返して、うまく機能する一連の引数を見つけることができました。

cat sample.svg | ffmpeg -f svg_pipe -frame_size 1000000000 -video_size 100x100 -i - -c:v libx264 -y out.mp4


svg_pipe次のコマンドを実行すると、demuxerのオプションを取得できます。
ffmpeg -h demuxer=svg_pipe

出力:

デマルチプレクサ svg_pipe [パイプされた svg シーケンス]:
svg デマルチプレクサ AVOptions:
-frame_size .D......... フレーム サイズをバイト単位で強制します (0 から INT_MAX) (既定値は 0)
-framerate <video_rate> .D......... ビデオのフレーム レートを設定します (既定値は "25")
-pixel_format .D......... ビデオのピクセル形式を設定します
-video_size <image_size> .D......... ビデオ サイズを設定します
-loop .D......... 入力ファイル シーケンスを強制的にループします (既定値は false)

-frame_size何らかの理由で、引数を入力ファイルのサイズよりも大きく設定する必要があります。


H.264 コーデックは透明性をサポートしていないため、ほとんどの場合、出力が奇妙に見えることに注意してください (デフォルトの背景色は黒です)。SVG
を白い背景に重ねることを検討してください。


例 (Ubuntu 18.04 で FFmpeg バージョン n4.3.1 を使用):

入力:
https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/atom.svg

出力:
ここに画像の説明を入力してください

関連情報