web-dev-qa-db-ja.com

MP4ファイルでオーディオトラックの一部を切り取ります

1つのビデオトラック(H.264、25 FPS)と1つのオーディオトラック(MP2)を含む.MP4ファイルがあります。全長は約2:52(2時間52分)です。 A/Vは2:34までは同期しているが、その後は非同期であることに気づきました。つまり、オーディオは約0.3秒遅れています。

私の計画は

  1. オーディオトラックを.MP2に抽出します
  2. 0.3秒をカットします(正常に動作するmp3directCutを使用)
  3. ビデオトラックとカットオーディオトラックを多重化します。

完了。しかし、ビデオの冒頭からA/Vが同期していなかったため、結果は満足のいくものではありませんでした。元のファイルを詳しく調べて、タイムスタンプをダンプしました。ビデオトラックの最小PTSは0.16秒で、PTSはすべて0.04増加し、ギャップはありません。オーディオトラックの最小PTSは0.212秒で、ほとんどのPTSは24ミリ秒増加します(MP2の場合は通常)が、24ミリ秒よりも小さいまたは大きい差分はほとんどありません(これは問題ありませんが、トラックを抽出するときに明らかに問題があります。質問を参照してください。未満)

私の質問は次のとおりです。MP2に抽出するときにタイムスタンプが失われますか?それから私の最初の計画は予見されます。 MP4ファイル内のオーディオトラックの小さな部分をカットする他の方法はありますか?もちろん、オーディオを再エンコードする必要はありません。私はFFmpegとAviDemuxに精通しています。

3
user674865

解決策は次のとおりです。

  1. オーディオトラックの最初の部分をpart1.mp4に抽出します
  2. オーディオトラックの2番目の部分をpart2.mp4に抽出します
  3. Part1.mp4とpart2.mp4をconcatしてcomplete.mp4
  4. 元のファイルからのMuxビデオとcomplete.mp4からのオーディオ

特定のFFmpegコマンドについては、@ Mulvyaからの上記のコメントを参照してください。彼/彼女のサポートに改めて感謝します。

0
user674865

MP2に抽出するときにタイムスタンプが失われますか?

はい。 .mp2/.mp3にはタイムスタンプがありません。

MP4ファイル内のオーディオトラックの小さな部分をカットする他の方法はどれですか?

MP2をサポートするタイムスタンプを持つコンテナ(MPEG-TS、MP4/MOV、MKVなど)。他にもあるかもしれません。


Concatdemuxerを試してください。

ffmpeg -i in.mp4 -f concat -i audio.txt -map 0:v -map 1:a -c copy out.mp4

どこ audio.txt

file in.mp4
outpoint 2:34:00
file in.mp4
inpoint 2:34:00.30
1
Gyan