DTS no monótono en concat (ffmpeg)

17

Después de ejecutar este comando ffmpeg -f concat -i mylist.txt -c copy output.mp4, obtengo un output.mp4archivo dañado y este mensaje:

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

Contenido de mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

Salida cut.mp4 de ffmpeg:

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Salida cut2.mp4 de ffmpeg:

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 Llegué por este comando ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Llegué por este comando ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Busqué mucho, no encontré ninguna solución, tal vez alguien pueda ayudarme con esta.

output.mp4 es jugable, pero se ve raro.

ingrese la descripción de la imagen aquí

Whitesiroi
fuente
1
¿Puede proporcionar ambos archivos de entrada para que pueda realizar pruebas?
llogan
@LordNeckbeard sí, te lo envié, muchas gracias.
whitesiroi
1
Parece que no puedo duplicar el problema exacto. Estoy usando la compilación estática más reciente disponible de tessus . Los archivos de muestra parecen ser diferentes a su captura de pantalla, pero parece estar funcionando bien en VLC y QuickTime, excepto que la búsqueda parece desordenada. Probé en una máquina OS X porque se parece a lo que estás usando.
llogan
@LordNeckbeard Muchas gracias, sí, con esta versión ffmpeg versión N-71996-g372aa07-tessus funciona muy bien. Gracias.
whitesiroi
tl; dr; eliminar -c copypara permitir la codificación de nuevo o usar -c:a copysolo. Luego, el paso concat todavía puede usarse, -c copyya que todos los videos ya se han vuelto a codificar. Tenga en cuenta que algunos videos con esta advertencia aún se ven bien después de concat y, por -c copylo tanto, está bien.
皞 皞

Respuestas:

10

Usando lo último ffmpeg

Los usuarios generales siempre deben usar ffmpegdesde la rama maestra git actual (el último código disponible):

  • Cuando encuentre un problema, lo primero que debe hacer es verificar si está utilizando una compilación de git master.
  • Se considera estable.
  • Tendrá más correcciones de errores y características.
  • El desarrollo de FFmpeg es muy activo .
  • Si desea obtener soporte de recursos de ayuda oficiales, debe usar git master.
  • Los lanzamientos son para distribuidores.

Consulte la página de descarga de FFmpeg para conocer varias opciones, o consulte FFmpeg Wiki: Guías de compilación .

Otras cosas

  • En su comando con drawbox, puede copiar el audio con vapor en -c:a copylugar de volver a codificarlo.

  • Cuando se usa -ss, -tosolo funciona como se espera si -ssse usa como una opción de salida.

lema
fuente
Muchas gracias, funciona mejor y más rápido. ¿Puedes ver este también? Video.stackexchange.com/questions/15477/… Tengo curiosidad por saber si se puede simplificar.
whitesiroi
@whitesiroi Claro. Respondí, aunque parece que hice un comentario a esa pregunta infeliz.
llogan
Lo siento por eso.
whitesiroi
1

Según https://trac.ffmpeg.org/wiki/Concatenate

Tuve el mismo problema. Estoy ejecutando ffmpeg versión 2.6.3 en una mac. Convertí mis clips de origen al formato .MTS con una etiqueta agregada de -q 0, actualicé las extensiones en el archivo de texto y configuré mi archivo de salida a .MTS cuando ejecuté el comando concat en ffmpeg. Funcionó a las mil maravillas. Aquí está mi flujo de trabajo.

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

actualizado el archivo de texto (mylist.txt) para leer:

file clip-1.MTS
file clip-2.MTS

luego ejecutó el comando concat de la siguiente manera:

ffmpeg -f concat -i mylist.txt -c copy output.MTS

¡Trabajó para mi! Puede convertir la salida final. MTS a cualquier formato que necesite.

Duncan Lindsey
fuente
¿Es este protocolo sin pérdidas?
Becko
No, el primer comando se convierte a MPEG-2, que no tiene un modo sin pérdidas.
Gyan
1

Obtuve errores similares, y el audio en mis videos de salida a veces no estaba sincronizado y a veces faltaba por completo, pero terminé usando mkvmergemkvtoolnix en su lugar.

Mis videos de entrada habían sido codificados con diferentes configuraciones y tenían diferentes dimensiones, así que primero los redimensioné y los volví a codificar usando ffmpeg:

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

Algunos de mis videos de entrada no tenían un canal de audio, así que usé un comando como este para agregarles un canal de audio silencioso:

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

Después de eso concatenaba los videos:

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

Si sus archivos de entrada tienen las mismas dimensiones, la misma cantidad de canales de audio, la misma frecuencia de muestreo de audio, etc., puede usar solo mkvmergepara concatenar los archivos sin pérdidas. Los archivos de entrada para mkvmergetambién pueden tener un contenedor MP4 pero el archivo de salida tendrá un contenedor MKV incluso si su extensión de nombre de archivo se especifica como .mp4. Puedes correr ffmpeg -i output.mkv -c copy output.mp4para cambiar el contenedor.

mkvmergetiene una sintaxis como mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, donde mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvtambién se acepta.

nisetama
fuente
1

Basado en la respuesta realmente útil de Duncan:

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

Luego esto:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts
Hans-J. Schmid
fuente
0

Cuando uso ffmpeg para remezclar algunos videos grabados (pueden ser TS, MP4 o MKV) y obtengo los dts no monótonos en el flujo de salida: marcas de tiempo, etc., etc., el video resultante parece tener solo audio o se reproduce bruscamente. La única forma que he encontrado de tratar esto de manera confiable es usar AviDemux. Con la configuración de Copia para audio y video y seleccionando MP4V2 Muxer, es posible, en la opción Configurar, seleccionar Optimizar para transmisión. El archivo MP4 resultante ahora se puede usar en ffmpeg sin generar mensajes de error. Confía en que esto es de utilidad.

gjdgjd
fuente