2011年まで「俺的な非 UN*X 環境をめざして」という題でしたが、 「UNIX系」と「非UNIX系」の区別がだんだん難しくなってきましたので、 あれこれ区別しないことにしました(^_^;
[前] Macが起動しませんよ‥ 2018/09a |
フレームレートとかサイズとかがバラバラな、ごく短い動画群をまとめて1つの 動画にしたいときのメモ。
[Table of Contents]ffmpeg で動画を合体させたいとき。
ただこの方法は、合体させるファイルの数が多くなるとファイル名の指定が面倒くさい、 というか試してみるとなんか動画2つしか合体されてくれなくね??? ‥という 感じがしますので、そのときは別の方法を使います。
ただ実際にこれをやろうとしても、案外大変!
何が大変かというと。SAR がどうとか DAR がどうとか、 "Non-monotonous DTS in output stream 0:0" とかいう わけわからないエラーメッセージが大量に出るのです。まあ、エラーメッセージが 大量に出ても、それでもちゃんと動画ができてくれてれば良いんですけど。 できあがった動画を見てみると、途中からどう見てもおかしい。 緑っぽいブロックノイズばかりの動画になってて何だこりゃ?! と。 (-c copy を外せばいいのかな? と思っても、外しても何かうまくいかない‥)
そういう時にどうするか。たぶん動画のサイズとかフレームレートを合わせてやれば エラーはあまり出なくなるみたいです。動画のサイズを揃えるには、 以前[ 動画から必要なエリアの切り出し ]で紹介したように -vf の crop オプションが使えます。
大きなサイズの動画を小さくしたいときは以下:
(2022.6追記)
最初は iPhone で撮影していたものの、 途中で「ストレージが一杯でもう書き込めません」とかいう感じのエラーが出て それ以上撮影できなくなったとき。そのとき別のスマフォを持ってたりすると 別のスマフォでその後を撮影する‥なんてことがごく稀にあったりします。
そんなとき。せっかくなのでその両方のスマフォで撮影した動画を結合させて1つに してしまいたい! そうした方が管理もラクだし‥なんて 思うこともあります。そのときは ffmpeg で動画のサイズを揃えたうえで 動画を結合させるんですけど、できた動画を見てみると、 動画がなんか結合部分あたりから おかしくなっていることがよくあります。
ということでちょっと調べてみると、 なぜなのか理由は調べてないのでよくわからないんですけど、 同じスマフォの同じカメラアプリで同じ日に撮影した動画であっても それぞれ FPS が 29.97 になっていたり 30 になっていたり 他の近い数字になっていたりするみたいですね。 んで FPS の数値が違うものどうしを無理に結合しようとすると、 それがたとえ 29.97 と 30 といったかなり近い数値のものであっても、 挙動がおかしい不審な動画ができてしまいます。 それを防ぐため、各動画の FPS を揃えると良さげです。具体的には以下:
(2022.12追記)
合体させる動画の FPS を調べたら 29.97 のが多いから全部の動画のFPSを 29.97 に揃えてから 合体させてみたんだけど、おかしいなあ‥うまくいかないなあ‥。 ‥なんてこともあると思います。そのときは 29.97 よりもっと細かい -r 29.97002997 という数字を指定するか、あるいは分数で -r 30000/1001 (これは 4500000/286/525 を約分したもの) こんな感じで指定するとうまくいく可能性が高まります。
「何だ 29.97 という中途半端な数字は!!」と思ったときは「29.97 fps」みたいな感じで 検索するとそれについて説明してるサイトがいっぱい見つかります。
[Table of Contents](2022.7追記)
合体させる動画は SAR, DAR の値が一致してないとダメです。 SAR, DAR について簡単に説明すると、DAR が「再生・表示されたときのヨコタテ比」です。 素朴な状態ではDARのヨコタテ比は動画のヨコタテのドット比と同じになるはずですが、 これを変更することができるのです。つまり、 たとえば 400:400 ドットの動画なのに、横に引き伸ばして 800:400 ドットの動画のように 常に再生させることが可能なのです。ここで使われるのが SAR というやつで、 たとえば上の「本来のドット数よりも動画が横に2倍に引き伸ばされて表示される」 例だと SAR は 2:1 になっています。 (たぶん説明の内容はこれで合ってる‥はず。説明が読者に伝わるかどうかは不明)
この SAR の値をどうやって変更するか? どうやら ffmpeg では直接 SAR を変更できない みたいです。 かわりに DAR のほうを変更し、その結果 SAR も変更される‥こんな手順を踏むと良いみたいです。 たとえばここで例にあげてる 400:400 ドットの動画。SAR が 2:1 になってるこの動画の SAR を 1:1 にしたいときは以下:
(2021.12追記)
でも。動画の縦横のサイズを揃えただけでは不十分なことも多いです。 何をどうやってもうまく動画が合体されてくれず、 もうお手上げ! なんてことになることもあります。
そんなときに私が取る方法ですけど。 他ページで紹介した「動画の中に動画を埋め込む(基本編)」を使います。
動画の縦横サイズは合っているものの、動画の微妙な設定をどうしても合わせられなくて合体させられない 動画A,Bがあると仮定します。ここで動画Bの設定を動画Aに合わせたいとき、こんな感じ:
-map 1:a:0
オプション
によって動画BのものがB2に書き込まれる感じになりますので、
動画Aの要素は動画の設定以外はまったく残らない感じになってしまいます。
‥でもちょっと動画の画質は落ちるかな? それが気になるときは -crf
オプションを使って
こんな感じ:
こうして作成した動画ファイル: B2 を B のかわりに使えばほぼ動画を合体することが できるはずですけど、それでもダメだったことがありました。そのとき何が問題だったか といえば音声データでした。動画の画像の設定が一致していても、音声データの設定が 一致してないとやっぱ合体できないんですよね。
音声データ形式の変換方法については、
これまで一度くらいしかやったことがないので忘れてしまいました😅
思い出したら追記します。
(映像のほうだけあれば良い、音声はどうでもいい‥という時であれば、
上で紹介したコマンドラインから -map 1:a:0
部分を外せば
音声形式は動画Aのものになるので面倒はなくなるはずです)
あ、そうそう。動画のサイズとかフレームレートとかを知りたいときは単純に以下:
[次] FFFTP v3に切り替え 2018/05a |