Java implementa el corte de dimensión de tiempo de video | Clase de herramienta Java

Tabla de contenido

prefacio

Dependencias expertas

el código

Resumir


prefacio

Este artículo proporciona una clase de herramienta Java para cortar videos según la dimensión temporal, que es tan pragmática como siempre.

Dependencias expertas

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1.1-jre</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.2</version>
        </dependency>

el código

Sin tonterías, en el código.

package ai.guiji.csdn.tools;

import cn.hutool.core.util.IdUtil;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import org.bytedeco.javacpp.Loader;

import java.io.File;
import java.util.Arrays;
import java.util.List;

/** @Author 剑客阿良_ALiang @Date 2022/12/27 9:23 @Description: 视频剪切工具 */
public class CutVideoUtils {
  /**
   * 剪切视频
   *
   * @param inputVideoPath 输入视频地址
   * @param outputDir 输出目录
   * @param startTime 起始时间,格式:0:01、10:08
   * @param duration 持续时间,单位为:秒
   * @return 图片地址
   * @throws Exception 异常
   */
  public static String cut(
      String inputVideoPath, String outputDir, String startTime, Integer duration)
      throws Exception {
    List<String> paths = Splitter.on(".").splitToList(inputVideoPath);
    String ext = paths.get(paths.size() - 1);
    if (!Arrays.asList("mp4", "flv").contains(ext)) {
      throw new Exception("format error");
    }
    String resultPath =
        Joiner.on(File.separator).join(Arrays.asList(outputDir, IdUtil.simpleUUID() + "." + ext));
    String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
    ProcessBuilder builder =
        new ProcessBuilder(
            ffmpeg,
            "-ss",
            startTime,
            "-i",
            inputVideoPath,
            "-t",
            String.valueOf(duration),
            "-c:v",
            "copy",
            "-c:a",
            "copy",
            "-y",
            resultPath);
    builder.inheritIO().start().waitFor();
    return resultPath;
  }

  public static void main(String[] args) throws Exception {
    System.out.println(
        cut(
            "E:\\360MoveData\\Users\\huyi\\Desktop\\3333333.mp4",
            "E:\\360MoveData\\Users\\huyi\\Desktop\\",
            "0:10",
            5));
  }
}

Descripción del código:

1. Los parámetros del método de corte son la ruta del video de entrada, el directorio temporal de salida, el punto de inicio del corte y la duración del corte.

2. Preste atención al formato de la hora de inicio, se dan varios formatos: 0:01, 10:11, con los minutos al frente y los segundos al final.

3. Se ha verificado el formato del sufijo del archivo y puede ajustarlo según sus necesidades.

4. El tiempo de corte no debe exceder la duración del video.

verificar

La información del video preparado es la siguiente

 

Resultados de la

ffmpeg versión 4.3.2 Copyright (c) 2000-2021 los desarrolladores de FFmpeg
  compilaron con gcc 10.2.0 (Rev5, construido por el proyecto MSYS2)
  configuración: --prefix=.. --disable-iconv --disable-opencl --disable-sdl2 --disable-bzlib --disable-lzma --disable-linux-perf --enable-shared --enable-version3 --enable-runtime-cpudetect --enable-zlib --enable-libmp3lame --enable-libspeex --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-openssl -- habilitar-libopenh264 --habilitar-libvpx --habilitar-libfreetype --habilitar-libopus --habilitar-cuda --habilitar-cuvid --habilitar-nvenc --habilitar-libmfx --habilitar-w32threads --habilitar-indev=dshow --target-os=mingw32 --cc='gcc -m64' --extra-cflags=-I../include/ --extra-ldflags=-L../lib/ --extra-libs='- static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lgcc_eh -lWs2_32 -lcrypt32 -lpthread -lz -lm -Wl,-Bdynamic -lole32 -luuid'
  libavutil 56. 51.100 / 56. 51.100
  libavcodec 58. 91.100 / 58. 91.100
  libavformat 58. 45.100 / 58. 45.100
  libavdevice 58. 10.100 / 58. 10.100
  libavfilter 7. 85.100 / 7. 85.100
  libscale 5. 7.100 /
  5.100 libsampas 3.100 / 3.100 titing
# # 0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\360MoveData\Users\huyi\Desktop\3333333.mp4':
  Metadatos:
    marca_principal: isom
    versión_secundaria: 512
    marcas_compatibles: isomiso2avc1mp41 hora_de
    creación: 2022-09-08T12 :04:43.000000Z
    Hw : 1
                    :  tasa de
    bits : 16000000
                    : 
    com.apple.quicktime.artwork: {"data":{"edittime":22,"infoStickerId":"","musicId":"","os":"windows","product":"lv", "stickerId":"","videoEffectId":"","videoId":"245ba6f1-f2ab-4d70-bc77-c70ea30c171a","videoParams":{"be":0,"ef":0,"ft" :0,"ma":0,"yo":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate : 16000000
                    : 
    te_is_reencode : 1
                    : 
    codificador : Lavf58.76.100
  Duración: 00:00:26.91, inicio: 0.000000, tasa de bits:11898 kb/s
    Transmisión #0:0(und): Video: h264 (Principal) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 11741 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (predeterminado)
    Metadatos
      : tiempo_de_creación: 2022-09-08T12:04:43.000000Z
      handler_name : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, estéreo, fltp, 156 kb/s (predeterminado)
    Metadatos
      : Creation_time : 2022-09-08T12:04: 43.000000Z
      handler_name : SoundHandler
Output #0, mp4, to 'E:\360MoveData\Users\huyi\Desktop\\51afc6ecc1824343a779ac66fc43668c.mp4':
  Metadata:
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc
    _mp41 te_is
                    :      isomiso2avc
    1
                    te_is 
: 16000000
                    : 
    com.apple.quicktime.artwork: {"data":{"edittime":22,"infoStickerId":"","musicId":"","os":"windows","product":"lv", "stickerId":"","videoEffectId":"","videoId":"245ba6f1-f2ab-4d70-bc77-c70ea30c171a","videoParams":{"be":0,"ef":0,"ft" :0,"ma":0,"yo":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate : 16000000
                    : 
    codificador: Lavf58.45.100 Transmisión n
    .° 0:0(und): Video: h264 (principal) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2- 31, 11741 kb/s, 30 fps, 30 tbr,15360 tbn, 15360 tbc (predeterminado)
    Metadatos:
      hora_de_creación: 2022-09-08T12:04:43.000000Z
      nombre_del_controlador: VideoHandler
    Transmisión n.° 0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, estéreo, fltp, 156 kb/s (predeterminado)
    Metadatos:
      tiempo_de_creación: 2022-09-08T12:04:43.000000Z
      nombre_del_controlador : SoundHandler
Mapeo de transmisión: Transmisión
  #0:0 -> #0:0 (copiar)
  Transmisión #0:1 -> #0:1 (copiar)
Presione [q] para detener, [?] para ayuda
marco = 150 fps = 0.0 q=-1.0 Lsize= 6608kB tiempo=00:00:04.97 tasa de bits=10876.3kbits/s velocidad= 625x    
video:6507kB audio:95kB subtítulo:0kB otros flujos:0kB encabezados globales:0kB sobrecarga muxing: 0.082907%
E:\360MoveData \Usuarios\huyi\Escritorio\\51afc6ecc1824343a779ac66fc43668c.mp4

Proceso finalizado con código de salida 0
 

La información de video resultante es la siguiente

¡Bueno, ningún problema!

Resumir

No hay nada que resumir, atención al intervalo de tiempo.

Cuota

        Un día uno aprende que la envidia es lo más inútil, y que imitar a los demás equivale a suicidarse. ——"La debilidad de la naturaleza humana"

Si este artículo te ha resultado útil, dale me gusta , ¡gracias! !

Supongo que te gusta

Origin blog.csdn.net/zhiweihongyan1/article/details/128451979
Recomendado
Clasificación