使用FFmpeg视频缩略图实现

视频内容这三年在互联网发展的风声水起如火如荼持久不衰。抖音、西瓜视频、好看视频、快手等视频资源五花八门丰富多彩,吸引的不同年龄段的广大用户群。抖音用户量超过8亿,日活用户量超过4亿。足以证实视频资源受广大用户接受。也应了用户传播效果那句话:“短视频大于长视频,长视频大于等于图片(哈哈),图片大于文字”。可视化的信息内容最容易受用户接受。

提升视频的用户体验关系到视频的标题、视频的缩略图、视频内容清晰度、视频流畅度、视频内容的吸引力(价值度)等因素。而每个因素最终都会影响视频的流量、点击率、社交能力。今天为大家讲下因素之一视频缩略图的实现。也是我以前做网盘时实现的业务功能之一。网盘为了提升用户体验会将图片、视频、文档等内容生成相关的缩略图方便用户第一感观了解文档内容。

1、FFmpeg安装

#MAC
brew install ffmpeg

#Linux
wget http://www.ffmpeg.org/releases/ffmpeg-5.0.tar.gz
tar zxvf ffmpeg-5.0.tar.gz
cd ffmpeg-5.0
./configure --prefix=/usr/local/ffmpeg
make
make install

2、视频缩略图(视频所有帧图片)

ffmpeg -i test.mp4 -f image2 %05d.jpg
# window下新建images文件夹
D:\c++\ffmpeg-n4.4-152-gdf288deb9b-win64-gpl-4.4\bin>ffmpeg -i test.mp4 -f image2 images/%05d.jpg
-i filename 输入的文件名
-f 输出文件格式 image2 avi wav等
 %05d.jpg 输出文件名格式(5位数字) 00001.jpg ~ 99999.jpg

使用FFmpeg视频缩略图实现_第1张图片

3、视频缩略图(指定图片宽高)

ffmpeg -i test.mp4 -f image2 -s 1024*768 %05d.jpg

-s size 输出的图片的大小(宽*高) 输出的图片可能存在变形情况,尽量不指定此参数

4、视频缩略图(指定时间段图片)

ffmpeg -i test.mp4 -t 5 -f image2 %05d.jpg

-t duration 视频的前duration秒图片

ffmpeg -i test.mp4 -ss 0:0:30 -to 0:0:40 -f image2 %05d.jpg

-ss time_off 视频开始时间位置
-to time_stop 视频结束时间位置

5、视频缩略图(每秒截取速率)

ffmpeg -i test.mp4 -r 1 -f image2 %05d.jpg

-r rate 每秒截取rate张图片(每秒的帧数)

6、视频缩略图(覆盖输出图片)

ffmpeg -i test.mp4 -y -f image2 %05d.jpg

-y overwrite output files

7、视频缩略图(Gif图)

ffmpeg -i test.mp4 -vframes 30 -y -f gif test.gif

-vframes number 输出视频前number秒Gif图

8、视频缩略图(视频水印)

ffmpeg  -i test.mp4 -i baidu.png -filter_complex  "overlay=main_w-overlay_w-10 : main_h-overlay_h-150
:enable='between(t,5,10)'" -y -b 10024k -acodec copy -f mp4 test_baidu.mp4

baidu.png:水印图片
enable='between(t,5,10) 指定水印开始秒结束秒
左上角 10:10
右上角 main_w-overlay_w-10:10
左下角 10:main_h-overlay_h-10
右下角 main_w-overlay_w-10 : main_h-overlay_h-10
效果:

9、视频缩略图(超时时间)

timeout 5s ffmpeg -i test.mp4 -f image2 %05d.jpg

timeout Linux Shell超时命令(由于ffmpeg无超时参数所以使用timeout实现)

10、Python调用代码

import subprocess
def run_shell_command(command):
    ret = subprocess.run(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8",timeout=10)
    if ret.returncode == 0:
        print("success:",ret)
    else:
        print("error:",ret)

#subprocess执行shell命令
run_shell_command("ffmpeg -i /Users/linux/Downloads/test.mp4 -t 5 -f image2 %05d.jpg")
执行结果:
success: CompletedProcess(args='ffmpeg -i xxxxxx)

11、文档缩略图技术方案

使用FFmpeg视频缩略图实现_第2张图片
【参考】https://www.toutiao.com/article/7086001967553675791/?log_from=6391f594abb65_1650332372044

12、截取帧范围内图片

ffmpeg -i dance.mp4 -vf “select=between(n,0,20)” -y output-%2d.jpg

表示从0帧开始,截取20帧

输出图片,3d表示图片编号3位数,%03d可以补零,保存的文件名output-01.jpg,output-02.jpg

你可能感兴趣的:(音视频,音视频,1024程序员节)