FFmpeg

【FFmpeg】複数のMP3を結合してひとつのMP4にする方法

MP3ファイルを直接YouTubeにアップすることは出来ません。
YouTubeアップ用に動画編集ソフトを立ち上げてMP4化のために編集するのも時間と手間が面倒です。

「複数のMP3(音声ファイル)と1枚の静止画で、簡単にMP4化して動画にしたい」

そんな時に役立つ、FFmpegを使ったWindows専用の自動化バッチファイルを紹介します。
FFmpegのコマンドを組み合わせて、リスト作成から動画出力まで「ダブルクリック1回」で終わらせることが可能です。

事前準備

ファイルの用意: 同じフォルダに以下のファイルを入れます。

・01.mp3、02.mp3… (結合したい順に名前をつけた音声)
・image.png (動画の背景にする画像)

コード(バッチファイル)

以下のコードをコピーして、メモ帳などに貼り付けます。
保存する際は、ファイル名をmake_video.batなど、ファイル名を.batにして保存します。

@echo off

rem 1. フォルダ内のMP3をリスト化する
(for %%i in (*.mp3) do @echo file '%%i') > list.txt

rem 2. 画像と音声を結合してMP4を出力する
ffmpeg -loop 1 -i image.png -f concat -safe 0 -i list.txt -c:v libx264 -tune stillimage -c:a libmp3lame -pix_fmt yuv420p -shortest all.mp4

pause

コードの解説

① 音声リストの自動作成
(for %%i in (*.mp3) do @echo file '%%i') > list.txt
フォルダ内のMP3ファイルをFFmpegが読み込める形式のリスト(list.txt)にします。
ファイルが100個あっても一瞬で作成可能です。

② 静止画を動画としてループ
-loop 1 -i image.png
1枚の画像を、音声が終わるまでずっと表示し続ける設定です。

③ 高音質・高互換性のエンコード
-c:v libx264 : 汎用性の高いH.264形式。
-tune stillimage : 最適化オプション(静止画のためビットレート節約)
-pix_fmt yuv420p : スマホやブラウザで再生できないトラブルを防ぐための標準的な形式です。
-shortest : 音声が止まると同時に動画も終わるようにします。

使い方

用意した素材(MP3と画像)があるフォルダに、このバッチファイルを入れます。
バッチファイルをダブルクリックします。
黒い画面(プロンプト)が走り、終わると all.mp4 が完成します!

まとめ

動画編集ソフトで1つずつ並べて編集する手間がゼロになります。
ファイル名を再生したい順に並ぶように数字順にしておけば、あとはバッチファイルをダブルクリックして実行するだけで完成します。

【FFmpeg】動画を無劣化で回転する

動画を無劣化で回転させるコマンドは以下です。

rotate=90は時計回りに90度
-c copyは無劣化(音声も映像もそのまま、メタデータのみ編集)になります。

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 out.mp4

以下のページでは、無劣化での動画カットも紹介しています。
https://www.uki213.com/memo/ffmpeg-cut-excess-parts-video-without-degradation/

参考:https://qiita.com/lzpel/items/34d966dbcc5991caf61a

【FFmpeg】動画の余分な部分を無劣化でカットする

スマホで動画を撮影する際、
前後少し余分に撮影しておいて、ネットなどに上げる際や
友人と共有したいときに余分な部分をカットしたいことがあります。

FFmpegを使うと簡単なコードを書いたバッチだけで簡単にカット出来ます。
無劣化の場合、時間もエンコードなどのパワーを使わないのでほとんど時間も掛かりません。

iPhoneで撮影したものはmov形式で無劣化カットし、最後にmp4に変換すると効率的にカット圧縮できます。圧縮方法は、別記事のこちらを参考にしてください。

参考サイトには様々なカット方法が書かれていますが、以下の2つのコードの組み合わせで基本的にはほとんどの場合、カット出来るかと思います。

[duration]は秒数を入れます。

前半を残し、後半をカット

ffmpeg -i input.mp4 -t [duration] -c copy output.mp4

前半をカットし、後半を残す

ffmpeg -ss [duration] -i input.mp4 -c copy output.mp4

参考:https://nico-lab.net/cutting_ffmpeg/