何かが一致しないため、ファイルは適切に結合されません。
他の多くの人と同じように、結合されたビデオでサウンドが正しく同期することに問題がありました。クリップの仕様が同じであればMP4Boxは正常に動作しますが、場合によっては「適切な宛先トラックが見つかりません-新しいトラックを作成しています」という問題に遭遇します。いくつかの試行錯誤とさらなる調査の後、私はこれまでこれまで許容できる(私にとって)品質で機能してきたビデオへの参加に対処するための次の方法を開発しました。
フレームサイズが一致しない場合(ビデオトラックに関連する結合エラー):
一致しないセグメントに対して制約(最大コーデック互換性のために8で割り切れる)を設定することにより、オーディオを中断することなくビデオを正規化(-c:aコピー)
コマンドの例
width=856
height=480
avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4
オーディオが一致しない場合(オーディオトラックに関連する結合エラー):
オーディオを正規化
ビデオ(c:vコピー)を中断せずにオーディオを処理し、すべてのクリップが、c:aコーデック-ar周波数などの目的のコーデック、周波数、およびビットレート、およびステレオの場合はb:a 128kのビットレート(64K /チャネルは良いターゲットのようです)または何でも一致します。
例:avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4
(libmp3lameはmp3オーディオのコーデックであることに注意してください)コマンドを発行するavconv -codecs
かavconv -codecs|grep *codecname*
、例を特定のコードに絞り込むことで、avconvがサポートするエンコーダーのリストを取得できます。avconv -codecs|grep mp3
ファイルを正規化したので、それらを結合できます。この例では、ファイルをMP4Boxで結合します。持っていない場合は、コマンドを発行して取得できますsudo apt-get install gpac
コマンドでファイルを結合しますMP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4
(最初のファイルの前に猫はなく、追加の各ファイルの前には-catが付き、ターゲットファイルの前には-outがあることに注意してください)。
参加にMP4Box(MP4に推奨)を使用している場合、「適切な宛先トラックが見つかりません-新規作成(タイプビデオ)」というエラーを回避するために、仕様が一致しているかどうかに関係なく、すべてのクリップをavconvで処理する必要がある場合があります。
注:Bフレームを参照として使用しているため、AvidemuxがH.264 / AVC(トーテムごと)ファイルを使用してエンコードされたビデオに問題があることがわかりました。これにより、オーディオとビデオの両方をremuxなしでコピーすることを選択した場合でも、参加時にオーディオが同期しなくなるようです。セーフモードを選択しないとクラッシュし、セーフモードを使用すると同期が取れなくなる
出典:
/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player
/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv
https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr
注:私の知る限り、他のフォーマット(コンテナ)でもフレームサイズとオーディオレートの一致について同様の制約があるため、ビデオとオーディオを正規化した後で catまたはmencoderを介して参加しようとすると、aviでも機能する可能性があります。
オプション:必要に応じて、可変フレームレートと一定の品質設定25(推奨設定-素材と品質の期待に応じて調整)で、Handbrakeを使用して結合ファイルをより小さなサイズに再エンコードします。