Ed Holloway-George
Ed Holloway-George

Reputation: 5149

How do you replace audio at a given timestamp with ffmpeg?

I am trying to use the ffmpeg library to take two FLAC files and replace the audio in File A with the audio in File B at a given timestamp.

For example if File B was to be played at 00:02 and was a second long, playing the output it would be (00:00-0:01) File A Audio -> (00:02-0:03) File B Audio -> (00:04-...) File A Audio

To do this, I have tried the following

ffmpeg -y -i original.flac -i replacement.flac -acodec copy -ss 2 -to 3 -write_xing 0 result.flac

But this only produces the original audio between the specified timestamps.

Is there any way to achieve this within ffmpeg?

Upvotes: 2

Views: 1931

Answers (1)

Gyan
Gyan

Reputation: 93261

The typical method to do this would be the concat demuxer, but there are issues with FLAC extraction with duration header in the output, so you can use

ffmpeg -y -i original.flac -i replacement.flac \
  -filter_complex "[0]atrim=0:2[Apre];[0]atrim=5,asetpts=PTS-STARTPTS[Apost];\
                   [Apre][1][Apost]concat=n=3:v=0:a=1" out.flac

Where 2 is the insertion point in seconds, and 5 is the insertion point + B's duration.

Upvotes: 3

Related Questions