[ffmpeg] フェードイン・アウトさせて動画を連結するには

動画を連結するときにフェードアウト・インさせるニーズあり。以下の指定により、input1.mp4 ファイルの70フレーム目から30フレームの間にフェードアウトし、input2.mp4 の開始0フレームから30フレームかけてフェードインさせることができる。

参考サイト

【ffmpeg】動画・音声を連結する concat の使い方 : ニコニコ動画研究所
http://looooooooop.blog35.fc2.com/blog-entry-1020.html

[ffmpeg] DVDのVOBデータをMP4ファイルに変換するには

DVDの映像をMP4ファイルに保存する方法の覚え書き。自分で利用権を持ち、かつ、複製防止が施されていないDVDを前提としている。

パソコンでDVDの中身を見ると以下のようにVOBファイルがあったとする。

ここで、ファイル名のVTS_に続く2桁の数字がタイトル番号、その後に続く1桁の数字が連番。連番が0のファイルは特殊用途で、映像ではなくメニューのデータが格納されている。VOBの仕様ではファイルの最大サイズは1GBなので、この例では連番で1から6までの合計6ファイルに分割されて映像が格納されているわけ。連番0のファイルは不要とし、連番1から6までのVOBファイルを連結してMP4ファイルを作成しよう。

MPEG2エンコードのまま連結する (COPYコマンド使用)

VOBはMPEG2エンコードされた動画データ。1枚のDVDで動画サイズ(縦横サイズ)は全て同じなのでVOBファイルの属性は全て同じ、従って単純に連結してやるだけで1つの動画ファイルにできる。もしMPEG2エンコードのままで良ければ、再エンコードの必要無し。

ファイルの結合はWindowsのコマンドプロンプトを開いてCOPYコマンドを打ち込むだけ。バイナリファイルを指定する /b オプションを忘れずに。

すると以下のファイルが作成される。

MPEG2を再生できるプレーヤーであれば問題なく再生されるはず。もし拡張子でファイル形式を識別するプレーヤーならば、拡張子をmpegに変更する必要があるかも。

MPEG2エンコードのまま結合する (ffmpeg使用)

上と同様のことをffmpegで行うならば以下のようする。

すると以下のファイルが作成される。

映像と音声のエンコードは元ファイルのまま変更無し。再生時間は変わらないけど、ファイルサイズは僅かに違っている。

H.264エンコードしてMP4ファイルを作成する

もしiPhoneやiPadのようなモバイル端末に映像を入れたければ、エンコードをH.264に変更する必要あり。その際、画質にこだわらなければ、ビットレートを下げることでファイルサイズを小さくできる。

以下はビットレート1,500KbpsでのH.264エンコードする例。

すると以下のファイルが作成される。

通常DVD映像のビットレートは8Mbpsを超えているので、1.5Mbpsまで落とすとファイルサイズは20%ほどになる。1.5~3Mbpsだとネット配信されている中画質程度の動画品質と同等だから、モバイル端末で観る分にたぶん支障は無い。

参考サイト

VOB – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/VOB

DVD-Video – Wikipedia
http://ja.wikipedia.org/wiki/DVD-Video

MPEG-2 – Wikipedia
http://ja.wikipedia.org/wiki/MPEG-2

ffmpegを利用してDVDのVOBデータをAppleTVに最適なH.264エンコードのHD動画に変換する – blog.katsuma.tv
http://blog.katsuma.tv/2012/07/h264_movie_for_appletv_by_ffmpeg.html

DVDの動画をiPodに入れる手順のメモ | 武田史郎のウェブログ
http://shirotakeda.org/blog-ja/?p=698

kobapan @ wiki – FFmpeg/DVDをmpg動画ファイルに変換
http://www20.atwiki.jp/kobapan/pages/160.html

[ffmpeg] 動画から音声を抜き出すには

YouTubeで好みの音楽ビデオを見つけた時など、音楽だけを抜き出してiPhoneで持ち歩きたいと思うことがある。iPhoneではビデオはバックグラウンド再生できないのに加えて、画面表示をオフにできないので電池も消耗するし。このような場合、映像から音楽だけを抜き出してMP3ファイルなどに保存できると助かる。

以下のオプションで動画から音声を抜き出してMP3ファイルに保存できる。

音声を抜き出す明示的な指定をしていないけど、出力ファイル形式をmp3とすることで音声だけが出力されるみたい。以下に各オプションの意味を簡単に。

オーディオチャンネル数。

オーディオサンプリング周波数。

オーディオビットレート。

ファイル形式。

この例では音声トラックはオプションに従って再エンコードされる。もし映像ファイルに保存されているエンコードのまま音声トラックを抜き出したければ、オーディオコーデックをcopyと指定すればいい (-acodec copy)。例えばAACエンコードされている場合には、MP3に再エンコードするよりもそのままAAC(.m4a)で保存したほうが高音質が維持できる。

参考サイト

ffmpeg でムービーからオーディオデータを取り出す – tsntsumi’s NOOTO
http://d.hatena.ne.jp/tsntsumi/20100125/ExtractAudioFromMovie

FFmpegをコマンドラインからちょこっと使ってみる オーディオ編 – opamp_sando’s blog
http://opamp.hatenablog.jp/entry/20110506/1304677232

1 Entry per Day: ffmpegで動画から音声を分離
http://mstssk.blogspot.com/2008/07/ffmpeg.html

[ffmpeg] 静止画から動画を作成するには

動画の冒頭に4秒間静止画を差し込みたいというニーズあり。動画にオーバレイさせるのではなく、単に静止画を4秒間見せた後動画をスタートしたい。ffmpegでこれをやる方法は何通りかありそうだけど、今回は静止画から4秒間のイントロ動画を作成して本編と結合する。以下手順を覚え書き。

無音のサウンドファイルを作成する

冒頭4秒間は無音なのでサウンドトラックは必要ないが、サウンドトラック付きの本編動画と連携する際に結合する動画間でストリーム数に違いがあると面倒なので、事前にイントロ動画にもサウンドトラックを追加しておく。ffmpegで無音トラックを追加する方法が見つからなかったので、安易にAudacityで4秒間無音のサウンドファイルを作成。本編のオーディオトラックと同様のサウンド形式にしておくと後の処理が楽に進むかも。

静止画から動画を作成する

4秒間の動画を作るためには、フレームレートを30fpsとして120フレームの画像が必要となる。オリジナルの静止画をコピーして120枚の画像ファイルを作成する。バッチファイルを工夫してファイル名にフレーム番号が含まれるようにしておくと便利。例えば intro_0001.jpg、intro_0002.jpg、_0003.jpg、… といったように。そうして作成した画像をffmpegを使って動画に変換。その際に予め作成しておいた無音のサウンドファイルも入力として与え、無音の音声トラックを動画に追加する。

イントロ動画と本編動画を連結する

動画連結の方法は以前のエントリで書いた通り。

[ffmpeg] 動画を結合するには
https://www.84kure.com/blog/?p=345

[ffmpeg] 動画を切り出すには

ffmpegを使って、動画を分割したり、動画の一部を切り出すこともできる。コマンドラインのオプションで切り出す位置と長さを指定する必要があるので、予め動画再生ソフトなどを使って切り出す位置と長さを調べておく必要あり。

ffmpegを使って動画を切り出す方法

切り出し位置と時間をオプションに指定してffmpegを実行する。

-ss 10:15 は切り出し開始時刻。この例では冒頭から10分15秒の位置を指定。

-to 3:30 は切り出す時間。この例では切り出される長さは3分30秒。

すなわち、この例では10分15秒から13分45秒までの動画が出力ファイルに保存される。

[ffmpeg] 動画を結合するには

動画の冒頭にイントロを付けたり、末尾にクレジットを追加したい場合がある。ffmpegを使うと、複数の入力ファイルを結合して1つの動画を作成できる。

ffmpegを使って複数の動画を結合する方法

例えば単純に2つの動画を結合したければ、以下のようにオプションを指定してffmpegを実行する。

concatで結合条件を指定する。nは結合する動画ファイル数、vは映像を結合するかどうかのフラグ(0か1)、aはオーディオを結合するかどうかのフラグ(0か1)。この例では映像とオーディオの両方を結合している。

参考サイト

【ffmpeg】動画・音声を連結する concat の使い方 : ニコニコ動画研究所
http://looooooooop.blog35.fc2.com/blog-entry-1020.html

[ffmpeg] 動画のフレームをキャプチャするには

ffmpegを使って動画キャプチャもできる。

ffmpegを使って動画のフレームをキャプチャする方法

例えば、動画の冒頭5秒をスキップし、その後は1秒刻みでフレームをキャプチャして cap_01.jpg、cap_02.jpg、cap_03.jpg … という連番ファイルに保存したい場合には、以下のようにオプションを指定してffmpegを実行する。

-s 640×480 は静止画像のサイズ指定で単位はピクセル。

-ss 5 は冒頭5秒をスキップする指定。

-r 1 はキャプチャするフレームレートで単位はフレーム/秒。もしキャプチャ間隔を長くしたければ、小数で指定することもできる。例えば、2秒ごとに1フレームキャプチャしたければ0.5と指定すればよい。ちなみに、ffmpegの仕様なのか、0.05未満の値は指定できないみたい。より短い間隔でキャプチャしたければ、ちょっと面倒だけど、大きめのフレームレートを指定して多目に画像ファイルを作成した後、不要なファイルを間引くようにすると良いだろう。

cap_%%02d.jpg は出力ファイル名の指定。連番指定にはprintfライクな書式指定が使える。

[ffmpeg] 動画に透かし画像を入れるには

ここで言う「透かし画像」とは、動画の定位置に常に表示されている固定画像のこと。報道ビデオには通信社のロゴが合成されていることがあるけど、あれが「透かし画像」。英語では、動画に透かし画像を入れることをwatermark、単に画像を合成することをoverlayと言う。

ffmpegを使って透かし画像を入れる方法

例えば、動画の右下隅から水平方向と垂直方向それぞれに40ピクセルのマージンを取って透かし画像を入れたい場合には、以下のようにオプションを指定してffmpegを実行する。

-vf オプションは動画にフィルタ処理を施す指定で、続けてフィルタの内容を二重引用符で括って追加する。二重引用符内の指定は以下の通り。

movie= は透かし画像のファイル名。

overlay= は透かし画像の表示位置。動画の左上を原点とし、動画上の水平方向と垂直方向の位置をコロンでつないで記述する。定数パラメータとして、main_w (動画の幅)、main_h (動画の高さ)、overlay_w (透かし画像の幅)、overlay_h (透かし画像の高さ) が使える。例えば、overlay=10:10 は動画の左上隅から縦横10ピクセルずつ右下の位置を示し、overlay=main_w-overlay_w-10:main_h-overlay_h-10 は動画の右下隅から縦横10ピクセルずつ左上の位置を示す。

参考サイト

How to watermark a video using FFmpeg | iDude.net
http://www.idude.net/index.php/how-to-watermark-a-video-using-ffmpeg/

[ffmpeg] よく使うオプション覚え書き

動画をエンコードする必要に迫られてffmpegを使いはじめた。

ffmpegは多彩な機能と様々なコーデックを備えた定番エンコーダー。コマンドプロンプトで動作するので、バッチファイルを作成することで複数の処理を順次実行したり、大量の動画を一括して処理することもできる。

FFmpeg (公式サイト) – 英語
http://www.ffmpeg.org/

日本語版Wikipediaにも簡単な説明がある。

FFmpeg – Wikipedia
http://ja.wikipedia.org/wiki/FFmpeg

Windows版ビルドは以下のサイトで配布されている。

Zeranoe FFmpeg – Builds (Windowsビルド)
http://ffmpeg.zeranoe.com/builds/

ffmpegの実行形式

ffmpegコマンドの実行形式は以下の通り。

ffmpegのよく使うオプション

フレームサイズを指定する。横x縦、単位はピクセル。

ビットレートを指定する。単位はbit/s、kを付ければKbit/sになる。

フレームレートを指定する。単位はfps (frame/s)。

ビデオコーデックを指定する。利用可能なコーデックは ffmpeg -codecs でリストされる。

オーディオコーデックにaacを使う場合に指定する。以下ページも参照。

AACEncodingGuide – FFmpeg
http://ffmpeg.org/trac/ffmpeg/wiki/AACEncodingGuide

オーディオコーデックを指定する。利用可能なコーデックは ffmpeg -codecs でリストされる。

オーディオサンプリング周波数を指定する。単位はHz。

ファイルフォーマットを指定する。サポートされているフォーマットは ffmpeg -formats でリストされる。

ビデオ表示のアスペクトレシオを指定する。小数と”横:縦”の比の何れの形式でも指定できる。

[Unix] yum – Red Hat系Linuxのパッケージ管理システム

yumはrpmに代わるパッケージ管理システム。rpmよりも格段に便利。rpmのようにパッケージのフルネームを指定する必要がないのもいい。

以下ざっくり覚書。

コマンド例

インストール済みのパッケージ一覧を見る

インストール済みパッケージの内容を見る

パッケージをインストールする

参考サイト

yumの使い方は以下サイトがわかりやすい。

初心者の頃に知っておきたかった rpm と yum の違いと使い分け – 彼女からは、おいちゃんと呼ばれています
http://blog.inouetakuya.info/entry/20111006/1317900802

yumの沿革などはWikipediaを参照。

Yellowdog Updater Modified – Wikipedia
http://ja.wikipedia.org/wiki/Yellowdog_Updater_Modified

以下コマンドリファレンス。

Linuxコマンド逆引き大全 – 【 RPMパッケージをインストールする 】:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231208/?ST=oss

Linuxコマンド集 – 【 rpm 】 RPMパッケージをインストール/アンインストールする:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230875/?ST=oss

Linuxコマンド集 – 【 yum 】 パッケージを取得してインストール/アップデートをする:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/230999/