ffmpeg视频剪辑

环境 与背景:

centos 8

最近在做短视频的混剪,视频内容解析,视频合成。其中利用gpt生成文案,然后合成语音,将视频素材切分成不同片段。然后将这些片段与语音合成新的视频。

1 、安装 ffmpeg

安装方式有三种:

1、yum install FFmpeg (具体方法请网上查询)

2、直接下载编译好的二进制文件ffmpeg, 然后将文件复制到环境路径中,如:/usr/local/bin

3、源码编译安装。

我使用的是源码编译安装,即 方式3。具体安装方式参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos#FFmpeg
但是,最后一步,即编译FFmpeg的方式有区别,完整命令如下:

复制代码
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure   --prefix="$HOME/ffmpeg_build"   --pkg-config-flags="--static"   --extra-cflags="-I$HOME/ffmpeg_build/include"   --extra-ldflags="-L$HOME/ffmpeg_build/lib"   --extra-libs=-lpthread   --extra-libs=-lm   --bindir="$HOME/bin"   --enable-gpl   --enable-libfdk_aac   --enable-libfreetype   --enable-libmp3lame   --enable-libopus   --enable-libvpx   --enable-libx264   --enable-libx265   --enable-nonfree  --enable-libass 

即增加了lib: --enable-libass , 增加该库的原因是: 在给视频增加用-vf加上字幕文件,是需要 ass库的支持。

参考资料

https://www.pengrl.com/p/20029/

https://blog.csdn.net/weixin_45617478/article/details/103336168

https://blog.csdn.net/weixin_54720578/article/details/132901995

macOS上安装很简单,直接用brew安装。

2、常用剪辑功能

分段切片视频

复制代码
ffmpeg -y  -i 12b8162de5e626a8ffd7851c2bb1d5ba.mp4 -ss 0.0 -t 14.0 -an -q 0 sub1709518126-777.mts

合并视频

将生成的 mts 片段合并成一个视频。将mts视频名称填写到一个 txt文件中,如下所示:

视频文件: videos1710730113.txt

复制代码
file sub1710730098-607.mts
file sub1710730104-727.mts
file sub1710730106-630.mts
file sub1710730113-937.mts

cd {dest_path} &&  ffmpeg -y -f concat  -i {video_file_name} -c copy {dest_name}

其中:

dest_path - 视频所在目录

video_file_name: 视频文件名, 即 videos1710730113.txt

dest_name: 输出视频名

合并视频与音频

复制代码
ffmpeg -y  -i dest_1709518127_clip.mp4 -i tts-1709518124.mp3 -c:v  copy -c:a aac -strict experimental  dest_1709518127_clip_au.mp4

给视频添加字幕

字幕文件:

1709518125.srt

复制代码
1
00:00:00,20 --> 00:00:01,30
大家好 今

2
00:00:01,30 --> 00:00:01,980
天给大家介绍

3
00:00:01,980 --> 00:00:02,890
一款睫毛贴

ffmpeg -y -i dest_1709518127_clip_au.mp4 -vf "subtitles=1709518125.srt:force_style='Fontsize=16'" dest_1709518127_clip_st.mp4

3、问题:

时间戳偏移问题

问题的产生

使用python的VideoFileClip进行视频合并时, 会发现实际输出的视频时长变短。 原因就是时间戳偏移,导致切视频的时间不是设定的时间。

复制代码
Non-monotonic DTS in output stream 0:0; previous: 367247, current: 367104; changing to 367248. This may result in incorrect timestamps in the output file.

解决方法: 使用系统 ffmpeg 命令直接进行视频切分成mts片段。

python 代码

复制代码
import subprocess

command = " cd {dest_path} &&  ffmpeg -y  -i {video_name} -i {audio_name} -c:v  copy -c:a aac -strict experimental  {dest_name}".format(dest_path=sub_video_path, video_name=dest_name, audio_name=audio_name, dest_name=dest_name_au)
    result = subprocess.run(command, shell=True, capture_output=True, text=True)

其中:

sub_video_path - 视频所在目录,

dest_name - 原视频文件名称

audio_name - 声音文件名称

dest_name_au - 输出文件名称

相关推荐
可乐鸡翅yeah_1 天前
多浏览器 HLS 兼容性差异排查,Chrome、Firefox、Safari 表现不一致定位
chrome·ffmpeg·音视频·firefox·safari·m3u8
行者-全栈开发2 天前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
可乐鸡翅yeah_2 天前
M3U8测试流使用指南,流媒体开发自测与环境校验标准化方案
网络·ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放
heqingchun162 天前
Ubuntu 22.04 交叉编译 RK3568 MPP + FFmpeg 完整指南
linux·ubuntu·ffmpeg
2601_962387822 天前
Python CUDA 编程 - 2 - Numba 简介
python·numpy·cuda·jit编译器·numba
刘广睿2 天前
音频降噪实战:ffmpeg 滤镜、RNNoise 与人声分离方案对比
ffmpeg·音视频·效率工具·剪辑
2601_962295993 天前
湖南码界领航教育科技有限公司:Python数据分析进阶,统计与可视化
numpy·pandas·统计·数据可视化·python数据分析
IvorySQL3 天前
代价比较的变革——PostgreSQL执行计划干预增强深度解析
数据库·postgresql·ffmpeg
半摆烂日常4 天前
自建WMS和买成品:三年成本对比
大数据·服务器·数据库·python·深度学习·低代码·numpy
AndrewHZ4 天前
图像处理入门027 | 查找表(LUT)加速——把像素级操作从“每次算一遍“变成“只算 256 次“
图像处理·opencv·numpy·滤镜·查找表·lut