La salida de ffmpeg concat no se reproduce en el reproductor de Windows Media

0

Tengo una serie de videos cortos (<3 segundos) mp4 (algunos con audio, otros sin audio) que se reproducen bien en todos los clientes. 15 fps, audio AAC. Cuando uso ffmpeg concat, el archivo resultante se reproduce bien en vlc, sin embargo, en winmedia ignora cualquier silencio en la pista de audio. En quicktime reproduce todo el video, solo reproduce el primer audio. Siento que tiene algo que ver con la sincronización de video y audio, pero soy nuevo con ffmpeg. Si tomo la salida y la recodifico con freno de mano, crea un archivo que funciona.

exec ("ffmpeg -f concat -i files.txt -c  copy finalvideo.mp4");

y luego hago esto:

exec ("ffmpeg -i finalvideo.mp4 -c:v copy -c:a libfaac -r 24 output.mp4");

Revisado con nuevas salidas después de garantizar que ambos audios de origen tengan la misma codificación (creo)

Información del nuevo archivo de pausa

/home/fresh/public_html/ffmpeg/output$ ffmpeg -i /home/fresh/public_html/ffmpeg/output/ENP22122.mp4
ffmpeg version N-61053-gab5d46d-syslint Copyright (c) 2000-2014 the FFmpeg developers
built on Mar  3 2014 13:27:18 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-  libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-  libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.101 /  2.  5.101
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/fresh/public_html/ffmpeg/output/ENP22122.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf55.33.100
Duration: 00:00:04.07, start: 0.000000, bitrate: 63 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1   DAR 4:3], 5 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
Metadata:
  handler_name    : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, mono, s16p, 96 kb/s (default)
Metadata:
  handler_name    : SoundHandler

Información del nuevo archivo de audio

/home/fresh/public_html/ffmpeg/output$ ffmpeg -i /home/fresh/public_html/ffmpeg/output/ENT22122.mp4
ffmpeg version N-61053-gab5d46d-syslint Copyright (c) 2000-2014 the FFmpeg developers
built on Mar  3 2014 13:27:18 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-  libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.101 /  2.  5.101
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/fresh/public_html/ffmpeg/output/ENT22122.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf55.33.100
Duration: 00:00:03.07, start: 0.000000, bitrate: 56 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 6 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
Metadata:
  handler_name    : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, mono, s16p, 96 kb/s (default)
Metadata:
  handler_name    : SoundHandler

Salida del comando concat

/home/fresh/public_html/ffmpeg/output$ ffmpeg -f concat -i /home/fresh/public_html   /ffmpeg/filesnotime.txt -c  copy /home/fresh/public_html/ffmpeg/finalvideo.mp4
ffmpeg version N-61053-gab5d46d-syslint Copyright (c) 2000-2014 the FFmpeg developers
built on Mar  3 2014 13:27:18 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.101 /  2.  5.101
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100
[concat @ 0x14a2900] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from '/home/fresh/public_html/ffmpeg/filesnotime.txt':
Duration: 00:00:00.08, start: 0.000000, bitrate: 102 kb/s
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 6 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, mono, s16p, 96 kb/s
Output #0, mp4, to '/home/fresh/public_html/ffmpeg/finalvideo.mp4':
Metadata:
encoder         : Lavf55.33.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 480x360 [SAR 1:1 DAR 4:3], q=2-31, 6 kb/s, 15 fps, 15360 tbn, 15360 tbc
Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 44100 Hz, mono, 96 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)

frame=  828 fps=0.0 q=-1.0 Lsize=     392kB time=00:00:55.00 bitrate=  58.4kbits/s    
video:81kB audio:289kB subtitle:0 data:0 global headers:0kB muxing overhead 6.031527%
usuario2271364
fuente
2
Lo sentimos, pero tu pregunta no es muy clara. ("¿Ignora cualquier silencio"?) ¿Cómo son los archivos de entrada? ¿Puedes dar la salida de simplemente ffmpeg -i <inputfile>para cada uno? Además, proporcione el comando y la salida de la consola de ffmpegcuando ejecuta el comando.
Rajib
Gracias por la rápida respuesta. No estoy muy familiarizado con ffmpeg pero agregué las salidas de la consola arriba. Ignore cualquier silencio, solo quiero decir que cuando se une a los archivos ignora los videoclips que no tienen audio, por lo que si no hay audio, todo el clip parece ignorarse.
user2271364
He actualizado las salidas de la consola con las nuevas después de que parece que mis archivos fuente tienen el mismo códec. No entiendo cómo ejecutar el filtro concat, donde aparece la lista de archivos. Gracias por su ayuda.
user2271364
1. Tiene un espacio en blanco entre public_htmly /ffmpeg. 2. ¿Cuál es el problema con la salida ahora, ya que ambos archivos tienen audio? Y su duartion (final) indica que está agregando más archivos.
Rajib
Ejemplo: freshlingo.com/ffmpeg/finalvideo.mp4 Tengo 3 segundos de audio, 4 segundos de pausa para cada elemento. Reproduce audios de 3 segundos uno encima del otro, puede ver en la marca de 7 segundos donde comienza la próxima diapositiva, el audio debe alinearse con esto. Por alguna razón está ignorando las pausas. gracias Cuando ejecuto el filtro concat, ¿cómo lo hago para un montón de archivos, o necesito escribir un script?
user2271364

Respuestas:

2

El concat demuxerque está utilizando solo funciona si los archivos tienen el mismo número de secuencias cada uno. Lee esta documentación.

En otras palabras, necesitará incorporar audio (silencioso) en los archivos que no tienen audio. Prueba esto:

 ffmpeg -f lavfi -i aevalsrc=0 -i ENP22122.mp4 -shortest \
 -c:v copy -c:a aac -strict -2 newmuxedfile.mp4    

Luego puede concatenar el archivo newmuxedfile.mp4 siempre que los códecs sean los mismos. El demuxer no funcionará si los códecs difieren. Así que aquí lo usé aaccomo en su otro archivo. Si el concat falla para códecs diferentes, use en su concat filterlugar.

ffmpeg -i ENA22122.mp4 -i newmuxedfile.mp4 -filter_complex \
'[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' \
-map '[v]' -map '[a]' -c:v libx264 -c:a aac -strict -2 output.mp4   

Tenga en cuenta que puede usar -c:v copysi los códecs de video son iguales.

Para ver todos los métodos de concatenación, consulte esta documentación.

Rajib
fuente
Gracias. Ahora tengo mis archivos fuente en exactamente el mismo formato y todavía tengo problemas de salida con concat. En lugar de publicar otro grupo de resultados, ¿hay alguna forma de contactarlo? y tal vez ver si quieres consultar sobre esto?
user2271364
¿Has probado el filtro concat? Edite su pregunta para agregar las nuevas salidas de consola y su comando. Hay muchos expertos aquí que están felices de "consultar" de forma gratuita.
Rajib
Actualización: 1. El uso de concat / filter en mis archivos de origen y salida funciona perfectamente en todas las plataformas. 2. Usando concat / filter, une dos archivos en lotes, luego usa concat en esos archivos que falla la salida. 3. Concat en otros archivos fuente funciona. Me devuelve a mis archivos fuente como el problema, pero todos parecen el mismo códec. Pregunta: ¿Sabes cuál es el límite con concat / filter? Parece que aparece un error 'demasiadas entradas' por encima de 3 archivos.
user2271364