Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ffmpegで静止画と音声をくっつけた映像を作る

More than 5 years have passed since last update.

ffmpegで静止画と音声をくっつけた映像を作る

mp3tubeみたいなのやりたいって感じ

方針

  1. 静止画を映像データにする
  2. 上記の映像と音声を合成する
  3. (゚д゚)ウマー

手順

  • 手元に静止画image.jpgと音声sound.wavがある
  • image.jpgからimage.aviを作る→image.avisound.wavを合成する
$ ffmpeg -f image2 -r 1 -loop 1 -t hh:mm:ss -i image.jpg image.avi
$ ffmpeg -i image.avi -i sound.wav out.avi
  • -fで画像を入力するという事を教える
  • -r 1でフレームレートを指定
  • -loop 1-loop_inputの代替として使った。-loop_inputは入力ストリームをループさせる。
  • -t hh:mm:ssで時間を指定する。数字をそのまま書けば秒として認識される(っぽい)
  • -i image.jpgで静止画を指定、image.aviとして出力させる。
  • このとき-vcodecとか使って映像を自由にいじれる。-s使って映像サイズを指定する事も可能。
  • フレームレートがかなり低いので、この時点で容量がかなり少なくなるはず。あまり品質を気にする必要はないと思われる。
  • image.avisound.wavの合成は特に難しいことはない。ここで-acodecとかして音声をエンコードする事も可能。映像に関して何も書かなければ映像ストリームはコピーされる。

映像のエンコード、音声のエンコードはそれぞれ作る時点で行ったほうが無駄が少ないと思う。

一連の処理を行うスクリプト

#!/bin/bash

CMDNAME=`basename $0`

if [ $# -ne 6 ]; then
    echo "Usage: $CMDNAME [-i image] [-s sound] [-o output]" 1>&2
    exit 1
fi

while getopts i:s:o: OPT
do
    case $OPT in
        "i" ) image="$OPTARG";;
        "s" ) sound="$OPTARG";;
        "o" ) output="$OPTARG";;
        * ) echo "Usage: $CMDNAME [-i image] [-s sound] [-o output]" 1>&2
        exit 1;;
    esac
done


dur=`ffmpeg -i $sound 2>&1 | grep Duration | sed -e s/Duration:\ // -e s/,.*//`

ffmpeg -f image2 -r 1 -loop 1 -t $dur -i $image temp.mp4 -s 1920x1080 -vcodec libx264 -y -threads 0
ffmpeg -i temp.mp4 -i $sound $output -acodec libfaac -threads 0
rm temp.mp4

exit

色々雑だけどまぁいいやこれで。引数をとるスクリプトを書きたかったからこういうの作っただけ。

見ればわかるけど、

  • -s 1920x1080
  • -vcodec libx264
  • -acodec libfaac

って感じでエンコしてるよ。

つかいかた

Usage: $CMDNAME [-i image] [-s sound] [-o output]
わかるよね。

  • -iで画像を指定
  • -sで音声を指定
  • -oで出力先を指定
ottyajp
最近C++/Qtしてます サンプルコードの切り貼りしか出来ないゾ!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away