質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

ffmpegで数枚の画像に音声をつけて動画を作成したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,303

score 18

ffmpegを初めて触っています。
「紙芝居ジェネレータ」みたいなものを作ろうとしており、以下のことを実現したいと考えています。

1:画像数枚を用意
2:ナレーション音声ファイルを用意
3:画像が切り替わるタイミングを時間指定して、1つの動画ファイルを生成

例えば、jpeg画像が3枚、ナレーション音声が40秒あったとして、
1枚目の画像:0から12.4秒
2枚目の画像:12.4秒から28.8秒
3枚目の画像:28.8秒から最後(40秒)まで
という指定を行い、指定通りの時間で画像表示しつつナレーションが入る動画をサーバ上で作成したいです。

ffmpegで実現しようとしております。ffmpeg利用時の画質低下について見識が足りず複数回動画を作成したり合成したりすると画質が落ちるのではと考えており、一発のコマンドで上記の動画作成までたどり着けたら良いなと考えています。
しかしながら、複数回の処理に別れるのでも画質低下がないか少なければば良いと思っています。

コマンド一発でうまく作成できる方法があれば、ご教示いただけたら助かります。

現在、例えば画像1つで指定秒数の無音の動画は

$ ffmpeg -r 1/12.4 -i img1.jpg out1.avi
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --disable-outdev=xv --enable-audiotoolbox --enable-sdl2 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --enable-vda --enable-videotoolbox --arch=x86_64 --enable-yasm --enable-libx265 --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Input #0, image2, from 'img1.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 37410 kb/s
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1131x707 [SAR 72:72 DAR 1131:707], 25 tbr, 25 tbn, 25 tbc
[swscaler @ 0x7fb1d700e800] deprecated pixel format used, make sure you did set range correctly
Output #0, avi, to 'out1.avi':
  Metadata:
    ISFT            : Lavf57.56.101
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1131x707 [SAR 1:1 DAR 1131:707], q=2-31, 200 kb/s, 0.08 fps, 0.08 tbn, 0.08 tbc
    Metadata:
      encoder         : Lavc57.64.101 mpeg4
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg4 (native))
Press [q] to stop, [?] for help
frame=    1 fps=0.0 q=7.2 Lsize=      65kB time=00:00:12.40 bitrate=  42.9kbits/s speed= 397x    
video:59kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9.540216%

とすると作成できました。
(再生すると12.4秒とシークバーに表示はされますが、最終の手前で再生が終了してしまいます。再生終了の原因は不明です。Macで5Kplayerで再生しています)

2つの動画の合成については、
out1.avi
out2.avi
の2つの動画があったとして、
input.txtに

file /path/to/out1.avi
file /path/to/out2.avi


という内容を記述した上で、

$ ffmpeg -f concat -safe 0 -i input.txt -c copy out3.avi


とするとout3.aviで動画が合成されることが確認できました。

音声合成については、

$ ffmpeg -i out3.avi -i voice.mp3 last.avi


で合成が可能でした。

一発で作成するコマンドがあればそれにしたいなと考えていますが、難しそうなら上記の手順をプログラムで動的に生成するようにして、動画を作ろうかと思います。

ffmpeg以外でもコマンドかプログラムから操作できる方法であれば良いので、違う方法のアドバイスをいただけるのでも助かります。
ご指摘、ご教示いただけることがあれば、是非よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

やはり一度で全部作成するのはできませんでした。
段階を踏んで作成するようにしました。

ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る