web-dev-qa-db-ja.com

ビデオファイルを分割、再エンコード、結合すると、オーディオをクリックします

大きなビデオファイルをより速くエンコードしたいと考えています。エンコーディングを高速化するために、複数のエンコーディングサーバーを使用しています。以下は、フローをエンコードするプロセスです。

  1. まず、以下のコマンドを使用してビデオを小さなセグメントに分割します

    ffmpeg -i F:\video_data_set\4k_compressed.mp4 -f segment -segment_time 5 -segment_start_number 1 -codec copy -copyts -avoid_negative_ts 1 F:\video_data_set\test\%d_4k_compressed.mp4

  2. 次に、これらのセグメントを複数のエンコードサーバーに分割します。各エンコードサーバーは、以下のコマンドを使用してセグメントを再エンコードします。

    ffmpeg -hide_banner -i F:\video_data_set\test\1_4k_compressed.mp4 -c:a aac -ar 44100 -b:a 128k -c:v libx264 -x264opts nal-hrd=cbr:force-cfr=1 -pix_fmt yuv420p -profile:v baseline -level 3.0 -vf "scale=1280:-2,setdar=16:9" -b:v 3.9M -minrate 3.9M -maxrate 3.9M -bufsize 7.8M -preset ultrafast -crf 18 -r 30 -g 30 -threads 8 F:\video_data_set\test\1_4k_compressed_1.mp4

  3. すべてのセグメントが再エンコードされたら、以下のコマンドを使用してそれらを結合し、単一のファイルを作成します

    ffmpeg -hide_banner -f concat -safe 0 -i F:\video_data_set\test\files_2.txt -c copy -threads 8 F:\video_data_set\4k_compressed_1.mp4

すべてが順調に機能していますが、私たちが直面している問題は、各セグメントの後に出力オーディオにクリック音があることです。

たとえば、上記のコマンドを使用して結合したときに、期間が6、6、3、6、および6秒の5つのセグメントをエンコードしました。出力ビデオには、6、12、15、および21秒のビデオでクリック音があります。

このクリック音の原因と、このクリック音を修正して出力ビデオから削除する方法を教えてください。

1
Faraz Ahmed

これはよく知られている効果です:-segment有効なビデオエントリポイント(つまり、Iフレーム)でビデオを分割しますが、常に有効なオーディオエントリポイントで分割するわけではありません。

これを回避する最善の方法は、最初のステップでビデオとオーディオを分割することです。

ffmpeg -i F:\video_data_set\4k_compressed.mp4 -f segment -segment_time 5 -segment_start_number 1 -c:v copy -an -copyts -avoid_negative_ts 1 F:\video_data_set\test\%d_4k_compressed.mp4 -vn -c:a aac -ar 44100 -b:a 128k F:\video_data_set\test\audio.m4a

次に、現在のワークフローと同様にビデオセグメントを続行します。

最終ステップの使用

ffmpeg -hide_banner -f concat -safe 0 -i F:\video_data_set\test\files_2.txt -i F:\video_data_set\test\audio.m4a -map 0:v -map 1:a -c copy -threads 8 F:\video_data_set\4k_compressed_1.mp4

オーディオを再度追加します。

1
Eugen Rieck