「ffmpeg」タグアーカイブ

ffmpeg の map オプション

先のエントリで書きましたが、私のドラレコは 1 つの AVI ファイルにフロントとリアの画像をパッケージングして保存しています。分離する方法を書きますね。

複数の音声が入っている動画というのはありますね。副音声と言われるヤツです。動画でも昔マルチキャプチャーの動画がパッケージングされたものがありました。理屈は一緒ですね。ストリーム分離というキーワードで検索すると、音声の方を分離する方法があります。ただ、基本的にファイルの中のストリームを分離するのは、動画であろうが音声であろうが理屈は一緒です。

そこで、 sample.AVI( フロントとリアのストリームが同梱されたファイル ) を分離してみようと思います。以下コマンドラインでの入力です。

まず、 sample.AVI のストリーム状況を確認します。

ffmpeg -i sample.AVI

単純に入力のみを指示すると、そのファイルのストリーム状況が表示されます。こんな具合ですね。

Input #0, avi, from '2019_04_27_11_53_20_Nor.avi':
  Duration: 00:00:30.63, start: 0.000000, bitrate: 9318 kb/s
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1280x720, 3951 kb/s, 19.10 fps, 19.08 tbr, 19.10 tbn, 38.20 tbc
    Stream #0:1: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1280x720, 3932 kb/s, 19.10 fps, 19.08 tbr, 19.10 tbn, 38.20 tbc
    Stream #0:2: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Stream #0:3: Subtitle: none, 21 kb/s

この例だと、

  • ストリーム  #0:0 :動画 ( フロントの動画 )
  • ストリーム  #0:1 :動画 ( リアの動画 )
  • ストリーム  #0:2 :音声 ( フロントで録音された音声 )
  • ストリーム  #0:3 :不明なストリーム ( ※ )

※本来ならば、リアで録音された音声ストリームになるはずですが、多分私の環境下では結線されていないなどの理由で不明になるものと思われます。

ここまでわかってしまえば、分離するのは簡単です。 map オプションは出力するストリームを指定するものなので、リアカメラの映像のみを出力するには、

ffmpeg -i sample.AVI -map 0:1 output.AVI

これで出力されるはずです。やってみたら、できました!

後は、フロントとリアのストリームを別々に保存した動画を作るスクリプトを作ればいいだけです。「ストリーム」という単語がわからなかったので、検索してもなかなか引っかかってくれませんでした。これでリアカメラの映像も簡単に取り出せます。アプリを使った分離でも分離はできるのですが、マウスクリックやらなんやらが必要で、面倒だったんです。コマンドラインで処理なら 1 度ひな形を作ってやれば次から簡単ですし、繰り返しも簡単です。良かった。


コップを唇に持っていく間隔までには多くの失敗がある。

イギリスの諺

グラボを動画変換用に使う

iMac だとできませんでした。 AMD だとダメなのかしら? 私の探し方が悪いのかもしれませんが、 nvenc できません。 Windows10 ならできるみたいなので、やってみました。できました。

動画は mp4 です。マックユーザーなら h.264/h.265 ですよね。 wmv も再生できますが、 mp4 です。にもかかわらず、世の中にあふれる wmv 動画をダウンロードしたりするとがっかりします。

で、私は変換するわけですが、変換するのに ffmpeg というフリーソフトを使っています。 Windows10 の環境ではグラフィックスボードのエンジンを使って変換をする方法があっちこっちに乗っていますが、残念ながら Mac 環境では皆無です。 Windows10 を新しくしたので、そっちを使ってやれ。ということで、 ffmpeg のコンパイルを行いました。「 Windows 用 FFmpeg を Windows 10 でビルドする (Bash on Ubuntu on Windows) 」こちらのホームページを参考にさせていただきました。すごい環境でやってます。 Windows10 用の ffmpeg を Windows10 で動いている Ubuntu 上でコンパイルして、それを Mac からリモートデスクトップで操作している。そんなことをしました。わかります?

で、記事の内容そのままではうまくいかず、若干補正しながらでしたが無事完成。 ffmpeg を使って高速変換ができるようになりました。グラフィックスボードは GTX1050Ti を使っています。変換するのに、 10 倍とかというすごいスピードで変換できるものもあります。 h.265 は CPU を使うとかなりパワーを取られますが、 GPU を使うと CPU の使用率はそれほどでもなく高速変換が可能になります。もともと、動画ファイルを引っこ抜くのに Peppermint ( Linux )を使ったりしているので、ネットワーク上でファイルを移動する手間はかかるかなと思っていたのですが、ネットワーク越しに変換すれば変換速度よりもはるかに早いネットワーク速度があるので手間にはならないこともわかりました。

何の動画ファイルを落とすんだ? という問い合わせにはお答えできかねます。という答えで察してください(笑


知はいつも情に一杯食わされる。

ラ・ロシュフコー