Java implémente la découpe de la dimension temporelle de la vidéo | Classe d'outils Java

Table des matières

avant-propos

Dépendances Maven

le code

Résumer


avant-propos

Cet article fournit une classe d'outils Java pour découper des vidéos selon la dimension temporelle, toujours aussi pragmatique.

Dépendances Maven

        <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>

le code

Pas de bêtises, sur le code.

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));
  }
}

Description du code :

1. Les paramètres de la méthode de coupe sont le chemin vidéo d'entrée, le répertoire temporaire de sortie, le point de départ de la coupe et la durée de coupe.

2. Faites attention au format de l'heure de début Plusieurs formats sont donnés : 0:01, 10:11, avec les minutes devant et les secondes derrière.

3. Le format du suffixe de fichier a été vérifié et vous pouvez l'ajuster en fonction de vos besoins.

4. Le temps de coupe ne doit pas dépasser la longueur de la vidéo.

Vérifier

Les informations vidéo préparées sont les suivantes

 

Résultats de la

ffmpeg version 4.3.2 Copyright (c) 2000-2021 les développeurs FFmpeg
  construits avec gcc 10.2.0 (Rev5, Construit par le projet MSYS2)
  configuration : --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 -- enable-libopenh264 --enable-libvpx --enable-libfreetype --enable-libopus --enable-cuda --enable-cuvid --enable-nvenc --enable-libmfx --enable-w32threads --enable-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
  Libswscale 5. 7.100 / 5. 7.100
  LibSwrespelem
0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\360MoveData\Users\huyi\Desktop\3333333.mp4' :
  Métadonnées :
    major_brand : isom
    minor_version : 512
    compatible_brands : isomiso2avc1mp41
    creation_time : 2022-09-08T12 :04:43.000000Z
    Hw : 1
                    : 
    bitRate : 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,"me":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate : 16000000
                    : 
    te_is_reencode : 1
                    : 
    encodeur : Lavf58.76.100
  Durée : 00:00:26.91, début : 0.000000, débit :11898 kb/s
    Flux #0:0(und): Vidéo : 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 (par défaut)
    Métadonnées :
      creation_time : 2022-09-08T12:04:43.000000Z
      handler_name : VideoHandler
    Stream #0:1(und) : Audio : aac (LC) (mp4a / 0x6134706D), 44100 Hz, stéréo, fltp, 156 kb/s (par défaut)
    Métadonnées :
      creation_time : 2022-09-08T12:04 : 43.000000Z
      handler_name : SoundHandler
Output #0, mp4, to 'E:\360MoveData\Users\huyi\Desktop\\51afc6ecc1824343a779ac66fc43668c.mp4' :
  Métadonnées :
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc1mp41
    te : 1
                    :  HbitRw
    : 1
                    : 
    HbitRw : 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,"me":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate : 16000000
                    : 
    encodeur : Lavf58.45.100
    Flux #0:0(und): Vidéo : h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2- 31, 11741 kb/s, 30 ips, 30 tbr,15360 tbn, 15360 tbc (par défaut)
    Métadonnées :
      creation_time : 2022-09-08T12:04:43.000000Z
      handler_name : VideoHandler
    Flux #0:1(und) : Audio : aac (LC) (mp4a / 0x6134706D), 44100 Hz, stéréo, fltp, 156 kb/s (par défaut)
    Métadonnées :
      creation_time : 2022-09-08T12:04:43.000000Z
      handler_name : Mappage de
flux SoundHandler :
  Flux #0:0 -> #0:0 (copie)
  Flux #0:1 -> #0:1 (copie)
Appuyez sur [q] pour arrêter, [?] pour l'aide
frame= 150 fps= 0.0 q=-1.0 Lsize= 6608kB time=00:00:04.97 bitrate=10876.3kbits/s speed= 625x    
video:6507kB audio:95kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.082907%
E:\360MoveData \Users\huyi\Desktop\\51afc6ecc1824343a779ac66fc43668c.mp4

Processus terminé avec le code de sortie 0
 

Les informations vidéo résultantes sont les suivantes

D'accord pas de problème!

Résumer

Il n'y a rien à résumer, attention à l'intervalle de temps.

partager

        Un jour, on apprend que l'envie est la chose la plus inutile et qu'imiter les autres équivaut au suicide. ——"La faiblesse de la nature humaine"

Si cet article vous a été utile, n'hésitez pas à le liker, merci ! !

Je suppose que tu aimes

Origine blog.csdn.net/zhiweihongyan1/article/details/128451979
conseillé
Classement