Python3 FFMPEG精确剪切测试笔记——使用ffmpeg-python库
1. 测试环境
1.1 ffmpeg-python
ffmpeg-python库文档:
https://github.com/kkroening/ffmpeg-python
命令安装:
pip install ffmpeg-python
1.2 ffmpeg
FFmpeg下载页面:
https://ffmpeg.org/download.html
D:\test_video>ffmpeg -version
ffmpeg version N-101404-g17127f81c5 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9.3-win32 (GCC) 20200320
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-opencl --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --disable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 67.100 / 56. 67.100
libavcodec 58.129.100 / 58.129.100
libavformat 58. 71.100 / 58. 71.100
libavdevice 58. 12.100 / 58. 12.100
libavfilter 7.109.100 / 7.109.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100
1.3 测试视频
测试视频下载点这里
2. 重新编码情况(有损剪切)
2.1 编码参数
ffmpeg.output( vcodec=‘h264’)
2.2 正确参数用法总结
input(ss=HH:MM:SS.xxx),output(t=HH:MM:SS.xxx),output(vframes=n)
ss = 入点时码前一帧
t = 目标时长帧数加一帧
vframes = 目标时长帧数加一帧
ms = frame / fps
2.3 测试过程
为了测试精准剪切,用了三个镜头,第一个镜头保留两帧,第三个镜头保留两帧
2.31 测试一
剪切打点出入点时码 timecode.frame
- 8.10f (138f) - 20.13f (333f) = 12.1875 (195f)
转码命令出入点时码 timecode.ms
- 8.625ms (138f) - 20.8125ms (333f) = 12.1875 (195f)
import ffmpeg
(
ffmpeg
.input('test.mp4',ss="00:00:08.625")
.output('output_cut.mp4',vcodec='h264',acodec='aac',t="00:00:12.1875")
.overwrite_output()
.run()
)
frame= 195 fps=0.0