12

I want to add an M4A audio of 5s duration to an MP4 video file. I have already tried the -itsoffset command of ffmpeg.

ffmpeg -i a.mp4 -itsoffset 00:00:10 -i b.m4a -map 0:0 -map 1:0 -preset ultrafast o.mp4

Commandline output

ffmpeg -i psy.mp4 -itsoffset 00:00:10 -i cut.m4a -map 0:0 -map 1:0 -c:v copy -preset ultrafast -y out.mp4
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil      52. 19.100 / 52. 19.100
libavcodec     55.  0.100 / 55.  0.100
libavformat    55.  0.100 / 55.  0.100
libavdevice    54.  4.100 / 54.  4.100
libavfilter     3. 45.103 /  3. 45.103
libswscale      2.  2.100 /  2.  2.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'psy.mp4':
Metadata:
major_brand     : mp42
minor_version   : 0
compatible_brands: isommp42
creation_time   : 2013-12-03 03:22:01
Duration: 00:04:12.17, start: 0.000000, bitrate: 723 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 640x360, 624 kb/s, 23.98 fps, 23.98 tbr, 48k tbn, 47.95 tbc
Metadata:
  handler_name    : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96
kb/s
Metadata:
  creation_time   : 2013-12-03 03:22:02
  handler_name    : IsoMedia File Produced by Google, 5-11-2011
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.m4a':
Metadata:
major_brand     : M4A
minor_version   : 512
compatible_brands: isomiso2
encoder         : Lavf55.0.100
Duration: 00:00:05.24, start: 0.237460, bitrate: 99 kb/s
Stream #1:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96
kb/s
Metadata:
  handler_name    : SoundHandler
Codec AVOption preset (Set the encoding preset (cf. x264 --fullhelp)) specified
for output file #0 (out.mp4) has not been used for any stream. The most likely r
eason is either wrong type (e.g. a video option with no video streams) or that i
t is a private option of some encoder which was not actually used for any stream
.
Output #0, mp4, to 'out.mp4':
Metadata:
major_brand     : mp42
minor_version   : 0
compatible_brands: isommp42
encoder         : Lavf55.0.100
Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x360, q=
2-31, 624 kb/s, 23.98 fps, 48k tbn, 48k tbc
Metadata:
  handler_name    : VideoHandler
Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16
, 128 kb/s
Metadata:
  handler_name    : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (aac -> libvo_aacenc)
Press [q] to stop, [?] for help
frame=  916 fps=0.0 q=-1.0 size=     865kB time=00:00:38.16 bitrate= 185.7kbits/
frame= 1758 fps=1749 q=-1.0 size=     865kB time=00:01:13.28 bitrate=  96.7kbits
frame= 2477 fps=1645 q=-1.0 size=     865kB time=00:01:43.26 bitrate=  68.6kbits
frame= 3182 fps=1586 q=-1.0 size=     865kB time=00:02:12.67 bitrate=  53.4kbits
frame= 3961 fps=1580 q=-1.0 size=     865kB time=00:02:45.16 bitrate=  42.9kbits
frame= 4904 fps=1631 q=-1.0 size=     865kB time=00:03:24.49 bitrate=  34.7kbits
frame= 5667 fps=1615 q=-1.0 size=     865kB time=00:03:56.31 bitrate=  30.0kbits
frame= 6046 fps=1549 q=-1.0 Lsize=   19345kB time=00:04:12.12 bitrate= 628.6kbit
s/s
video:19234kB audio:83kB subtitle:0 global headers:0kB muxing overhead 0.146119%

The problem is: it does start at 00:00:10 but it keeps repeating after every 10s. (You can notice this only when you play the whole video without touching the seekbar.)

When I play this video on Android, then the audio starts from the beginning. It plays fine with VLC.

Expected result: Silence in video till specified time, then my audio, and again silence after audio.

0

1 Answer 1

16

I finally solved the problem by adding just 1 option -async

ffmpeg -y -i a.mp4 -itsoffset 00:00:30 -i sng.m4a -map 0:0 -map 1:0 -c:v copy -preset ultrafast -async 1 out.mp4

By default audio/video timestamps are stretched to match each other; which was my problem of audio starting from initial even after giving the "itsoffset" option.

As per Ffmpeg Doc, using -async 1 corrects the initial timestamp of audio only. I know that this option is deprecated; but anyhow it solved my case.

2
  • Out of curiosity, where is this version from: "version N-50911-g9efcfbe"
    – Rajib
    Jan 29, 2014 at 11:23
  • 2
    @Rajib It was compiled from the source code from the FFmpeg git repository. See git log 9efcfbe in the ffmpeg source directory (if you cloned the FFmpeg git repo), or see git.videolan.org/?p=ffmpeg.git;a=commit;h=9efcfbe
    – llogan
    Jan 29, 2014 at 18:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .