El uso de -ss como opción de entrada junto con -c:v copy podría no ser precisa, ya que ffmpeg se ve obligado a utilizar/dividir sólo en fotogramas i. Aunque ajustará -si es posible- el tiempo de inicio del flujo a un valor negativo para compensar eso. Básicamente, si usted especifica "segundo 157" y no hay ningún fotograma clave hasta el segundo 159 incluirá dos segundos de audio (sin vídeo) al principio, y luego empezará desde el primer fotograma clave . Así que tenga cuidado al dividir y hacer la copia del códec copia.
Para evitar esto, he probado a encontrar primero las marcas de tiempo de los fotogramas necesarios para -ss
y -to
construyendo un mosaico de todos los marcos cercanos. He generado los azulejos utilizando
ffmpeg -i "INPUT.mkv" -ss 09:55 -t 3 -vf "drawtext=fontfile=I\\:\Misc\\\\~Software\\\\~OS\\\\I386\\\\arial.ttf: fontsize=60: text='F%{n}\(%{pict_type}\)\@%{pts\:hms}': x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1,scale=320:-1,tile=layout=12x10" tiles%03d.png
y según ellos el fotograma clave necesario debería empezar a partir de las 00:09:56.012, y el último fotograma necesario debería estar en las 00:10:00.224. Sin embargo, el fragmento creado al cortar con estas marcas de tiempo
ffmpeg -i "INPUT.mkv" -map 0:0 -map 0:4 -map 0:5 -map 0:6 -ss 09:56.012 -to 00:10:00.224 -vcodec copy -acodec copy J01.mkv
comienza en un fotograma no clave (sólo sonido) y termina también en un lugar equivocado. Por el contrario, el corte del mismo fragmento en Avidemux funciona bien incluso con los ajustes de salida de vídeo y audio establecidos en Copy
(IIUC, sin recodificación y partiendo de un fotograma sin clave). Marcas de tiempo mostradas en Avidemux también son diferentes ( -ss 09:56.346 -to 10:00.558
v.s. -ss 09:56.012 -to 10:00.224
).
También he probado a cortar por pkt_dts_time ( https://stackoverflow.com/questions/14005110/ ), pero eso tampoco funcionó.
p.d. Otro procedimiento similar a lo que estoy tratando de hacer (al mencionado Avidemux) es cuando en Sony Vegas se hace un zoom en la línea de tiempo hasta que se puede pasar de un fotograma a otro, entonces se establece el primer fotograma después del cambio de escena (que también es un fotograma clave) como punto de partida y el último fotograma de la misma escena (después del cual viene el siguiente fotograma clave que no es necesario) como punto final y luego se renderiza. Algo así también se puede hacer en Avidemux mientras se copian también los flujos de vídeo y audio.
edit1: Aquí está el registro de -copyts
versión: pastebin . com /Cxzrc8Er. ¿Debo hacer otros también?
edit2: Aquí están los resultados de "PATHTO\ffprobe.exe" -select_streams v -show_entries packet=pts_time,flags -of compact -read_intervals 580%600 "INPUT.mkv" | findstr K
.
packet|pts_time=578.160000|flags=K
packet|pts_time=581.205000|flags=K
packet|pts_time=583.499000|flags=K
packet|pts_time=585.042000|flags=K
packet|pts_time=588.671000|flags=K
packet|pts_time=594.885000|flags=K
packet|pts_time=596.012000|flags=K
También he probado todo el combo de comandos (mosaicos, listar los fotogramas de esta manera, cortar el fragmento de dos maneras diferentes) en otros 2 videos, y los resultados son similares. Los tiempos de los fotogramas clave listados en la terminal usando tu comando sugerido coinciden con los de los azulejos hechos por el mío; y generalmente el corte por mi método deja una pequeña sección congelada (~1s) al principio y a veces varios fotogramas no deseados al final y el corte por tu método deja un flujo de vídeo vacío más largo al principio.
También he encontrado un fragmento de vídeo mejor para experimentar porque es visualmente más fácil determinar cuánto de los fotogramas deseados faltan y de los no deseados se han añadido (imgur.com /a /DTzmt, la parte relevante se puede descargar en bit.ly /Kmnz112f1). Su solución también funcionó mejor en él.
Además, sólo para estar seguros: ¿Querías decir -ss 09:56.01 3 y no -ss 09:56.01 2 en su solución original? Y, ¿estoy en lo cierto al suponer que en general funciona en los vídeos que estás cortando y que en los míos no es habitual?