ffmpeg - mux video and audio and trim the audio

2.9k views Asked by At

I have a long audio part and a short video part which I want to mux together.

I'm trying the following command to mux:

  1. Video_0-0002.h264 - whole file (2 secs long)
  2. Audio.wav - from 4 till 6 seconds
ffmpeg -y -i /Documents/viz-1/01/Video_0-0002.h264 -i /Documents/viz-1/01/Audio.wav -codec:v copy -f mp4 -af atrim=4:6 -strict experimental -movflags faststart /Documents/viz-1/01/Video_0-0001.mp4

But the audio is messed up... how can I do it correctly?

Also tried, sounds like there is silence in the end.

ffmpeg -y -i Video_0-0003.h264 -i Audio.wav -c:v copy -af atrim=6:8,asetpts=PTS-STARTPTS -strict experimental -movflags +faststart Video_0-0003.mp4

    Input #0, h264, from 'Video_0-0003.h264':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: h264 (Main), yuv420p(progressive), 388x388 [SAR 1:1 DAR 1:1], 30 fps, 30 tbr, 1200k tbn, 60 tbc
    Guessed Channel Layout for Input Stream #1.0 : stereo
    Input #1, wav, from 'Audio.wav':
      Duration: 00:00:16.98, bitrate: 1411 kb/s
        Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Output #0, mp4, to 'Video_0-0003.mp4':
      Metadata:
        encoder         : Lavf57.56.100
        Stream #0:0: Video: h264 (Main) ([33][0][0][0] / 0x0021), yuv420p(progressive), 388x388 [SAR 1:1 DAR 1:1], q=2-31, 30 fps, 30 tbr, 1200k tbn, 1200k tbc
        Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s
        Metadata:
          encoder         : Lavc57.64.101 aac
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
      Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
    Press [q] to stop, [?] for help
    [mp4 @ 0x7fca8f015000] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
    [mp4 @ 0x7fca8f015000] Starting second pass: moving the moov atom to the beginning of the file
    frame=   60 fps=0.0 q=-1.0 Lsize=     242kB time=00:00:02.02 bitrate= 982.2kbits/s speed=  21x
    video:207kB audio:32kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.382400%
    [aac @ 0x7fca8f017400] Qavg: 1076.270

3

There are 3 answers

3
Gyan On BEST ANSWER

Try

ffmpeg -y -i /Documents/viz-1/01/Video_0-0002.h264 -i /Documents/viz-1/01/Audio.wav -c:v copy -af atrim=4:6,asetpts=PTS-STARTPTS -strict experimental -movflags +faststart /Documents/viz-1/01/Video_0-0001.mp4
0
CodeCalf On

Your problem should be related to different time scales of both the streams you need to explicitly set the video timescale to match your audio (-video_track_timescale) and then add vsync flag to sync video to audio preferably -vsync 1

0
Oleksandr Kyrpa On

You can try to cut audio by video timing, and then marge video and audio track. Use -vn and -an in separate ffmpeg process.

ffmpeg -i video.mp4 -c:v h264 -an -y video.h264
ffmpeg -i video.mp4 -c:a aac -t 00:01:00 -vn -y audio.aac

And for marge tracks:

ffmpeg -i auido.acc -i video.h264  -c:v copy -c:a copy -f mp4 -y out.mp4