web-dev-qa-db-ja.com

avconvコマンドから非同期化されたオーディオ

私は現在、異なるデバイスからのいくつかのビデオを1つのビデオに結合しようとしています。設定は次のとおりです。

  1. ユーザーが電話で3本のビデオを録画します(AndroidまたはiOs)
  2. システムはこれらのビデオ(mp4形式)をサーバーに送信します
  3. サーバーはファイルを移動し、これらをTSファイルに変換します(なぜですか?すべてのビデオをこの形式にフォーマットするのが良いと思ったからです)

これらの手順の後、4つのビデオと組み合わせたいと思います。これは、私たちのビデオを「ov」と呼ぶことにより、最終的な組み合わせのステップは次のようになることを意味します。

_ov1 > sent video 1 > ov2 > sent video 2 > ov3 > sent video 3 > ov4_

これはいくつかの問題を引き起こします。私たちはすべてのビデオを同じフォーマット、同じオーディオチャンネル、そしてこれらの行でこれまでに何でもフォーマットしてきました(変更されるのはファイル名だけです)

_avconv -ss 0 -i "48_0.85825500-14815530815710.mp4" -vcodec libx264 -acodec aac -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y "tmp_48_0.ts"
_

これは、私たちに関する限り、すべてのビデオが同じビデオ(h264_mp4toannexb)およびオーディオ(aac_adtstoasc)形式にコンパイルされることを意味します。これらのビデオをこのように組み合わせると、オーディオが非同期になります。

_avconv -i concat:"2connect-ae.ts|tmp_48_1.ts" -c copy -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -y "output.mp4"
_

私たちは、さまざまなソースからさまざまな方法でビデオを圧縮/コンパイル/変換する方法を変更しようとしてきましたが、成功しませんでした。 Final CutProとAdobeAfterEffectsから4つのエクスポートされた.wovファイルを取得しました。ツールの変更は機能しませんでした。

どういうわけか、私たちのビデオ(ov1、ov2、ov3、ov4)からの音がユーザーによって送信されたビデオに重なっていて、音の遅延が毎秒増加し続けています。なぜこれが起こり続けるのか、私たちは一種の心を打たれています、どんな助けでも大いに感謝されます。

送信されたビデオを相互に添付する場合、遅延はありません。自分のビデオをリストに追加すると、オーディオが遅れ始めます。さらに詳しい情報が必要な場合は、お知らせください。

私たちのバージョンに関する情報:

avconv version 9.11-6:9.11-2ubuntu2, Copyright (c) 2000-2013 the Libav developers built on Mar 24 2014 06:12:33 with gcc 4.8 (Ubuntu 4.8.2-17ubuntu1) avconv 9.11-6:9.11-2ubuntu2 libavutil 52. 3. 0 / 52. 3. 0 libavcodec 54. 35. 0 / 54. 35. 0 libavformat 54. 20. 3 / 54. 20. 4 libavdevice 53. 2. 0 / 53. 2. 0 libavfilter 3. 3. 0 / 3. 3. 0 libavresample 1. 0. 1 / 1. 0. 1 libswscale 2. 1. 1 / 2. 1. 1


指定されたコメントを編集します。現在、次のオプションを使用して、すべての動画を同じサイズに変換しようとしています:-filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2'

すべてのビデオは1920x1080に変換されます。私たちはまた、私たちが持っていたすべてのオプションを取り除き、それがどこで間違っていたかを見なければならなかったものに戻る方法を構築しようとしています。しかし、これは大きな一歩であり、一種の絶望的な一歩のようにも思えます。


edit2

現在実行しているコマンドは次のとおりです。

_avconv -i "33_0.98002500-14821542538733.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_0.ts"
avconv -i "33_0.57471800-14821542544448.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_1.ts"
avconv -i "33_0.27939600-14821542541226.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_2.ts"

avconv -i "templates/v2/wiebenik-v2.mov" -f mpegts "wiebenik-v5.ts"
avconv -i "templates/v2/ikkanjehelpenmet-v2.mov" -f mpegts "ikkanjehelpenmet-v5.ts"
avconv -i "templates/v2/ikbenopzoeknaar-v2.mov" -f mpegts "ikbenopzoeknaar-v5.ts"

avconv -i concat:"wiebenik-v5.ts|tmp_ruud_0.ts|ikkanjehelpenmet-v5.ts|tmp_ruud_1.ts|ikbenopzoeknaar-v5.ts|tmp_ruud_2.ts" -strict experimental "test.mp4"
_

編集3;私は現在、すべてのファイルを変換し、それらのサイズを同じ形式に変更し、次に示すようにそれらを正規化しています。

_avconv -i "public/videos/44_0.90768300-14822311688474.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_0.mp4"
avconv -i public/videos/tmp_44_0.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_0_normalized.mp4
avconv -i "public/videos/44_0.09416600-14822311719723.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_1.mp4"
avconv -i public/videos/tmp_44_1.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_1_normalized.mp4
avconv -i "public/videos/44_0.37376500-14822311735955.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_2.mp4"
avconv -i public/videos/tmp_44_2.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_2_normalized.mp4
_

これらの変更の後、私はそれらを次のように組み合わせています:

_MP4Box public/videos/templates/v2/wiebenik-v2.mp4 -cat public/videos/tmp_44_0_normalized.mp4 -cat public/videos/templates/v2/ikkanjehelpenmet-v2.mp4 -cat public/videos/tmp_44_1_normalized.mp4 -cat public/videos/templates/v2/ikbenopzoeknaar-v2.mp4 -cat public/videos/tmp_44_2_normalized.mp4 -cat public/videos/templates/v2/2connect-v2.mp4 -out public/pitches/44_9b374c31dcaa7433daf0f5163a3789dc.mp4
_

しかし、どういうわけか、たった2つのファイルでも、エラーが発生します。

_Cannot concatenate files: Different AVC Level Indication between source (42) and destination (40)
_

私のファイルには高品質の異なるバージョン(4と4.2)があることがわかりましたが、これを解決する方法はまだわかりません。

1
Tosfera

あなたが抱えている問題は、選択の悪い組み合わせに関連しているように思われます。

コンテナとしてMPEGトランスポートストリームを選択しました。 トランスポートストリーム 一定のブロードキャストレートを維持するために、一定のビットレート(CBR)としてブロードキャストされる傾向があり、十分なデータがない場合はパディングバイトで埋められます。 X264 にはネイティブの固定ビットレートモードがないため、コーデックとしてx264を選択することでこれは複雑になっているようです。私には、これは直感に反しているように見えます。

私がこのプロジェクトを担当していたとしたら、保険をかけたいことがたくさんあります。

1)。結合する予定のすべてのクリップは、正規化(つまり、同じビデオサイズ、同じオーディオサンプリングレート、同じオーディオである必要があります。 ビデオビットレート)

2)私が選択した コーデック および コンテナ フォーマットには互換性のある特性があります。

正確なタイミングを保証するために、特定のビットレートでロスレスサンプルを使用してすべての編集を行うのが賢明である可能性があります。

aac は不可逆圧縮であるため、オーディオのタイミングは疑わしいものになります。

さらなる調査によると、長年の問題があります コンテナがflv、m4a、mov、mp4でない場合の-bsf:a aac_adtstoascのaacコピーの問題 その投稿の最後のコメントを読むことをお勧めします。

実際のオプションの例については、私の答えを参照してください ここ そして本当に必要な場合は-f mpegts完全なA/V同期を確認した後、最後にその手順を実行します。

1
Elder Geek