FFmpeg使い方例
目次
- 1. 概要
- 2. 関連文書
- 3. 動画の情報確認
- 4. 動画の情報をFFmpegを利用して調べる方法の紹介
- 5. サポートしているコーデックの確認
- 6. 動画からの音声の抜き出し(劣化無し)
- 7. 動画からの動画部分のみの切り出し(音削除)(劣化無し)
- 8. 分離した音なし動画と音声の再合成(劣化無し)
- 9. 動画から一部切り出し
- 10. 動画や音声のフォーマット変換(劣化あるときも)
- 11. 複数の同じエンコード動画の無劣化結合
- 12. 音量調節
- 13. 公式文書のフィルターの紹介の例の最初をやってみた。
- 14. 2つの音を、時間をずらして合成
- 15. 動画から複数の画像に分離
- 16. 複数の静止画像から動画作成
- 17. 1枚の静止画像から指定長さの動画作成
- 18. 1枚の静止画像から用意した音ファイルと同じ長さの動画作成
- 19. 同じ動画をN回繰り返す動画の作成
- 20. バックグラウンドミュージックをループで無音動画に追加
- 21. バックグラウンドミュージックをボリューム調節して、ループで音あり動画に追加
- 22. 画像サイズを同じ比率で縮小
- 23. 動画を範囲指定で切り抜き
- 24. 出力動画のフレームレート(FPS)を指定する
- 25. 早送りorスロー化
- 26. 動画の一部のみを切り出して早送りorスロー
- 27. 動画の一部のみを切り出して画像サイズ変更して、さらに早送りorスロー
- 28. 今後
- 29. この文書のチェンジログ
1 概要
- FFmpegで、動画から音声のみ抜き出すとか、一部切り出しを良く行っていた
- 今日、将棋の動画を撮っていて、途中で通信エラーになった部分を除いて(対戦中2度発生)みて、その手順を動画にしてみようと思い、このシリーズ作りました。
2 関連文書
- 公式マニュアル https://ffmpeg.org/ffmpeg.html
- 公式フィルター関係 https://ffmpeg.org/ffmpeg-filters.html
- ネット検索するなら、「ffmpeg やりたいこと」でネット検索すれば、すぐ調べれる。ただ、昔のバージョンだけでしか使えない記述方法があったりして、最新のffmpegだと使えないケースあるので、公式サイトの文書や配布物に含まれる文書で確認した方が安全
- wiki https://trac.ffmpeg.org/wiki/で興味深い項目
- FFmpeg Filtering Guide https://trac.ffmpeg.org/wiki/FilteringGuide
- Xfade https://trac.ffmpeg.org/wiki/Xfade
- FFmpeg afade/acrossfade filter curves illustration https://trac.ffmpeg.org/wiki/AfadeCurves
- Manipulating audio channels https://trac.ffmpeg.org/wiki/AudioChannelManipulation
- Slideshow https://trac.ffmpeg.org/wiki/Slideshow
- Create a thumbnail image every X seconds of the video https://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video
- How to take multiple screenshots to an image (tile, mosaic) https://trac.ffmpeg.org/wiki/How%20to%20take%20multiple%20screenshots%20to%20an%20image%20(tile%2C%20mosaic)
- Create a mosaic out of several input videos https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos
- Create a mosaic out of several input videos using xstack https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos%20using%20xstack
3 動画の情報確認
3.1 以下の操作を行っている動画
3.2 動画の情報確認
ffmpeg -i 調査対象ファイル
3.3 この章のまとめ
4 動画の情報をFFmpegを利用して調べる方法の紹介
5 サポートしているコーデックの確認
- コンパイル方法により、サポートしているコーデックが異るので、確認する必要があったりする
5.1 以下の操作を行っている動画
5.2 サポートしているコーデックの確認手順
ffmpeg -codecs
- Dがついているもの Demuxing supported(読み込み)
- Eがついているもの Muxing supported(書き込み)
- 以下もマニュアルにある確認コマンド(他にも色々あり、マニュアル確認) https://ffmpeg.org/ffmpeg.html#Stream-specifiers-1
ffmpeg -formats
5.3 この章のまとめ
- 使っているffmpegのサポートコーデックの確認方法について
6 動画からの音声の抜き出し(劣化無し)
6.1 以下の操作を行っている動画
6.2 音声だけの抜き出し手順
ffmpeg -i 元動画ファイル名 -vn -c copy 出力ファイル名 ffmpeg -i 元動画ファイル名 -c copy 出力ファイル名
- -vn ビデオ出力オフオプション(私の環境だと無くてもいけた)
- -c copyが無変換で、そのまま抜き出す(無劣化)
- 元ファイルをtest.mp4で、音声
ffmpeg -i test.mp4 -c copy test.aac
6.3 時間指定での抜き出し(開始時間と、時間の長さ指定)
- 開始時間9秒から3秒間抜き出す場合
- -ssオプションは前と後で動作が異るらしい。後につけると時間がより正確で、前だと速度はやくなるという情報があった
- 正確な時間ではなく、最も近いseekポイントを起点として処理されるらしい
- https://ffmpeg.org/ffmpeg.html#Main-options
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -t 3 -c copy test2.aac ffmpeg -ss 00:09 -i test.mp4 -t 3 -c copy test3.aac
6.4 時間指定での抜き出し(開始時間と、終了時間指定)
- 開始時間が9秒から、終了時間が12秒
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -to 00:12 -c copy test4.aac ffmpeg -ss 00:09 -to 00:12 -i test.mp4 -c copy test5.aac
- test2.aac test4.aac が同じファイルだった
- test3.aac test5.aac が同じファイルだった
- これだと、長さが12秒の音声となった
ffmpeg -ss 00:09 -i test.mp4 -to 00:12 -c copy test6.aac
6.5 この章のまとめ
- 動画から音を抜き出す手順について
7 動画からの動画部分のみの切り出し(音削除)(劣化無し)
7.1 以下の操作を行っている動画
7.2 動画からの動画部分のみの切り出し(音削除)手順
ffmpeg -i 元動画ファイル名 -an -c copy 出力ファイル名
- -an audio部分を除いて出力(音無しに)
- -c copyが無変換で、そのまま抜き出す(無劣化)
- 元ファイルをtest.mp4で、音声
ffmpeg -i test.mp4 -an -c copy test-ov.mp4
7.3 時間指定での抜き出し(開始時間と、時間の長さ指定)
- 開始時間9秒から3秒間抜き出す場合
- -ssオプションは前と後で動作が異るらしい。後につけると時間がより正確で、前だと速度はやくなるという情報があった
- 正確な時間ではなく、最も近いseekポイントを起点として処理されるらしい
- https://ffmpeg.org/ffmpeg.html#Main-options
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -t 3 -an -c copy test2-vo.mp4 ffmpeg -ss 00:09 -i test.mp4 -t 3 -an -c copy test3-vo.mp4
7.4 時間指定での抜き出し(開始時間と、終了時間指定)
- 開始時間が9秒から、終了時間が12秒
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -to 00:12 -an -c copy test4-vo.mp4 ffmpeg -ss 00:09 -to 00:12 -i test.mp4 -an -c copy test5-vo.mp4
- test2-vo.mp4 test4-vo.mp4 が同じファイルだった
- test3-vo.mp4 test5-vo.mp4 が同じファイルだった
7.5 この章のまとめ
- 動画から音抜きの動画を抜き出す方法について
8 分離した音なし動画と音声の再合成(劣化無し)
8.1 以下の操作を行っている動画
8.2 分離した音なし動画と音声の再合成手順
ffmpeg -i 音無し動画ファイル名 -i 音声ファイル -c copy 出力ファイル名
- -c copyが無変換で、そのまま抜き出す(無劣化)
- 元ファイルをtest-vo.mp4で、音声ファイルをtest.aac
ffmpeg -i test3-vo.mp4 -i test3.aac -c copy test3-new.mp4
8.3 この章のまとめ
- 音あるいは画像に加工して再合成する時に使ってる手順の紹介
9 動画から一部切り出し
9.1 以下の操作を行っている動画
9.2 動画から切り出し手順
ffmpeg -ss 開始時間 -i 元動画ファイル名 -t 秒単位で切り出す動画の時間幅 -c copy 出力ファイル名 ffmpeg -ss 開始時間 -to 終了時間 -i 元動画ファイル名 -c copy 出力ファイル名
9.3 時間指定での抜き出し(開始時間と、時間の長さ指定)
- 開始時間9秒から3秒間抜き出す場合
- -ssオプションは前と後で動作が異るらしい。後につけると時間がより正確で、前だと速度はやくなるという情報があった
- 正確な時間ではなく、最も近いseekポイントを起点として処理されるらしい
- https://ffmpeg.org/ffmpeg.html#Main-options
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -t 3 -c copy out2.mp4 ffmpeg -ss 00:09 -i test.mp4 -t 3 -c copy out3.mp4
9.4 時間指定での抜き出し(開始時間と、終了時間指定)
- 開始時間が9秒から、終了時間が12秒
- 以下だと上手く動作している(ファイルの長さが異るので、動作内容は異ると思われる)
ffmpeg -i test.mp4 -ss 00:09 -to 00:12 -c copy out4.mp4 ffmpeg -ss 00:09 -to 00:12 -i test.mp4 -c copy out5.mp4
9.5 オプション場所による違い
- out2.mp4 out4.mp4 が同じファイルだった
- out3.mp4 out5.mp4 が同じファイルだった
10 動画や音声のフォーマット変換(劣化あるときも)
10.1 以下の操作を行っている動画
10.2 動画フォーマット変換手順
ffmpeg -i 元動画ファイル名 出力ファイル名
- 例 aacをwavフォーマットに変換
ffmpeg -i test.aac test.wav
- 例 mp4をmkvフォーマットに変換
ffmpeg -i test.mp4 test.mkv
10.3 この章について
- 動画や、音声ファイルのフォーマット変換について
11 複数の同じエンコード動画の無劣化結合
11.1 以下の操作を行っている動画
11.2 複数の同じエンコード動画の無劣化結合手順
11.2.1 元動画(ここではtest.mp4)から3つの動画を無劣化で切り出し
- 復習かねて、昔の章でやった手順で3つのファイルを切り出し。
ffmpeg -ss 開始時間 -to 終了時間 -i 元動画ファイル名 -c copy 出力ファイル名
- 最初の3秒切り出し
ffmpeg -to 00:03 -i test.mp4 -c copy x01.mp4
- 9秒から12秒まで切り出し
ffmpeg -ss 00:09 -to 00:12 -i test.mp4 -c copy x02.mp4
- ファイルの最初からの時間ではなく、終わりを基準に指定するのにsseofオプションがある。以下だと終わりの時間を指定して、最後までを切り出し
ffmpeg -sseof ファイル末端からの時間で開始時間指定 -i 元動画ファイル名 -c copy 出力ファイル名
- 動画の最後の3秒切り出し
ffmpeg -sseof -00:03 -i test.mp4 -c copy x03.mp4
- 以上の手順でx01.mp4,x02.mp4,x03.mp4を用意できた。
11.2.2 上で作成した3つの動画を結合するのに必要なファイル作成
- 結合するファイルを書式にのっとって記述したファイルを用意
- 今回は filelist.txt というファイル名で以下の内容で作成します。
file 'x01.mp4' file 'x02.mp4' file 'x03.mp4'
11.2.3 上で作成した3つの動画を結合して1つの動画を作成する
ffmpeg -f concat -safe 0 -i 結合したいファイルを規約にしたがって記述したファイル名 -c copy 出力ファイル名
- 今回だと
ffmpeg -f concat -safe 0 -i filelist.txt -c copy xout.mp4
11.3 この章について
- 複数の同じエンコードの動画を無劣化で結合する手順について記述してみました。
12 音量調節
12.1 以下の操作を行っている動画
12.2 音量調節手順
12.2.1 ボリューム変更
- ボリュームを3割に
- 入力ファイル test.mp4 出力ファイルを test_a_3.mp4 とした場合
ffmpeg -i test.mp4 -filter:a "volume=0.3" test_a_3.mp4
- 増やす場合は0.3を1より大きな数にする。
- dBでやるには、0.3の部分を増やすならプラスで、減らすならマイナスの値+dBで指令するらしい(ex. -10dB)
- ラウドネスの正規化(これが良いらしい)
- 公式サイトの文書 https://ffmpeg.org/ffmpeg-filters.html#loudnorm
- 音量の変化がわかりやすいように、先程ボリューム下げた動画を元に正規化してみます。(通常であれば、元の動画を変換した方が劣化が少なくてすみます。)
ffmpeg -i test_a_3.mp4 -filter:a loudnorm test_loudnorm.mp4
- ピークや、平均で規格化(normalize)
- 元ファイルの音を分析
ffmpeg -i test_a_3.mp4 -filter:a volumedetect -f null /dev/null
- 以下のような出力が得られる
.... 省略 video:589kB audio:1716kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown [Parsed_volumedetect_0 @ 0x5595cad71400] n_samples: 878592 [Parsed_volumedetect_0 @ 0x5595cad71400] mean_volume: -29.6 dB [Parsed_volumedetect_0 @ 0x5595cad71400] max_volume: -13.4 dB [Parsed_volumedetect_0 @ 0x5595cad71400] histogram_13db: 4 [Parsed_volumedetect_0 @ 0x5595cad71400] histogram_14db: 86 [Parsed_volumedetect_0 @ 0x5595cad71400] histogram_15db: 1705
- 平均は(mean_volume)でわかる -29.6db
[Parsed_volumedetect_0 @ 0x5595cad71400] mean_volume: -29.6 dB
- 最大は(max_volume)でわかる -13.4db
[Parsed_volumedetect_0 @ 0x5595cad71400] max_volume: -13.4 dB
- 調べた数値を元にボリューム変更
- 平均を元に規格化するなら
ffmpeg -i test_a_3.mp4 -filter:a "volume=29.6dB" test_norm_mean.mp4
- マックス値を元に規格化するなら
ffmpeg -i test_a_3.mp4 -filter:a "volume=13.4dB" test_norm_max.mp4
- 元ファイルの音を分析
- ffmpeg-normalizeによる処理
- Pythonのffmpeg-normalizeを利用すると上より楽らしい。おまかせでいける
- https://github.com/slhck/ffmpeg-normalize
- インストール
pip3 install ffmpeg-normalize
or
pip install ffmpeg-normalize
- 今回利用しているtest.mp4の場合は以下でいけた
ffmpeg-normalize test_a_3.mp4 -c:a aac -o test_norm.mp4
- -c:a aac オプションは通常のオーディオファイルなら不要みたいだが、mp4の場合自動検出してくれないようなので、自分で調べて指定した。動画の中身はffmpeg -i 調べたい動画ファイルで調べることが可能
- vorbisの場合の例
ffmpeg-normalize ~/Videos/simplescreenrecorder.mkv -ar 48000 -c:a libvorbis -f -o ~/Videos/simplescreenrecorder_norm.mkv
12.3 この章のまとめ
- 音量調節方法について
- 各種normalizeの方法について
- 一番簡単なのはffmpegのみでloudnormを利用するのが楽っぽい
13 公式文書のフィルターの紹介の例の最初をやってみた。
- この公式文書の最初の例の、画像の上半分を反転させたものをした半分に処理する処理をやってみることで、フィルターの使い方の基礎を知る。
13.1 関連文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- wikiの文書https://trac.ffmpeg.org/wiki/FilteringGuide
13.2 以下の操作を行っている動画
13.3 フィルター基礎をやってみる
- 公式サイトの文書https://ffmpeg.org/ffmpeg-filters.html
- 入力ファイル名を test.mp4
- 出力ファイル名を test_filter01.mp4
13.4 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
ffmpeg -i test.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" test_filter01.mp4
- オプションの意味
- -vf 画像関係のフィルター
- 5.5 Video Options https://ffmpeg.org/ffmpeg.html#Video-Options の下の方に記述あり
- -af はオーディオフィルター指定用のオプション。
- -filter_complex は画像、音両方にフィルターかけれるオプション。この例では利用してない
- split [main][tmp] : 元の動画の動画のストリームから、main と tmp という2つのストリームを作成
- splitの公式文書https://ffmpeg.org/ffmpeg-filters.html#split_002c-asplit
- 入力動画ストリームが今回1つしかないため、入力の記述が省略されている
- [tmp] crop=iw:ih/2:0:0, vflip [flip] : さきほどsplitで分裂した片方のストリームから、上半分を切り取り(crop)、vflipで上下反転処理させ、結果をflipという名称のストリームに流し込む
- cropの公式文書https://ffmpeg.org/ffmpeg-filters.html#crop
- vflipの公式文書https://ffmpeg.org/ffmpeg-filters.html#vflip
- cropの後の4つの引数は、幅、高さ、切り取る左上のx座、切り取る左上のy座標標
- [main][flip] overlay=0:H/2 : 元の画像に、上で作成した上半分の反転画像を下半分に重ね書き
- overlayの公式文書https://ffmpeg.org/ffmpeg-filters.html#overlay-1
- overlayの後の2つのものが、上書きするときの左上の座標(x=0,y=高さの半分)
- -vf 画像関係のフィルター
- 今回の例では、入力の動画のストリームが一つしかないので、入力ストリームの記述が省略されている。ffmpeg -iで調べたストリームの番号を利用出来る。記述方法が柔軟で省略も出来るため色々な記述方法があるが、説明がややこしくなるので、ここでは省略
13.5 この章のまとめ
- 公式文書のフィルターの紹介の例の最初をやってみた。これにより、フィルター記述の基礎を理解。
- この例で出てきた、各種フィルターを公式文書で確認した。
- split
- crop
- vflip
- overlay
14 2つの音を、時間をずらして合成
- 動画の音声を加工してYoutubeにアップロードしたいと考えた場合。この処理が必要
14.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- 音の時間をずらずフィルター adelay https://ffmpeg.org/ffmpeg-filters.html#adelay
14.2 以下の操作を行っている動画
14.3 2つの音を、オフセットを指定して合成 する手順
14.3.1 元ファイル1 silence03.wav の作成
- SoXというツールで作成
- 無音の3秒の silence03.wav 作成
sox -n silence03.wav synth 3 sine vol 0
14.3.2 元ファイル2 sine440_1.wav の作成
- 1秒間440Hzのサイン波の sine440_1.wav 作成
sox -n sine440_1.wav synth 1 sine 440
14.3.3 音をずらして合成
- sine440_1.wav を1秒ずらして合成し、出力ファイルを out.wav というファイルに出力
ffmpeg -i silence03.wav -i sine440_1.wav -filter_complex "[1] adelay=1000 [d];[0][d]amix" out.wav
- オプションの意味
- -i 入力ファイルの指定
- -filter_complex “[1] adelay=1000 [d];[0][d]amix” : 2番目の入力を1000ミリ秒遅らせる。そして1番目と合成
- -filter_complex の公式マニュアル https://ffmpeg.org/ffmpeg.html#Advanced-Video-optionsのかなり下の方、文字列検索で探すのをオススメ
- adelay https://ffmpeg.org/ffmpeg-filters.html#adelay
14.4 この章のまとめ
- 前の章のやり方を元に、2つの音を、時間をずらして合成してみた。
- -filter_complex を使ってみた
15 動画から複数の画像に分離
15.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
15.2 以下の操作を行っている動画
15.3 動画から複数の画像に分離 する手順
ffmpeg -ss 00:10 -to 00:11 -i test.mp4 test_images%05d.png
- オプションの意味
- -ssオプションは開始時間指定 今回は10秒
- -toオプションは終了時間指定 今回は11秒
- -i test.mp4 オプションは入力ファイルの指定。test_images00001.png,test_images00002.png….で作成される。
- test_images%05d.png は出力ファイル名。 test_images
15.4 この章のまとめ
- 動画から複数の画像に分離してみた。
16 複数の静止画像から動画作成
16.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- https://trac.ffmpeg.org/wiki/SlideshowのBasic examplesのSequentialがわかりやすい
16.2 以下の操作を行っている動画
16.3 複数の静止画像から指定長さの動画作成 する手順
- 元となる画像は、一つ前の章で作成したものを利用
- これで作る画像ではなく、別の画像を用意いただいてもOK
ffmpeg -framerate 56.2 -i test_images%05d.png -c:v libx264 -vf fps=56.2 -pix_fmt yuv420p test_images.mp4
- オプションの意味
- -framerate 56.2 : 入力のフレームレート
- -i test_images%05d.png : 入力画像ファイル群の指定
- -c:v libx264 : エンコーダーの指定
- -vf : video filter
- fps=56.2 : フレームレートの指定 https://ffmpeg.org/ffmpeg-filters.html#fps-1
- -pix_fmt yuv420p : pixel formatの指定 https://ffmpeg.org/ffmpeg.html#Advanced-Video-options
- test_images.mp4 : 出力ファイル名
- 入力と出力のフレームレートが同じなら以下でもOK(今回のケースなら下でいける)
ffmpeg -framerate 56.2 -i test_images%05d.png -c:v libx264 -pix_fmt yuv420p test_images.mp4
16.4 この章のまとめ
- 複数の静止画を元に指定時間の動画を作成してみた。
17 1枚の静止画像から指定長さの動画作成
17.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- https://trac.ffmpeg.org/wiki/Slideshow の Basic examples の Single image
17.2 以下の操作を行っている動画
17.3 1枚の静止画像から指定長さの動画作成 する手順
17.3.1 ベースとなる画像作成
- ImageMagickというツールのconvertコマンドを利用 https://legacy.imagemagick.org/Usage/draw/
- これで作る画像ではなく、別の画像を用意いただいてもOK
convert -size 720x1280 xc:red -fill blue -stroke green -strokewidth 5 -draw "roundrectangle 50,50 670,670 30,30" my01.png
17.3.2 この画像の指定長さの動画作成
- https://trac.ffmpeg.org/wiki/Slideshow の Single image にある手順で作成
- 元画像のファイル名を my01.png, 出力ファイル名を my01.mp4 に
- 作成する動画の長さは3秒に
ffmpeg -loop 1 -i my01.png -c:v libx264 -t 3 -pix_fmt yuv420p my01.mp4
- オプションの意味
- -loop 1 で入力画像の無限入力を指示しています。
- -i my01.pngで、入力画像の指示をおこなっています。
- -c:v libx264 はエンコーダーの指示
- -t 3 で時間指定
- -pix_fmt yuv420p はピクセルフォーマットの指示
- my01.mp4 生成する動画ファイル名を与えています。
17.4 この章のまとめ
- 1枚の静止画を元に指定時間の動画を作成してみた。
18 1枚の静止画像から用意した音ファイルと同じ長さの動画作成
18.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- https://trac.ffmpeg.org/wiki/Slideshow Additional Info の の Adding audio のところにやり方書いてありました。
18.2 以下の操作を行っている動画
18.3 1枚の静止画像から用意した音ファイルと同じ長さの動画作成 する手順
- 画像は一つ前の章で利用したものを利用 my01.png
- 音楽は Akatsuki JAPAN (ファイル名akatsuki-japan.mp3 http://shw.in/ から入手可能) を利用させていただきます。
- 他の音ファイルでもOK。その場合は利用する音楽ファイル名にしてください。
- 出力ファイル名を my01.mp4 に
- 作成する動画の長さは音楽にあわせる
- 最初の方はaacコーデックでエンコード、後の命令の場合は、音はそのままのコーデックで流し込む(無劣化)
ffmpeg -loop 1 -i my01.png -i akatsuki-japan.mp3 -c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 192k -shortest my01.mp4 or ffmpeg -loop 1 -i my01.png -i akatsuki-japan.mp3 -c:v libx264 -pix_fmt yuv420p -c:a copy -shortest my01.mp4
- オプションの意味
- -loop 1 で入力画像の無限入力を指示しています。
- -i my01.pngで、入力画像の指示をおこなっています。
- -i akatsuki-japan.mp3で、音声をながしこんでます。
- -c:v libx264 は動画のエンコーダーの指示
- -pix_fmt yuv420p はピクセルフォーマットの指示
- -c:a aac は音のエンコーダーの指示
- -b:a 192k は音のビッツ/秒の指定
- – shortest は入力の一番短いものに出力をあわせるオプション,これをつけないと、無限に大きなファイルになってく(Finish encoding when the shortest input stream ends.)
- my01.mp4 生成する動画ファイル名を与えています。
最後の my01.mp4 生成する動画ファイル名を与えています。
18.4 この章のまとめ
- 1枚の静止画を元に、音楽の長さにあわせた動画を作成してみた。
19 同じ動画をN回繰り返す動画の作成
19.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
19.2 以下の操作を行っている動画
19.3 同じ動画をN回繰り返す動画の作成 する手順
ffmpeg -stream_loop N-1 -i test.mp4 -c copy testN.mp4
- オプションの意味
- -stream_loop N-1 で入力の繰り返す回数指定、0で1回1で2回….N-1でN回
- -i test.mp4で、入力画像の指示をおこなっています。
- -c copy : ストリームはコピー
- testN.mp4 生成する動画ファイル名を与えています。
- 2回繰り返す場合は以下のコマンドでOK
ffmpeg -stream_loop 1 -i test.mp4 -c copy test2.mp4
- オプションの意味
- -stream_loop 1 で入力の繰り返す回数指定、0で1回1で2回….N-1でN回
- -i test.mp4で、入力画像の指示をおこなっています。
- -c copy : ストリームはコピー
- test2.mp4 生成する動画ファイル名を与えています。
19.4 この章のまとめ
- 同じ動画をN回繰り返す動画の作成してみた
20 バックグラウンドミュージックをループで無音動画に追加
- 私の動画は現状この必要ないけど、やりたくなった時用にやってみた。
20.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
20.2 以下の操作を行っている動画
20.3 バックグラウンドミュージックをループで動画に追加 する手順
20.3.1 長い、音無しの動画作成
- 動画で利用している動画は長さが20秒なので、20回繰り返して、400秒の無音動画を作成します。
ffmpeg -stream_loop 19 -i test.mp4 -an -c copy test20.mp4
- オプションの意味
- -stream_loop 19 : (20回入力を繰り返す指示)
- -i test.mp4 : 入力ファイルを test.mp4 に指定
- -an : オーディオのストリームは流さない
- -c copy : 画像は無劣化で出力
- test20.mp4 : 出力ファイル名
20.3.2 用意した無料で利用可能な音楽ファイルを追加
- 今回は Akatsuki JAPAN (ファイル名akatsuki-japan.mp3 http://shw.in/ から入手可能) を利用していきます
- 他のお好みの音楽で試してOK
ffmpeg -i test20.mp4 -stream_loop -1 -i akatsuki-japan.mp3 -c copy -shortest test20_with_audio.mp4
- オプションの意味
- -i test20.mp4 : 入力ファイルを test20.mp4 に指定
- -stream_loop -1 -i akatsuki-japan.mp3 : 無限繰り返しで akatsuki-japan.mp3 を入力
- -c copy : 音も、画像も無変換
- -shortest : これをつけないと、無限に大きなファイルになってく(Finish encoding when the shortest input stream ends.)
- test20_with_audio.mp4 : 出力ファイル名
20.4 この章のまとめ
- バックグラウンドミュージックをループで無音動画に追加
21 バックグラウンドミュージックをボリューム調節して、ループで音あり動画に追加
- 私の動画は現状この必要ないけど、やりたくなった時用にやってみた。
21.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
21.2 以下の操作を行っている動画
21.3 バックグラウンドミュージックをループで動画に追加 する手順
21.3.1 長い、音あり動画作成
- 動画で利用している動画は長さが20秒なので、20回繰り返して、400秒の動画を作成します。
ffmpeg -stream_loop 19 -i test.mp4 -c copy test_20.mp4
- オプションの意味
- -stream_loop 19 : (20回入力を繰り返す指示)
- -i test.mp4 : 入力ファイルを test.mp4 に指定
- -c copy : 画像は無劣化で出力
- test_20.mp4 : 出力ファイル名
21.3.2 用意した無料で利用可能な音楽ファイルを追加
- 今回は Akatsuki JAPAN (ファイル名akatsuki-japan.mp3 http://shw.in/ から入手可能) を利用していきます
- 他のお好みの音楽で試してOK
ffmpeg -i test_20.mp4 -stream_loop -1 -i akatsuki-japan.mp3 -filter_complex "[1] volume=0.3 [bgm];[0][bgm] amix" -c:v copy -c:a aac -shortest test_20_with_bgm.mp4
- オプションの意味
- -i test_20.mp4 : 入力ファイルを test_20.mp4 に指定
- -stream_loop -1 -i akatsuki-japan.mp3 : 無限繰り返しで akatsuki-japan.mp3 を入力
- -filter_complex :フィルター処理
- [1] volume=0.3 [bgm] : 2番目のストリームここでは akatsuki-japan.mp3 のボリュームを下げたものをbgmと名付けたストリームに流す https://ffmpeg.org/ffmpeg-filters.html#volume
- [0][bgm] amix : 1番目のストリームと、bgmストリームの音を合成
- -c:v copy : 画像も無変換
- -c:c aac : 音はaacで変換
- -shortest : これをつけないと、無限に大きなファイルになってく(Finish encoding when the shortest input stream ends.)
- test_20_with_bgm.mp4 : 出力ファイル名
21.4 この章のまとめ
- バックグラウンドミュージックをボリューム調節して、ループで音あり動画に追加してみた。
22 画像サイズを同じ比率で縮小
- 最近良く使ってるテク
- 動画サイズをガンと減らせます
22.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
22.2 以下の操作を行っている動画
22.3 画像サイズを同じ比率で縮小 する方法
- 縦を360にするケース
- エラーになる場合数値を変更すると上手くいくことがあります。(例:360が駄目なら300とか)
ffmpeg -i 入力動画 -vf scale=-1:360 出力動画
- 音はコピーするなら
ffmpeg -i 入力動画 -vf scale=-1:360 -c:a copy 出力動画
- 横幅を指定したいなら(例800)
ffmpeg -i 入力動画 -vf scale=800:-1 -c:a copy 出力動画
- 動画では以下でやってます。
- 入力動画ファイル in.mp4
- 出力動画ファイル out.mp4
- -c:a copy はオーディオのストリームをコピーするというオプション
ffmpeg -i in.mp4 -vf scale=-1:360 -c:a copy out.mp4
22.4 この章のまとめ
- 画像サイズを同じ比率で縮小する方法を紹介しました。
23 動画を範囲指定で切り抜き
- 最近良く使ってるテク
- 動画サイズを減らせます
23.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
23.2 以下の操作を行っている動画
23.3 動画を範囲指定で切り抜き する方法
- 切り抜く四角の左上の座標が(x0,y0)
- 切り抜く四角幅をwidth,高さがheight
- -c:a copy はオーディオのストリームをコピーするというオプション
ffmpeg -i 入力動画 -vf crop=width:height:x0:y0 -c:a copy 出力動画
- 動画では以下でやってます。
- 切り抜く四角の左上の座標(10,5)
- 切り抜く四角の幅100,高さ50
ffmpeg -i in.mp4 -vf crop=100:50:10:5 -c:a copy out.mp4
23.4 この章のまとめ
- 画像を範囲指定で切り抜き方法の紹介
24 出力動画のフレームレート(FPS)を指定する
- 最近良く使ってるテク
- 複数の作り方の異る動画の結合の時に、フレームレートをあわせないと上手くいかなかったので、このテク使ってます。
24.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
24.2 以下の操作を行っている動画
24.3 FPSの指定
- 出力FPSの指定を24にする場合
- -c:a copy はオーディオのストリームをコピーするというオプション
ffmpeg -i 入力動画 -r 24 -c:a copy 出力動画
- 動画で行なっている例の命令
ffmpeg -i in.mp4 -r 24 -c:a copy out.mp4
- 静止画像と、音声から動画を作成する時には(出力FPSが24の時)
ffmpeg -i 入力画像 -i 音声ファイル -r 24 出力動画
- 動画で行なっている例の命令
ffmpeg -i in.png -i in.wav -r 24 out.mp4
24.4 この章のまとめ
- 出力動画のフレームレートを指定する方法の紹介
25 早送りorスロー化
- 最近良く使ってるテク
25.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- vfオプションのsetpts https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempo https://ffmpeg.org/ffmpeg-filters.html#atempo
25.2 以下の操作を行っている動画
25.3 早送りorスロー化のやりかた
25.3.1 x倍速の場合(xは0.5から2の場合)
- 入力ファイルがin.mp4、出力ファイルがout.mp4、1.5倍速の場合
- vfオプションのsetptsを利用 https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempoを利用 https://ffmpeg.org/ffmpeg-filters.html#atempo
- 0.5〜100.0の範囲。 テンポが2を超えると、一部のサンプルがブレンドされるのではなくスキップされる。これらを避けるには、atempoの複数のインスタンスをデイジーチェーン接続する(ex.3倍ならatempo=sqrt\(3\),atempo=sqrt\(3\))
ffmpeg -i 'in.mp4' -vf setpts=PTS/x -af atempo=x 'out.mp4'
25.3.2 1.5倍速の場合
ffmpeg -i 'in.mp4' -vf setpts=PTS/1.5 -af atempo=1.5 'out.mp4'
25.3.3 2.1倍速の場合
ffmpeg -i 'in.mp4' -vf setpts=PTS/2.1 -af atempo=sqrt\(2.1\),atempo=sqrt\(2.1\) 'out.mp4'
25.4 この章のまとめ
- 早送りorスロー化のやり方を紹介
26 動画の一部のみを切り出して早送りorスロー
26.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- vfオプションのsetpts https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempo https://ffmpeg.org/ffmpeg-filters.html#atempo
26.2 以下の操作を行っている動画
26.3 動画の一部のみを切り出して早送りorスロー
26.3.1 切り出し部分の開始時間 t1, 切り出し部分の終了時間が t2, x倍速の場合(xは0.5から2の場合)
- 入力ファイルがin.mp4、出力ファイルがout.mp4、1.5倍速の場合 ( -i 入力ファイルの前にssとtoオプションで指定。後ろにすると変速した動画の切り出し時間の指定となる)
- 切り出し部分の開始時間 t1, 切り出し部分の終了時間が t2
- vfオプションのsetptsを利用 https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempoを利用 https://ffmpeg.org/ffmpeg-filters.html#atempo
- 0.5〜100.0の範囲。 テンポが2を超えると、一部のサンプルがブレンドされるのではなくスキップされる。これらを避けるには、atempoの複数のインスタンスをデイジーチェーン接続する(ex.3倍ならatempo=sqrt(3),atempo=sqrt(3))
ffmpeg -ss t1 -to t2 -i 'in.mp4' -vf setpts=PTS/x -af atempo=x 'out.mp4'
26.3.2 10秒から15秒を1.6倍速化の場合
ffmpeg -ss 10 -to 15 -i 'in.mp4' -vf setpts=PTS/1.6 -af atempo=1.6 'out.mp4'
26.4 この章のまとめ
- 前の章の一部切り出して、再生速度変更する方法を紹介
27 動画の一部のみを切り出して画像サイズ変更して、さらに早送りorスロー
27.1 関係文書
- 公式サイトの文書 https://ffmpeg.org/ffmpeg.html
- 公式サイトの文書フィルター https://ffmpeg.org/ffmpeg-filters.html
- vfオプションのsetpts https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempo https://ffmpeg.org/ffmpeg-filters.html#atempo
27.2 以下の操作を行っている動画
27.3 動画の一部のみを切り出して画像サイズ変更して、さらに早送りorスロー
27.3.1 切り出し部分の開始時間 t1, 切り出し部分の終了時間が t2, x倍速の場合(xは0.5から2の場合), 新しい画像の比率を同じで幅をwに変更する場合
- 入力ファイルがin.mp4、出力ファイルがout.mp4、1.5倍速の場合 ( -i 入力ファイルの前にssとtoオプションで指定。後ろにすると変速した動画の切り出し時間の指定となる)
- 切り出し部分の開始時間 t1, 切り出し部分の終了時間が t2
- vfオプションのsetptsを利用 https://ffmpeg.org/ffmpeg-filters.html#setpts_002c-asetpts
- afオプションのatempoを利用 https://ffmpeg.org/ffmpeg-filters.html#atempo
- 0.5〜100.0の範囲。 テンポが2を超えると、一部のサンプルがブレンドされるのではなくスキップされる。これらを避けるには、atempoの複数のインスタンスをデイジーチェーン接続する(ex.3倍ならatempo=sqrt(3),atempo=sqrt(3))
- 画像のサイズは、元画像の幅や高さによっては設定出来ない場合がある。エラーがでたら、数値を変更して対応すればエラーを回避できます。
ffmpeg -ss t1 -to t2 -i 'in.mp4' -vf scale=-1:h,setpts=PTS/x -af atempo=x 'out.mp4'
27.3.2 10秒から15秒を1.6倍速化,画像の高さを300の場合
ffmpeg -ss 10 -to 15 -i 'in.mp4' -vf scale=-1:300,setpts=PTS/1.6 -af atempo=1.6 'out.mp4'
27.4 この章のまとめ
- 前の章の一部切り出して、再生速度変更に加えて、画像のサイズも同時に変更する方法を紹介
28 今後
- 今後も文書追加していきます。
29 この文書のチェンジログ
- 2021/01/12 初版
- 2021/01/15 複数の同じエンコード動画の無劣化結合 の章追加
- 2021/01/16 音量調節 の章追加
- 2021/01/22 動画から複数の画像に分離, 複数の静止画像から動画作成, 1枚の静止画像から指定長さの動画作成, 1枚の静止画像から用意した音ファイルと同じ長さの動画作成, 同じ動画をN回繰り返す動画の作成, バックグラウンドミュージックをループで動画に追加 の章追加
- 2021/01/23 バックグラウンドミュージックをボリューム調節して、ループで音あり動画に追加 の章追加
- 2021/10/31 画像サイズを同じ比率で縮小 の章, 画像を範囲指定で切り抜き の章, 出力動画のフレームレート(FPS)を指定する の章 を追加
- 2022/01/14 早送りorスロー化, 動画の一部のみを切り出して早送りorスロー, 動画の一部のみを切り出して画像サイズ変更して、さらに早送りorスローの章追加
Created: 2022-01-19 水 01:33