Estoy usando este comando para cortar un segmento de un video desde la línea de comando
ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1
y lo llamo como
cut.bat video.mp4 001:23:45:678 10
y como se esperaba, obtengo un video_cut.mp4 con 10 segundos del video original, el problema es que unos pocos segundos del archivo resultante es una pantalla negra con audio, ¿por qué sucede esto y cómo lo soluciono?
%~n1
expande% 1 a un Nombre de archivo, o si solo está presente una ruta (sin barra diagonal inversa) - la última carpeta en esa ruta y%~x1
expande% 1 a una extensión de archivo solamente - .txt fuente: superuser.com/questions/ 224416 / ...Respuestas:
La mayoría de los videos usan códecs que realizan compresión temporal, por lo que un punto de corte específico puede basarse en fotogramas antes (y después) de ese punto de corte para que se decodifiquen correctamente. Entonces, cuando usa ffmpeg para recortar videos y usar el
copy
modo, ffmpeg tiene que incluir todos los cuadros antes y después del segmento recortado que son necesarios para decodificar el segmento correctamente.Entonces, tiene dos opciones, use el modo de copia pero configure un interruptor que permitirá a todos los jugadores reproducir correctamente estos archivos
(esto probablemente dará como resultado una salida que comienza antes de su punto de corte)
o volver a codificar las transmisiones
fuente
-t
opción.%
? Intenté buscar en ffmpeg.org/ffmpeg.html pero no encuentro el uso.-ss
y-t
antes-i
y funcionó, antes, solo puse-ss
antes-i
y-t
estaba después, así que no funcionó.https://github.com/mifi/lossless-cut/pull/13
Cuando ejecuto ffmpeg con los argumentos en este orden -i ... -ss ... -t ..., produce un archivo de video que no tiene video durante unos segundos iniciales. (por lo que puedo entender, ¿esto se debe a que no busca un fotograma clave?)
Si cambio el orden a -ss ... -i ... -t ..., los videos cortados resultantes se reproducen correctamente.
Mi
ffmpeg -version
fuente
-ss
antes-i
pero no funcionó en mi archivo mp4.