ffmpeg で「ラジオな動画」の背景動画を差し替える

以前ここで似たことをやったんだけど、微妙に違うのよね。

2017-12-15 05:00 追記: 以下参照:

ダウンロードという行為そのものが youtube の利用規約に反することを知りませんでした。(なお、ダウンロードするだけで著作権法違反となる、という話ではない。)以下一応読めるようにはしておくけれど、出来れば読まないで。

「ラジオな動画」と言ってるのはどんなのか想像付かないヒトはいる? たとえばこれね:

で、こういうのをパソコンで youtube にあるまま視聴するぶんにはこのままでもいいんだけれど、ワタシは「パソコン作業」と「動画視聴行為」を混ぜたくないヒトなので、気にいって何度も観返したい(聴き返したい)ものは、ダウンロードして、余力があるなら DIGA (ハードディスクレコーダ)に取り込んだりしてる。(超がつくほどの高速ネット環境じゃないことも少しある。)

で、「パソコンで視聴」じゃないのが問題で。ハードディスクレコーダに動画として取り込んで視聴するということはどういうことかと言えば、「視聴中は動画視聴のシングルタスク」ということなわけだわ。つまり…、「スクリーンセーバを動かせない」ということ。絵が動かない「動画」なので…、ずっと再生しっぱなしにしとくと焼き付いちゃうんだわ。金剛先生が。(まぁほっときゃ1時間以内に直るけど。)

というわけで、例えばこれとかを背景動画にしたいということな:

ちぅわけで、宝石の国アニメ公式サイトにある PV や CM を全部持ってきて、こやつらを背景動画に仕立て上げたいぞ、と。

実際の作業は紆余曲折しまくったけど、紆余曲折の実況しても鬱陶しいので、うまくいった流れで作業内容を書くことにする。

まず、お取り寄せた「背景に使うつもりの動画」のサイズを統一する必要がある。リサイズはこんな感じ:

いつもの通りワタシは MSYS ユーザなので、MSYS bash のコマンドラインね
1 [me@host: HnK]$ mkdir cnv
2 [me@host: HnK]$ for i in *.mp4 ; do ffmpeg -i "$i" -vf scale=1920:1080 cnv/"$i" ; done

実際はサイズが合ってないものだけ変換したよ、もちろん。

で、これが済んでサイズが整ったら今度はこれらを「結合」する。まさにここがハマりポイントだったんだけど、この結合がさ、サイズが合ってないものを ffmpeg が全然よきに計らってくれなくて、ぶっ壊れた動画を作っちゃうのね。ともあれ、結合はこんな感じ:

カレントにはサイズが統一されたヤツらがいるとして
1 [me@host: HnK]$ ls *.mp4 | sed 's@^\(.*\)$@file '"'"'\1'"'"'@' > flist.txt
2 [me@host: HnK]$ ffmpeg -f concat -safe 0 -i flist.txt bgmov.mp4

リストを予め作るのが面倒くさいというやり方で、他のやり方もないではなさそうなんだけど、まぁ多分これが一番素直。(なお、上の例は「リエンコードを伴う結合」。リエンコードを避けたければ「-c copy」を付けなはれ。)

で、今の場合「ラジオな音声動画」の方が長いのね。ので、上と同じ要領で、bgmov.mp4 を 1時間くらいになるように水増ししておく。これは続く「背景動画差し替え」で ffmpeg では「短い方に合わせろ、さもなくば、短いほうは勝手にブランク扱いしやがれ」という二択しかないため。

ここまで出来たらやっと本題の「動画 A から音声を、動画 B から背景を」:

ダウンロードした元のラジオな動画を HnKRadio01.mp4 のようにリネームしてあるとして。
1 [me@host: HnK]$ for i in 1 2 3 4 5 ; do \
2 >     ffmpeg -i bgmov.mp4 -i HnKRadio0${i}.mp4 -c copy \
3 >     -map 0:v:0 -map 1:a:0 -shortest _HnKRadio0${i}.mp4 \
4 > done

このコマンドラインの意味は例えば StackOverfloe のこれ参照。ともあれ、これで目的のものは出来た。

なお、これで出来上がった動画が DIGA に拒絶されるようなら、ここに対処は書いてるんでそっち参照。

出来上がった動画をさ、ここで紹介したい気持ちもないではないけれど、そして使ったのは全て公式で無償で公開されてるものなので「多分」問題はないんではないかとは思うものの、こうした二次創作物の扱いがよくわからないのでやめとく。(もちろんこういうの、「個人で楽しむ」目的ならば問題ない。違法アップロードものを使ってるならともかく。)