飘在云端

东西南北,海角天涯

· 备查 · · 524次浏览

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

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

更令我崩溃的是,没调用 GPU,玩呢?摸鱼?直接软解吃满我的 cpu 所有线程

只好寄出 ffmpeg 大宝贝

环境:
Win10 x64、RTX 3060 12、i7-12700F、NVIDIA 显卡驱动 v526.98
ffmpeg 版本: version 2023-04-03-git-6941788d24-full built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
这里是下载 GitHub 的最新编译版的分支,latest git master branch build version: 2023-04-03-git-6941788d24
,是基于6.x 系列的最新提交

请输入图片描述

我打包了一份截止到 2023-04-03 最新上游开发版 committed 版本,(含完整编译成品 exe、文档、大量解码器、硬件加速插件:Nvidia CUDA 、dxva2、qsv、d3dllva、opencl、vulkan)7-zip 自解压文件,运行后选择解压目录即可

https://www.aliyundrive.com/s/Fpi7cMGY2Xm
提取码: 3el7

请输入图片描述

编译参数:

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


下载完后做些检查,执行 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

整个视频没用之前要 3 分钟多,把 i7-12700F 20 个核心干到 70% 占用率,用了之后 30 秒不到,cpu 可以摸鱼,占用 4%,GPU 吃满 100% ,并且半分钟不到搞定,十分舒服,然后发现硬解时丢失音频.....不管了,mark一下,下次再填坑,估计是音视频需要拼接合成、缺少参数?

另外B站云端会对视频进行二次压制,对 1080P 限制死了码率,只给了 2.6 Mbps 码率,高帧率 5.2 Mbps,详细见:https://www.bilibili.com/video/BV1z5411X7dM
请输入图片描述

参考文档: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条)