静止画+音声=動画(Twitter 投稿可能 MP4)作成方法

画像ファイル+音声ファイルで、静止画音声動画(Twitter に投稿可能な MP4)をつくる方法を記す。

必要なもの

  • 使用するソフト: FFmpeg
  • 画像ファイル: src.png
  • 音声ファイル: src.m4a

方法

src.pngsrc.m4a を同じディレクトリに置き、そこで以下のコマンドを実行する。

ffmpeg -y -loop 1 -i src.png -i src.m4a -shortest -tune stillimage src.mpg
ffmpeg -y -i src.mpg -an src2.mpg
ffmpeg -y -i src2.mpg -i src.m4a -acodec copy out.mp4

上記の通り、3 つのコマンドを上から順に実行していくと、どれかが失敗しない限り、目的の out.mp4 が生成される。

解説

3 つのコマンドを日本語で表現すると、

  1. 画像と音声から mpg を作成し、
  2. その mpg から音声を抜いた新 mpg を作成し、
  3. 新 mpg と音声から mp4 を作成せよ。

となる。

どうして、このような回りくどい方法なのだろうか。1 の段階でいきなり mp4 をつくればいいのではないか。これには理由がある。いきなり mp4 をつくってしまうと、VLC メディアプレイヤーでは一応再生できるものの、シークバーが効かなかったり、Twitter に投稿できなかったりと、不完全な mp4 が出来上がってしまうからだ。FFmpeg やファイルフォーマットの知識には疎い。原因不明である。

さて、以下に、コマンドの内容を一つ一つ解説する。

コマンド 1

ffmpeg -y -loop 1 -i src.png -i src.m4a -shortest -tune stillimage src.mpg

このコマンドにより、src.pngsrc.m4a から src.mpg を作成する。src.mpg は静止画+音声=動画である。

  • -y: 出力ファイル強制上書き(必ずしも必要ではないオプション)
  • -loop: 静止画を動画にする際に必要らしい?
  • -i src.png: 画像を入力
  • -i src.m4a: 音声を入力
  • -shortest: 音声の尺と同じ尺の動画を作成?
  • -tune stillimage: 静止画を動画にする際に必要らしい?
  • src.mpg: 動画を出力

コマンド 2

ffmpeg -y -i src.mpg -an src2.mpg

このコマンドにより、src.mpg から src2.mpg を作成する。src2.mpg は静止画だけの動画であり、音声はない。

  • -an: 音声を無効にする

コマンド 3

ffmpeg -y -i src2.mpg -i src.m4a -acodec copy out.mp4

このコマンドにより、src2.mpgsrc.m4a から out.mp4 を作成する。完成だ。

  • -acodec copy: 音声をエンコードせず、そのまま動画の音声として使用する。(音質が劣化してもいいなら不要なオプション)