言い換えると,output.mp4 のサイズは W × H となります, "-filter_complex "[0:a][1:a]join=inputs=2:channel_layout=stereo[aout]" "で, [0:a]つまり left.wav の音声と, [1:a] つまり right.wavの音声を取り出して,結合しています ffmpeg (エフ ... 複数のaviの動画ファイルを結合する例(この例では、中間処理として、一度aviファイルをmpeg-1ファイルに変換する必要がある(mpeg-1, mpeg-2 ps, dvも連結可能) ... 音ズレ 問題. ffmpeg で複数動画結合 動機 + 「ついで」 ここで hstack, vstack 使ったついでに Merge Conference Video and Audio call output using hstack ffmpeg 的な、かなり起こりうるニーズのことをやってみよう、つーことである。 一つ前で予告した通り、『たとえばともだちと共同で同じ対象を撮影したとしてだ … もう一つの解も本質は一緒だったりするのだけれど、ffmpeg が標準出力に吐き出して、ffplay が標準入力を食べるようにする。ここでもマトリョーシカ: 出力ファイルを作りつつ ffplay でも再生する。ただこれ、「ffplay だけ終了」出来ない、と思う。のでやはり「お試し」でしか使えない技、ということになる。それでもまぁ「そもそも全部エンコード終わってみないことにはうまくいってるのかどうかがわからない」状態から較べれば微かに何億倍もマシ。. 著作権、youtube の利用規約、個人情報保護等々ナイーブでシビアな問題が多いし、どのみち「処理結果の意味が伝えやすい作為的な動画が必要」なので自作動画を使うしかない、てことでWaveform な動画を自作した。再掲: 1つ目と3つ目は頭で「スラッシュスラッシュ」が入ってるかどうかだけが違う同じ音声、2つ目と4つ目も同じ関係、スラッシュの数が違う。これは「同期する時刻が動画ごとに違う」ことを模擬するためにそうしてる。, これらは便宜的に i1.mp4、i2.mp4、i3.mp4、i4.mp4 という名前にしてあるとする。, 特に同期ポイントが動画開始に揃っていない動画について、どこで同期するかわからず試行錯誤するしかないとするならば、試行錯誤の一回あたりの時間も浪費しがちなので、「毎度動画全体を処理するのを待つ」ことは避けたいというわけだ。(当然そうなりにくいように、予め「およそこのくらい」というアタリをつけておくことも必要。), ffmpeg の終了方法を知っとくのが先決。ffmpeg は処理中キー入力を受け付けるが、「q」で「処理終了」出来る。つまり、適当な時間処理して「q」で止めると、その時間までの動画が出来上がる。Ctrl-C で強制終了すると終了処理が行われないので、壊れた動画になり、どのプレイヤーも再生出来ない。. 1×2、2×1、4×42×2 と順に…、なんてやってるとダルいので、一気に 4×42×2 で: filter_complex の書き方について熟知しているわけではなく、まだ雰囲気しかわかってないけど、これを読んでくれてるあなたもおそらく「雰囲気だけはすぐにわかる」と思う。0, 1, 2, 3 は当然4つの入力ファイルに対応してて、0:v は一個目の入力ファイルのビデオストリーム、なので一行目は「入力1のビデオストリームをリサイズしてこれを 0v とする」てこと。hstack, vstack 部分もこの要領で読めるでしょう(なのでscaleせずにそのまま結合するやり方も想像通りのものなはずよ)。本気であれこれやる必要が出たらもうドキュメントを熟読するしかない。まだワタシも全然出来てないけど。, amix と amerge の違いはよくわかってないし、音の混ぜ方を懲りたければ、色々もっと複雑なことが出来るみたいで、当然「左動画の音は左チャンネルに、右動画の音は右チャンネルに」なんてことをしたいなんてことは考えられるけど、これはワタシは今のところ用事ないので、今回はやめとく。(こういうのって「悔しいからやりたい」気分はないではないので、気力があって気が向いたら追記の形で書くかもしれないし書かないかもしれない。) ⇒ 2018-06-24追記: 書いた。, 「短い動画にお尻を揃えたい」なんてのはあると思うが、これはドキュメントを読めばわかると思う。, adelay の値としてパイプ記号で区切って二つの値を書いてるのは右チャンネル・左チャンネル別々に記述出来るから、かなと思う。(2018-06-16追記: 古いバージョンの ffmpeg (少なくとも 3.3.2)では adelay にゼロを与えるとエラーになるので注意。), パーフェクトに同期出来ないのが気に喰わん! 2Dで最大9種類。VRでは最大18種類のビットレート・画質違いのファイルを生成しています。 ffmpeg で複数動画結合 動機 + 「ついで」 ここで hstack, vstack 使ったついでに Merge Conference Video and Audio call output using hstack ffmpeg 的な、かなり起こりうるニーズのことをやってみよう、つーことである。 一つ前で予告した通り、『たとえばともだちと共同で同じ対象を撮影したとしてだ … ツール. 3840×960からどうして1400×1400になるの? と思われている方もいるかと思います。当初は1920×480での提供を考えていたのですが、これではFullHD解像度の約半分程度のピクセル数しかありません。 今の場合 i4.mp4 が基準で、i1.mp4 は i4.mp4 がスラッシュスラッシュ言い終わるまで待ってる、ということなわけね。だから「待ってるほう」が動かないのは無論意図通りなのだが、「待たせてるほう」は動かないとおかしいでしょう? この設定で高画質化が期待できるかもしれないので、60fpsで再生させるために解像度を落とされている方はぜひ試してみてください。, 弊社では、Windows VRではVP9を使用していますが、ほとんどのエンコードをH.264で行っております。今後、さらなる高解像度化を進めていくにあたり、AV1など新たなコーデックの採用も検討しながら、より一層高画質で安定した配信を目指しますので、引き続きよろしくお願い致します。. で、これ(ら)が済んで形式が整ったら今度はこれらを「結合」する。例えばこんな感じ: リストを予め作るのが面倒くさいというやり方で、他のやり方もないではなさそうなんだけど、まぁ多分これが一番素直。(なお、上の例は「リエンコードを伴う結合」。リエンコードを避けたければ「-c copy」を付けなはれ。), 最初に挙げた入力動画を使った結果をアップロードすると結構デカい(50MB)し、これの結果が想像出来ない人はいないと思うので省略。(concatinate の名の通り「連結」動画になる、それだけ。), 結合部分をブラックアウトにするとかフェードアウト・フェードインにするとかについては、たとえばこんな検索で見つかると思う。, 2018-06-28追記: 以前の記事では再エンコードをかけながら結合する方法を紹介しました。 この時点では無劣化で再エンコードなしの結合方法がうまくいかなかったんですが、その後うまくいくコマンドが分かりました。 -map 0:a オーディオファイルが複数存在する場合は、全てのものを同梱する, さて、長い動画ファイルができたのですが、パートで区切って動画を分けたくなることもよくあります。 -c:v copy ビデオコーデックをコピーする(無劣化) 動画編集に便利な ffmpeg でよく使うワンライナーをまとめます.このエントリは今後も随時更新する予定です., "-map [0:v]" は 入力の0番目,つまりvideo.mp4 の映像(v)データを,出力 output.mp4 に割り当てるという意味です., "-map [1:a]" は 入力の1番目,つまりaudio.mp3 の音声(a)データを,出力 output.mp4 に割り当てるという意味です., これで video.mp4 (つまり [0:a])は無視されたファイルが出来上がります, 音声audio.mp3をADELAY秒遅らせる場合は -i audio.mp3 の直前に -itsoffset ADELAY を指定します, "-itsoffset DELAY "はそのオプションの直後のストリームに対してのみ作用します, 入力ファイル(INPUT) の時刻 START から D 秒間を切り出して,OUTPUT として保存する, 例えば動画 input.mp4 の先頭3分30秒から 120秒を切り取って output.mp4 として保存するには, 例えばフレームの右上だけを切り出す場合は filter の crop を使います., 切り出す範囲は矩形で指定します. 左上の座標が (X,Y) 右下の座標は(X+W,Y+H)となります. MacやWindows PCで動画の音ズレを直すには、 音ズレを修正する機能を持つ動画編集の無料ソフトがいい選択です。 それでは、初心者向けの動画の音ズレを補正するソフト2つをお薦めします。 (1)動画の音ズレを補正するソフト~VideoProc こんにちは。 FFmpegは、オーディオとビデオの記録、変換、およびストリーミング機能を実行できるオープンソースの無料ソフトウェアです。簡単に言うと、このソフトは無料で使える動画および音声のエンコーダである。この記事は、FFmpegをWindowsでインストール、実行する方法を説明します。 今回お届けするのは、「進化する動画配信基盤」についての連載第8回目の記事です。, 第6・7回の記事でお伝えしたとおり、JIROで高速かつ高画質にエンコードができるようになりました。このJIROを支えているのは皆さんご存知のffmpegです。今回の記事では、JIROでどのようなことが行われているのかについて、もう少し詳細にffmpegのエンコードコマンドを添えてご紹介致します。, JIROの重要な機能の一つが分散エンコードによる高速化です。1本の動画ファイルを1台のエンコーダーでエンコードするのではなく、複数のファイルに分割し、複数のエンコーダーでエンコードを行っています。, ここでは、JIROで扱いやすい形、かつバックアップに最適なファイルを生成するために一度エンコードを行います。配信用のファイルではないので、ビットレートの設定はせずに品質指定でエンコードしています。プリエンコードで重要なのはKeyframeの挿入位置です。後に行うファイル分割の位置がKeyframeの挿入位置で決まってしまうからです。ここでは60フレーム毎にKeyframeを挿入し、シーンチェンジのタイミングではKeyframeでなくI-frameを挿入しています。このあたりは皆さんこだわりがあるところかと思いますが、どの様に設定されていますか? FFmpeg(エフエフエムペグ)は動画と音声を記録・変換・再生するためのフリーソフトウェアである[6]。Unix系オペレーティングシステム (OS) 生まれであるが現在ではクロスプラットフォームであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。, FFmpegは、単体ではGUIを持たないツールでUNIXコマンドのように振る舞う。その為、対話式アプリケーションとして使用される場合、フロントエンドを用いる事も多い。コマンドラインから実行するCUIとして配布されているのは、ユーザが必要とすればフロントエンドを利用でき、スクリプトなどのバッチ処理を行う際に呼び出す事もできるという利点からである。また、FFserverと組み合わせる事により、ファイルシステムやデバイスファイルとストリーミングサーバ間のフィルタとしても動作する。, 2011年3月13日にFFmpegの開発は、開発体制の対立からffmpeg.orgとlibav.orgに分裂した。どちらもffmpegというソフトウェアをリリースしているが、Libav(英語版)側はavconvに名称を切り替える作業を進めている。この分裂に伴い、Debian[7]、Ubuntu[8] 11.04、Gentoo LinuxはLibav側を採用した。, 2015年7月にDebianはセキュリティ問題への対応姿勢からLibavを排除し、FFmpeg採用に戻った。UbuntuもFFmpeg採用に戻っている[9]。, FFmpegでは数多くのオプションを利用することができる。それらはffmpegのバージョンによって差異があるため、利用前にオプションやコーデックの表記を確認することが望ましい。オプションは ffmpeg -h で表示できる。また、コーデック名等は ffmpeg -formats や ffmpeg -codecs で表示できる。( コーデック名は下記注意事項参照 ), 引数が異なる場合、FFmpeg.orgのffmpegとLibavのavconv両方併記する。なお、Libavのffmpegは従来通りの引数が使える。, なお、concatスキーマ(concat:input.avi.part1|input.avi.part2)はストリームの物理的な結合のみ行うため、この場合は使えない。, 公式サイトでは、コンパイル済みのバイナリは配布されていないため、自分の環境に合わせてソースコードをコンパイルすることもできるが、 FFMpeg、携帯動画変換君の音ズレ. すると、トップボトム(アスペクト比1:1) 1920×1920と同じファイルに変換ができて、1400×1400の解像度とすることが可能になります。 , もっと単純な例はもっと単純なのでわかるとは思うけれど、たぶんとっかかりでつまづくとすれば、map の中にどう書けばいいかの部分で、上の例では filter_complex 内に書いていたラベルがマッピングの値になるけれど、特にフィルターすることがないようなシンプルなものでは例えばこんな具合なのよ: つーかさぁ、これでマルチアングルに出来るのかな、と調べようとするとさ、リッピングなダークサイドネタばかりがわんさか出るわ出るわ。あのなぁ…。実際 ffmpeg の情報収集がしにくいのも一番の原因はソレ。そしてドキュメントがえれーわかりにくいしな。, しかしまぁよくも一方的に「DVD や BD からリッピングした VOB をごにょごにょする」ネタばかりに偏るもんだ。そうではなくてさ、「マルチアングルな DVD を作るには?」みたいな初心者ネタがわんさか出ないと不健全だろうに。, なのでね、こういうマルチストリームな mp4 を「どうにか DVD 的なマルチアングルに仕立て上げる」術が全然見つけられず。諦める。, というかさぁ、「マルチアングル」ってそもそも誰が嬉しいの、とは思ったりする。そもそも「切り替え操作」という行為なくしては意味がないのだが、その「切り替え行為」がね、そんなに快適ではなくて、やはり「同時に観たい」のだよね、本来は。「複数台のディスプレイでマルチアングルの各々を同時再生」(テレビスタジオなんかでよくあるアレ)だけが本当の理想なのであって、ワタシが上でやった「4×42×2 分割同時再生」も DVD なマルチアングルも結局は「妥協案」に過ぎなくて、てことよね。, ということなのだけれど、「多重音声」なら話は別。こちらは例えば「日本語・英語同時再生」を常にやりたい「わけはなく」、もともとが「切り替え行為」との相性は良いわけよ。だってさぁ、「本編音声とオーディオコメンタリーを同列で同時に聞きたい」なんてこたぁねいでしょ、普通はどっちかに集中したいわけだ。, なので、「多重音声」ネタの方はやりたいと思っているのだけれどもね。こちらも同じ理由で全然欲しい情報にたどり付けてない。, いつもの通りワタシは MSYS ユーザなので、MSYS bash のコマンドラインね, (bash)シェルスクリプトの態だが、再利用可能性のためではなく単にコマンドラインで書き切るのが大変だから, 末尾の hstack, vstack, amerge を取っ払って -map しなおしてるだけさ, 2018-07-04追記: この記事全体と jeorgen/align-videos-by-sound の関係, "scale=iw/2:-1,pad=1280:720:(ow-iw)/2:(oh-ih)/2:color=black", "/c/Program Files/ffmpeg-3.3.2-win64-shared/bin/ffplay.exe". 2020 All Rights Reserved. JIROは .NET Coreで開発しているのですが、Argumentsプロパティは32699文字未満にする必要があるようです。, こちらは実際にはWindowsの制約のようで、Linuxはディストリビューションによって異なるようですが、64KB、128KBまで可能なようです。 -async 1 音声の同期方法。最初だけ同期して後続のサンプルはそのままといういみ それを 1.0003256倍の速度で再生,その結果に "[a]"という名前をつけています, オプション -map "[0:v]" は,入力 original.mp4 の 映像(v)を,出力 output.mp4 に割り当てるという意味です., オプション -map "[a]" は,変換後の音声データ "[a]"を,出力 output.mp4 に割り当てるという意味です., pyopyopyoさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog 「典型的には -r でフレームレート、-ar でオーディオサンプリングレート、-c:v でビデオコーデック、-c:a でオーディオコーデック、ここいらだろうとは思う」と書いたとおりなのだが、「壊れた動画がすぐさま簡単に作れます!」という意味だと、どうやらサイズ(解像度)とともに「フレームレート」が一番の主犯のようだ。, サイズ違いの場合は「映像が壊れる」のだが、フレームレート違いの場合は、「同期が壊れる」。実際にやってみればわかるが、たとえば「絵の方だけ早送りみたいなヘンな動画」になる。てわけで、「解像度とフレームレートだけは最低限統一しておくべし」てことなのだろうなと思う。たぶんサンプリングレートもこれにあたるんじゃないかとは思うが、今のところワタシは偶然これでは問題起こしてない。, 2018-06-29追記: ffmpeg で動画の頭とかお尻にパディングに simple_stack_videos_by_sound_track の件を追記しておいたのだが、これを作りながら気付いたことがいくつかあった。, 出力のサンプリングレートを強制するには aresample を使えばいい。これは simple_stack_videos_by_sound_track の中でやってるので、みてもらったらいい。, あと SAR (setsar=1) しないと壊れるというパターンもあった。何が起こってるのかよくわかってないんだけれど、解像度がヘンなもの、たとえば 10×18 みたいな酔狂なものを扱おうとすると、setsar=1 しないと ffmpeg がエラーで死ぬ。これも simple_stack_videos_by_sound_track の中でやってる。. x264では、min-keyint値以下でシーンチェンジを検出すると、KeyframeではなくI-frameを挿入してくれます。, 下記のコマンドでも実現可能に思えますが、実際にはシーンチェンジ検出時でもkeyframeが入ったため使用できませんでした。, ちなみに、シーンチェンジ時にKeyframeやI-frameを入れて効果があるのは、ビットレートを指定しないエンコードの場合です。ビットレートを指定したエンコードでシーンチェンジ検出を有効にするとKeyframeやI-frameに多くのビットを費やされるので、画質は悪くなることがあります。, この連載の第9回でテーマになるアーカイブ配信では、このプリエンコードは行っていません。理由は、納品の時点でプリエンコードと同等のファイル形式になっていて、キーフレームも同等の位置で挿入されているからです。この処理を省略することで当日24時公開が可能になりました。, プリエンコードしたファイルに音量調整したものをAWS S3にバックアップしています。連載の第10回で、バックアップ後のファイルの活用について紹介するのでぜひ御覧いただければと思います。, ここで分散エンコードのキーになるファイル分割を行っています。分割もffmpegの機能を使っています。特別なことはしていないので、早速コマンドをご紹介します。, 1本の動画から映像を抽出し、segmentを使って複数の映像ファイルに分割しています。音声は分割せず、1本の音声として処理します。, 大量のエンコーダーを使用し、分割したファイルをそれぞれエンコードします。 結合したステレオ音声は "[aout]" で名前をつけています, "[aout]"の音声データは -map "[aout]" で output.mp3 に保存されます., 例えば,上記の表示なら,映像 v.mp4 の長さは 01:05:00.57 となります., このように動画に含まれている,映像データと音声データとで再生時間が違うと,音ズレが発生します., 音ズレを修正するには,映像と音声どちらかの再生速度を変えて,再生時間を揃えればOKです., 再生速度の変換は音声処理の方が早いので,今回は映像はそのままで,音声の再生速度を変えることにします, 映像に合わせて,音声の再生速度を x 倍に変換すると考えると 次にトップボトム(アスペクト比1:1)です。 FullHDの解像度は、1920×1080なので、トータルのピクセル数と縦・横のサイズを範囲内の1080×1080として検証を進めていました。ですが、それではFullHDと比べても画質が落ちたので、トータルのピクセル数のみをFullHDと同等となるように1400×1400とすることで、再生も可能で画質もFullHDと同等になりました。 MacやWindows PCで動画の音ズレを直すには、 音ズレを修正する機能を持つ動画編集の無料ソフトがいい選択です。 それでは、初心者向けの動画の音ズレを補正するソフト2つをお薦めします。 (1)動画の音ズレを補正するソフト~VideoProc Ffmpegで複数動画を結合して一つの動画に出力 | Creazy! ここで、問題なく映像と音声が再生できれば完成なのですがJIROでは音ずれが発生してしまいました。 (この区切りが動画ファイルの区切りと合っていないことも多いので、一旦結合した), ffmpegで特定部分の切り出しは可能ですが、該当する部分のタイムスタンプを取得する必要があります。, 色々方法はあると思うのですが、ボクは簡単にいつも使っている動画プレイヤー「VLC」で再生して該当部分のタイムスタンプをメモしておきました。, 【オプション解説】