Aumento de la duración del audio de ffmpeg usando atrim

Aumento de la duración del audio de ffmpeg usando atrim

tengo video de duracion10segundos y con la ayuda del siguiente comando puedo recortarlo y luego concatenarlo usando el siguiente comando:

Video

ffmpeg -y -i test_video.mp4 -filter_complex \
"[0:v]split=3[outvideo1][outvideo2][outvideo3]; \
[outvideo1]trim=0:2,setpts=PTS-STARTPTS[video1]; \
[outvideo2]trim=2:8,setpts=PTS-STARTPTS[video2]; \
[outvideo3]trim=start=8,setpts=PTS-STARTPTS[video3]; \
[video1][video2][video3]concat=n=3:v=1:a=0[outvideo]" \
-map '[outvideo]' test_video_text.mp4

Resultado de lo anteriorVideoEl comando está bien y la duración de test_video_text.mp4 también lo es.10segundos

Pero cuando se utiliza el comando anterior para audio como se muestra a continuación:

Audio

ffmpeg -y -i test_video.mp4 -filter_complex \
"[0:a]asplit=3[outaudio1][outaudio2][outaudio3]; \
[outaudio1]atrim=0:2,asetpts=PTS-STARTPTS[audio1]; \
[outaudio2]atrim=2:8,asetpts=PTS-STARTPTS[audio2]; \
[outaudio3]atrim=start=8,asetpts=PTS-STARTPTS[audio3]; \
[audio1][audio2][audio3]concat=n=3:v=0:a=1[outaudio]" \
-map '[outaudio]' test_video_text.mp3

La duración de test_video_text.mp3 aumenta de10segundos a20segundos teniendosilenciodespués del primero10segundos.

Aquí está la salida de la consola para audio:

ffmpeg version 3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.0.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-vda
  libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_video.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    creation_time   : 2015-09-24 18:32:33
  Duration: 00:00:09.87, start: 0.068254, bitrate: 235 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x320, 183 kb/s, 29.67 fps, 29.67 tbr, 29673 tbn, 59.35 tbc (default)
    Metadata:
      creation_time   : 2015-09-24 18:32:33
      handler_name    : Core Media Video
    Stream #0:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 48 kb/s (default)
    Metadata:
      creation_time   : 2015-09-24 18:32:33
      handler_name    : Core Media Audio
Output #0, mp3, to 'test_video_text.mp3':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    TSSE            : Lavf57.25.100
    Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc57.24.102 libmp3lame
Stream mapping:
  Stream #0:1 (aac) -> asplit
  concat -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
size=     156kB time=00:00:09.95 bitrate= 128.6kbits/s speed=63.7x    
video:0kB audio:156kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.219216%

Nota: Incluso yo eliminoactivospara el comando de audio el resultado es el mismo teniendo20segundos de duración.

Respuesta1

No es un error de codificación, sino uno relacionado con los metadatos de MP3, es decir, FFmpeg no codifica 20 segundos de audio. Insertar -write_xing 0. Se debe mostrar la duración correcta.

información relacionada