きっかけ
X, Facebook, Instagramなど画像や動画をアップロードするとき、指定するファイルタイプ、サイズだけアップロードできます。以下のように、Xの仕様となります。
SNSのAPIを開発する場合、アップロードする前にメディアファイルのバリデーションをしないといけなくなります。
バリデーションのテストで指定するメディアファイルを作成する必要があります。例えば、5MBの画像ファイル、5.1MBの画像ファイル、4.9MBの画像ファイルなど
メディアファイルの作成方法
- 指定する
width
,height
の画像を作成する場合、以下のサイトで画像が生成できます。 - それ以外、ffmpegツールで任意的な画像、動画が作成できます。
- インストール方法は下記となります。
https://jp.videoproc.com/edit-convert/how-to-download-and-install-ffmpeg.htm#3.%20Linux%E3%81%A7FFmpeg%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%EF%BC%86%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 - 下記のコマンドでファイルをリサイズできます。
ffmpeg -i input.avi -vf scale=320:240 output.avi
- インストール方法は下記となります。
- 指定するファイルサイズを作成する場合
アイデア:既存ファイルサイズ + 空ファイルサイズ = 指定するファイルサイズ
例えば、20MBの画像の場合- 既存の画像ファイルサイズを確認(placeholdで作成したファイルでもよい)。
この場合既存の画像ファイルサイズは65.1kb = 65.1*1024 = 66662.4
byte - 作成したいファイルサイズは
20MB = 20*1024*1024 = 20971520
byteなので、空ファイルサイズ =20971520 - 66662.4 = 20904857.6
byte。
下記のコマンドで空ファイル作成する。count = 20904857.6/1024 = 20414(四捨五入)
。
dd if=/dev/zero of=20904857.6.dummy bs=1024 count={count}
- 既存ファイルと上記に生成した空ファイルをくっつければ、作成したいファイルサイズになります。
cat 1922x1922.png 20904857.6.dummy > 20MB.png
- 既存の画像ファイルサイズを確認(placeholdで作成したファイルでもよい)。
- 指定する
width
,height
の動画を作成する場合、ffmpegツールで作成できます。- 下記のコマンドで1920x1922.pngファイルから、5秒の1922x1922の動画が生成できます。
ffmpeg -loop 1 -framerate 30 -i 1920x1922.png -c:v libx264 -t 5 -pix_fmt yuv420p 1920x1922.mp4
- 指定するサイズの動画を作成する場合、画像と同じ方法で作成できます。既存動画ファイルサイズ + 空ファイルサイズ = 指定するファイルサイズ
- 下記のコマンドで1920x1922.pngファイルから、5秒の1922x1922の動画が生成できます。
まとめ
ffmpegで指定するwidth
, height
, size
, 再生時間
ファイルを作成できるようになります。組み合わせてテスト用のファイル作成は十分だと思います。