Captura de pantalla de FFmpeg y generación de miniaturas

Introducción: FFmpeg es una solución completa para grabar, convertir y transmitir audio y video, un conjunto de bibliotecas de códecs de audio / video líderes. La versión oficial de ffmpeg no admite los formatos rmvb y rm. Sin embargo, hay muchas soluciones.
El sitio web oficial de FFmpeg es http://ffmpeg.mplayerhq.hu/ .
El Wiki chino es http://www.ffmpeg.com.cn/ con mucha información.

Ejemplo 1:
Tome una captura de pantalla de una imagen de 352x240 en formato jpg en el 0.001 segundo del video test.asf:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

Ejemplo 2:
Convierta los primeros 30 fotogramas del video en un GIF animado:
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

Ejemplo 3 Tome una
miniatura de 320 * 240 en los 8.01 segundos del video
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg

Entre ellos:
fuente: es el nombre del archivo original, que puede estar en varios formatos como mov, mpeg, avi, wmv, y ffmpeg básicamente lo soporta.
-s wxh: especifica el ancho y alto del
video -b: establece la tasa de bits del
video -aspect: mantiene la proporción del video. Como 4: 3 o 16: 9
-y: si el archivo de destino existe, sobrescriba directamente el archivo de destino original.
-f: especifique el formato de archivo que se va a convertir, aquí está el formato flv. (De hecho, si no especifica el formato de archivo, ffmpeg también lo convertirá según la extensión del archivo).
dest: el nombre del archivo de destino que se va a convertir no tiene por qué ser necesariamente flv, puede ser mov, mpeg y otros formatos comunes.
Descripción del parámetro:
-L licencia
-h ayuda
-fromats muestra formatos disponibles, códec y protocolo
-f fmt fuerza el formato fmt
-I archivo de entrada de nombre de archivo
-y sobrescribe el archivo de salida
-t duración establece tiempo de registro hh: mm: ss El tiempo de grabación del formato [.xxx] también admite la
posición -ss para buscar el tiempo especificado [-] hh: mm: ss El formato [.xxx] también admite
s wxh: especifica el ancho y alto del video


Ejemplo 3: Para obtener una miniatura de un lugar específico para un video en formato flv, recuerde que el formato para la conversión forzada de -f es mjpeg porque quiero obtener una miniatura de .jpg. Muchos artículos escritos en Internet están escritos como ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg Esto es un error, es imposible de generar.

El código para usar FFmpeg para tomar capturas de pantalla y generar miniaturas en java: Si desea usar FFmpeg, necesita instalar su Cliente en su computadora.Puede consultar muchos tutoriales de instalación en Internet. Las clases relacionadas para generar capturas de pantalla están básicamente en la biblioteca del sistema, por lo que no es necesario importar el paquete jar, puede usarlo directamente después de copiar

package com.luntek.util;

import java.awt.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;


/**
 * @author Czw
 * @description: 通过ffmpeg截取视频图片
 * @date 2019/3/26
 */
public class FFmpegUtil {
    //FFmpeg安装时的bin目录下的指令路径
    private String ffmpegEXE;

    public FFmpegUtil(String ffmpegEXE) {
        this.ffmpegEXE = ffmpegEXE;
    }

    /**
     * -s wxh: 指定视频的宽和高
     * -b : 设定视频的比特率
     * -aspect: 保持视频的比率。如4:3或者16:9
     * -y : 如果目标文件存在时,直接覆盖原有的目标文件。
     * -f : 指定转换的文件格式,这里是flv格式。(其实如果不指定文件格式,ffmpeg也会按文件的后缀名来进行转换)。 
     * 拼接截图指令截图
     * @param videoInputPath 视频路径
     * @param coverOutputPath 截取的图片存放路径
     * @throws Exception
     */
    public void screenshotInstruction(String videoInputPath, String coverOutputPath) throws Exception {
        //ffmpeg  -i 划片.mov  -vframes 1  output.jpg
        List<String> command = new ArrayList<>();
        command.add(ffmpegEXE);
        command.add("-i");
        command.add(videoInputPath);
        command.add("-vframes");
        command.add("1");
        command.add(coverOutputPath);
        ProcessBuilder builder = new ProcessBuilder(command);
        builder.start();
    }

    /**
     * 拼接截取缩略图指令
     * @param videoInputPath 视频路径
     * @param coverOutputPath 截取的图片存放路径
     * @throws Exception
     */
    public void thumbnailInstruction(String videoInputPath, String coverOutputPath) throws Exception {
        //ffmpeg -i test.mov -y -f mjpeg -t 1.001 -s 100*100 a.jpg
        List<String> command = new ArrayList<>();
        command.add(ffmpegEXE);
        command.add("-i");
        command.add(videoInputPath);
        command.add("-y");
        command.add("-f");
        command.add("mjpeg");
        command.add("-t");
        command.add("1.001");
        command.add("-s");
        command.add("100*100");
        command.add(coverOutputPath);
        ProcessBuilder builder = new ProcessBuilder(command);
        builder.start();
    }

    public static void main(String[] args) {
    	//括号中的参数为电脑安装FFmpeg的bin目录下的ffmpeg.exe指令目录
        FFmpegUtil cover = new FFmpegUtil("D:\\FFmped\\ffmpeg-20180702-3c4af57-win64-shared\\bin\\ffmpeg.exe");

        try {
            //截图
            cover.screenshotInstruction("http://47.96.88.182/group1/M00/00/00/rBDOzlzHvsyAIh3dAMaIVYiI-pg2381742",
                   "C:\\Users\\Administrator\\Desktop\\test.jpg");

            //生成缩略图
            cover.thumbnailInstruction("http://47.96.88.182/group1/M00/00/00/rBDOzlzHvsyAIh3dAMaIVYiI-pg2381742",
            "C:\\Users\\Administrator\\Desktop\\test.jpg");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Inicio:
Inserte la descripción de la imagen aquí
Imágenes generadas:
Inserte la descripción de la imagen aquí
Cite parte del contenido de este artículo, gracias, jajaja ~: https://blog.csdn.net/wwwyuanliang10000/article/details/70799127
sigue vivo, no seas melancólico

Supongo que te gusta

Origin blog.csdn.net/qq_42910468/article/details/89737048
Recomendado
Clasificación