¿Cómo puedo obtener la duración del video en segundos?
Lo que probé:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
Esto está cerca, pero no es tan preciso, 2383 son 39.71 minutos
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Respuestas:
Para obtener minutos, debes dividir 2383 segundos entre 60.
y luego multiplique la parte fraccional .7167 por 60 para obtener los segundos restantes.
Entonces son 39 minutos, 43 segundos. La aplicación parece estar dándole un valor exacto.
fuente
Solo use
ffprobe
directamente. No hay necesidad desed
,grep
, etc Hay varios "duración" se puede adquirir (dependiendo de su entrada).Duración del formato (contenedor)
Al agregar la
-sexagesimal
opción, se usará el formato de unidad de tiempo HORAS: MM: SS.MICROSECONDS:Duración de la transmisión de video
Los comandos anteriores son de FFmpeg Wiki: FFprobe Tips .
Con
ffmpeg
Es posible que deba decodificar por completo la entrada si encuentra que la duración del contenedor o la secuencia falta o es inexacta (posiblemente debido a un archivo dañado o truncado).
En este ejemplo
time=00:01:03.48
es la duración:Por supuesto, cuánto tiempo dependerá de la complejidad de la decodificación y la duración de su entrada y las capacidades de su computadora.
fuente
ffmpeg
sección "Con ".Si es así
ffmpeg
, también debería tenerffprobe
:Esto también dará fracciones de segundos, si ese es un problema, puede procesarlo más lejos con sed.
fuente
printf
, como| xargs printf %.0f
: esto devolverá un valor entero.Para mi ffmpeg-0.6.5-1.el6.rf.x86_64, para obtener solo el segundo, el formato del comando ffprobe es:
fuente
Solución con mplayer que da segundos directamente:
fuente
Esto genera la duración en milisegundos como un valor entero único. No hay necesidad de grep / cut / sed / ...
fuente
brew install mediainfo
Me encontré con el problema de obtener algunos metadatos extraños e incorrectos de algunos archivos de video con los que estaba trabajando y no pude encontrar un patrón o cualquier tipo de manejo usando código y herramientas como ffmpeg, mp4box, ffprobe, mediainfo, mplayer, para obtener la duración real del video.
Identificar la duración real del video fue un requisito para un proyecto en el que estaba trabajando y la única forma en que siempre lo hice bien fue volver a codificar el archivo de video usando ffmpeg y forzar a los archivos codificados a ignorar los metadatos del archivo original, como:
(Esto podría ejecutarse más rápido de lo esperado. Me sorprendió, por el tipo de contenido y el entorno que estaba usando, el tiempo promedio fue de 2 segundos)
... y luego obtén la duración usando una herramienta a tu elección. Me gusta mediainfo, por cierto: - "mediainfo FILE --Inform =" Video;% Duration% "te da la duración en milisegundos.
fuente
Si solo necesita consultar metadatos:
[...]
[...]
Para que pueda analizarlo:
Pero si desea obtener la duración efectiva del contenedor, debe decodificarlo:
Tomará un tiempo de CPU para decodificarlo, hasta que:
[...]
Entonces, puedes analizarlo:
fuente
Si desea una duración EXACTA, olvide FFmpeg. Solo proporciona una estimación basada en el tamaño del archivo y la tasa de bits promedio. ¡He encontrado, en algunos casos, el tiempo de duración estimado en 2 veces!
En Linux, si el archivo se crea y modifica solo durante dicha grabación de video, una solución alternativa sería usar el tiempo de creación y última modificación para calcular la duración, como en:
fuente