飘在云端

东西南北,海角天涯

· 备查 · · 234次浏览

ffmpeg 删除视频中的片段 + GPU 硬编码/解码

B站的 必剪 一堆 BUG,剪辑一个 6 分钟的视频,未添加任何插件特效,仅删除几十秒片段,导出时卡 85% N久,检查 CPU,发现 占用仅持续 三分钟左右就下来了,但必剪导出的进度条显示 86%,并且一直卡着十分缓慢,不知道又是什么BUG

寄出 ffmpeg 大宝贝

环境:
Win10 x64、RTX 3060 12、i7-12700F、NVIDIA 显卡驱动 v526.98
ffmpeg 版本: version 2023-04-03-git-6941788d24-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
这里是下载 GitHub 的最新编译版的分支,latest git master branch build version: 2023-04-03-git-6941788d24
,其实就是基于6.0 系列的最新 commented

请输入图片描述

编译参数:

--enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint

直接从 ffmepg 官网下载已经编译好的成品二进制文件:https://www.gyan.dev/ffmpeg/builds/
下载最新编译版的分支:
latest git master branch build version: 2023-04-03-git-6941788d24

下载完后做些检查,发现默认包含了不少解码器了,执行 ffmpeg.exe -hwaccels 查看

请输入图片描述

  • cpu 软解,示例,删除视频文件中的 00:01:07 到 00:01:14 片段
ffmpeg -i 待修改视频.mp4 -vf select='not(between(t,67,74))',setpts=N/FRAME_RATE/TB -af aselect='not(between(t,67,74))',asetpts=N/SR/TB 修改好的视频.mp4

示例:提取视频前120秒内容,仅提取,保持原视频所有信息(例如:码率、编码、格式等)

ffmpeg -i 要提取的视频.mp4 -ss 0 -t 120 -c copy 输出的文件名字.mp4

-ss 0 从 0 秒开始,-t 提取时长,支持 HH:mm:ss 格式,如 -ss 01:02 -t 01:32,提取 1分02秒到1分32秒的视频

  • 调用 NVIDIA GPU 硬编码/解码,从 源 MPEG-4 Part 14 H.264 + ACC 编码格式转换为 H.265 HEVC 格式,并删除其中的4秒片段

    ffmpeg -vcodec h264_cuvid -an -gpu 0 -i 2.mp4 -vf select='not(between(t,220,224))',setpts=N/FRAME_RATE/TB -af aselect='not(between(t,220,224))',asetpts=N/SR/TB -vcodec hevc_nvenc -an -gpu 0 -y 3.mp4

整个视频没用之前要 2 分钟多,把 i7-12700F 20个核心 70% 占用率,用了之后 30 秒不到,cpu 可以摸鱼,占用 4%,GPU 吃满 100% ,并且半分钟不到搞定,十分舒服,然后发现丢失音频.....

也懒得追究之前必剪有没有调用 GPU,估计也是基于 ffmepg 实现的

请输入图片描述

参考文档:https://blog.csdn.net/irainsa/article/details/127868446
https://blog.csdn.net/m0_60259116/article/details/127017324
https://www.lmlphp.com/user/379737/article/item/10850094/
评论 (0条)