Después de ejecutar este comando ffmpeg -f concat -i mylist.txt -c copy output.mp4
, obtengo un output.mp4
archivo 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.
-c copy
para permitir la codificación de nuevo o usar-c:a copy
solo. Luego, el paso concat todavía puede usarse,-c copy
ya 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 copy
lo tanto, está bien.Respuestas:
Usando lo último
ffmpeg
Los usuarios generales siempre deben usar
ffmpeg
desde la rama maestra git actual (el último código disponible):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 copy
lugar de volver a codificarlo.Cuando se usa
-ss
,-to
solo funciona como se espera si-ss
se usa como una opción de salida.fuente
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.
actualizado el archivo de texto (mylist.txt) para leer:
luego ejecutó el comando concat de la siguiente manera:
¡Trabajó para mi! Puede convertir la salida final. MTS a cualquier formato que necesite.
fuente
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
mkvmerge
mkvtoolnix 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:
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
mkvmerge
para concatenar los archivos sin pérdidas. Los archivos de entrada paramkvmerge
tambié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 correrffmpeg -i output.mkv -c copy output.mp4
para cambiar el contenedor.mkvmerge
tiene una sintaxis comomkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv
, dondemkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv
también se acepta.fuente
Basado en la respuesta realmente útil de Duncan:
Luego esto:
fuente
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.
fuente