前面写过一篇《FFmpeg 的一些使用实践》,最近整理了一下常用的剪辑视频的操作,再次补充罗列一下。
场景
前阵子,我们举办了很多场直播活动,然后,产生了很多的回放文件。开始的时候,回放文件是由运营人员来转码编辑的。后来因为直播太过紧密,人工操作效率太低,就考虑通过技术手段来自动化的完成转码操作。
因为我们是小公司,该省的还是要省,所以没有使用云服务提供的一些实时转码工具。还是利用的祖传的 FFmpeg 来进行的这项工作。
具体的步骤就是
1.先分割一下视频,把不重要,不需要,不易回放展示的部分先剪掉,这部操作会把一个完整的回放分割成多段
2.在把分割好的多段视频合并成 1 端
3.按需进行视频的转码操作,主要是分辨率,码率,帧率的平衡
4.打上防伪水印,分割成 hls 协议格式的多段小视频,也就是一个 m3u8 的索引文件,多个 ts 文件
视频分割
@echo off
rem 分割视频,需要调整的主要是,具体时间参数,文件名和输出文件名,第一个时间参数是开始分割的起始时间,第二个是分割时长,注意是时长
rem 第一个文件名参数是输入参数,第二个也就是最后一个参数是输出参数,注意文件名不要一致,也不用和目录内其他文件名一致
rem 可以连续分割多个视频
ffmpeg -ss 00:00:00 -t 00:03:01 -i input_1.flv -vcodec copy -acodec copy output_1.flv
ffmpeg -ss 00:00:00 -t 00:11:01 -i input_2.flv -vcodec copy -acodec copy output_2.flv
pause
复制代码
视频合并
@echo off
rem 合并文件,这里需要把要合并的文件列表放入指定的txt文件中,回车分割,这里指定的是contect.txt,可以自定义文件名,最后一个参数是输出的合并后的文件名
ffmpeg -f concat -i contect.txt -c copy output-contect.flv
pause
复制代码
视频转码
@echo off
ffmpeg -i input.flv -vcodec libx264 -preset fast -tune film -b:v 2000k -s 1280*720 -r 25 output_convert.flv
pause
复制代码
打水印,分割
@echo off
rem 分割视频,同时打上logo水印,将要分割的文件放入list.txt(可自定义)中,回车分割
rem ffmpeg -i 5_1.flv -vcodec libx264 -preset fast -tune film -b:v 2000k -s 1280*720 -r 25 -vf "movie=watermark1.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]" -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls outputvideo.m3u8
@echo off
if exist list.txt (
for /f %%i in (list.txt) do (
echo 开始分隔【%%i】...
mkdir %%~ni
ffmpeg -i %%i -vf "movie=watermark.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h-10 [out]" -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls %%~ni\%%~ni.m3u8
echo %%i 分隔完成!
)
echo 此次任务结束
) else (
echo 暂时没有最新的分隔文件
)
复制代码
看一下效果图
这是最终在打水印,分割 ts 文件的截图
直接用 ffmpeg 来剪辑合并视频非常快,比常见的视频处理软件都快,这只是分布的操作,还可以借助 ffmpeg 开放的能力,编写一些程序代码,组合做出很多很有趣的工具来。
评论