¿Cómo puedo extraer una imagen de un momento particular de un video en Xubuntu 16.04?

8

Estoy buscando una opción de línea de comando.

Por ejemplo, si tengo el video sample-video.mp4y quiero generar un archivo de imagen sample-image.jpgdel video a la hora 00:00:26, ¿qué comando debo dar?

Además, sería muy útil si pudiera explicar en detalle cuál es la función de cada argumento del comando.

Sonevol
fuente
2
De acuerdo con esta pregunta y sus respuestas ffmpegparecen admitir nombres de archivo para la salida.
IQV

Respuestas:

8

Puede usar mplayer(desde el paquete mplayer, no instalado por defecto):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Esto creará el archivo, 00000001.jpgpor lo que debe cambiarle el nombre. Hasta donde sé, no hay forma de especificar un nombre de archivo.

-vo jpegsignifica que desea salida JPEG, -ss 00:00:26busca la posición dada, -frames 1significa procesar un cuadro y luego salir.

Florian Diesch
fuente
¿Cuál es la ventaja de obtener más de 1 fotogramas? ¿Serán copias o cada fotograma diferirá por un segundo?
Sonevol
Las imágenes creadas a partir de más cuadros diferirán por fracciones de segundo. El valor exacto depende del video.
Florian Diesch
55
@Sonevol El marco exactamente a las 0:00:26 puede no ser exactamente lo que quieres. Es posible que desee tomar los ~ 50 cuadros entre 0:00:25 y 0:00:27 (o incluso solo 3-4 cuadros alrededor de la marca 0:00:26) y luego navegar a través de ellos para elegir el mejor.
xDaizu
1
@FlorianDiesch También es posible enviar a png con algo como: -vo png:z=9con la configuración -z que especifica el nivel de compresión. Para JPEG también se puede añadir en una configuración de calidad: -vo jpeg:quality=100. Pero tu respuesta es genial, ya que es :)
andrew.46
13

Puedes usar ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel establece el logoutput en silencio porque ffmpeg es muy hablador
  • -ss es buscar (en segundos, es decir, dónde desea tomar la instantánea)
  • -i archivo de video de entrada
  • -t marco temporal de la instantánea (en segundos)
  • -f tipo de archivo

También puede jugar con las opciones, como la calidad de control de la salida -q:v <linear integer 1-10>o resolución jpeg -s 480x300.

Algunas ideas más aquí


Método VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc : porque es la línea de comandos y no queremos que se abra ninguna ventana. Además, esto significa que podemos ejecutarlo sin X11.

  • --start-time = 26 - es la posición exacta de la instantánea en segundos

  • --run-time = 1 - cuánto tiempo se "reproducirá" el video en segundos. Lo jugamos por un segundo para hacer una captura de pantalla de este segundo
  • --rate = 1 cuando tomar la captura de pantalla. Esto básicamente significa "cada segundo" y es útil, si tiene archivos más largos, para tomar una captura de pantalla cada 60 segundos o cada 5 minutos
  • --video-filter = scene le dice a VLC que queremos tomar capturas de pantalla
  • --vout = ficticio sin salida para video en X11, no lo necesitamos
  • --aout = ficticio sin salida para audio, no lo necesitamos
  • --scene-ratio = 24 le decimos a VLC que hay aproximadamente 24 cuadros por segundo
  • --scene-prefix = sample-image el nombre de archivo de su captura de pantalla
  • --scene-replace reemplaza cualquier archivo que se llame como tu captura de pantalla sample-image.pngcon tu captura de pantalla actual Si omite esto, VLC comenzará a numerar las capturas de pantalla
  • vlc: // salga salga de vlc una vez que hayamos terminado

Documentación completa aquí

Robert Riedl
fuente
¿Qué quieres decir con hablador? Y quiero una instantánea a los 26 segundos. Entonces, ¿por qué especificar el período de tiempo por -t. Estoy tomando una imagen, no un video.
Sonevol
3
"Chatty" porque ffmpeg imprime más de 40 líneas de salida de registro con este comando, como la versión actual, el tipo de configuración y la información sobre el archivo de video de entrada, lo cual no es interesante para usted. Para su propósito, probablemente puede omitir "-t 1". Parece que el valor predeterminado es un segundo o una fracción de eso, lo cual está bien para la captura de pantalla. La buena diferencia es la posibilidad de definir el nombre de archivo de salida y ajustar la calidad / resolución, etc.
Robert Riedl