前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神器 ffmpeg —— 操作视频,极度舒适

神器 ffmpeg —— 操作视频,极度舒适

作者头像
行哥玩Python
发布2021-12-01 18:43:26
1.2K0
发布2021-12-01 18:43:26
举报
文章被收录于专栏:一行数据一行数据

大家好,我是一行

之前有跟大家介绍过抖音小程序这个玩法

基本原理就是上传视频,通过视频左下角链接点击小程序,然后小程序提供商通过每千次点击进行返佣

操作流程就是下载素材、对素材进行二创,然后再上传素材

不断的修改迭代内容,以求量变达到质变

之前已经分享过如何批量下载抖音素材,那紧接着就是批量处理素材了

当然第一次处理素材还是手动用剪映来处理,然后再用代码进行自动化处理,不然连朝哪个方向自动化处理可能都不知道

那清楚处理流程之后,怎么用Python来处理视频素材呢?

ffmpeg!

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序

使用这个神器,便可以处理各种视频素材内容,极度舒适

下面一行来分享一下如何使用这个神器

1安装

首先需要在ffmpeg的官网下载最新版本,不然可能会出现各种奇怪的问题

因为ffmpeg是个命令行工具,所以安装时需要注意将ffmpeg加入环境变量中,安装完之后,可以在终端里输入下面命令查看是否安装成功

代码语言:javascript
复制
ffmpeg -version

2subprocess调用

因为ffmpeg是命令行工具,可以通过subprocess的调用来使用

先查看使用文档,例如拆分视频文件的命令是:

代码语言:javascript
复制
ffmpeg -i [filename] -ss [starttime] -t [length] -c copy [newfilename]
  • i 为需要裁剪的文件
  • ss 为裁剪开始时间
  • t 为裁剪结束时间或者长度
  • c 为裁剪好的文件存放

好了,用 Python 写一个调用:

代码语言:javascript
复制
import subprocess as sp

def cut_video(filename, outfile, start, length=90):
    cmd = "ffmpeg -i %s -ss %d -t %d -c copy %s" % (filename, start, length, outfile)
    p = sp.Popen(cmd, shell=True)
    p.wait()
    return
  • 定义了一个函数,通过参数传入 ffmpeg 需要的信息
  • 将裁剪命令写成一个字符串模板,将参数替换到其中
  • 用 subprocess 的 Popen 执行命令,其中参数 shell=True 表示将命令作为一个整体执行
  • p.wait() 很重要,因为裁剪需要一会儿,而且是另起进程执行的,所以需要等待执行完成再继续执行后面工作,不然可能找不到文件

常见的一些命令如下:

ffmpeg视频剪切

代码语言:javascript
复制
$ ffmpeg -i ./in.mp4  -vcodec copy -acodec copy -ss 00:00:20 -to 00:05:30 ./out.mp4

-ss为开始时间,-to为结束时间。

设置视频大小

代码语言:javascript
复制
$ ffmpeg -i ./sea.mp4 -fs 19M output.mp4

-fs需要设置的大小,例如19M、1024K,其实就是剪切了前19M、1024K的视频内容。

删除视频中的音频

代码语言:javascript
复制
$ ffmpeg  -i in.mp4  -map 0:0  -vcodec copy -acodec copy out.mp4

通过ffprobe命令,可以查看所有的通道,例子中的0:0就是视频通道。

设置分辨率

代码语言:javascript
复制
$ ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4 -hide_banner

高分辨率向低分辨率的转化。

设置视频的宽高比

代码语言:javascript
复制
$ ffmpeg -i video_320x180.mp4 -vf scale=320:240,setdar=4:3 video_320x240.mp4 -hide_banner

视频倒放,无音频

代码语言:javascript
复制
$ ffmpeg -i in.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast out.mp4

视频倒放,音频不变

代码语言:javascript
复制
$ ffmpeg -i in.mp4 -vf reverse out.mp4

音频倒放,视频不变

代码语言:javascript
复制
$ ffmpeg -i in.mp4 -map 0 -c:v copy -af "areverse" out.mp4

音视频同时倒放

代码语言:javascript
复制
$ ffmpeg -i in.mp4 -vf reverse -af areverse -preset superfast out.mp4

抽取音频

代码语言:javascript
复制
$ ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aac
$ ffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a

提取视频或者叫做删除音频

代码语言:javascript
复制
ffmpeg -i Life.of.Pi.has.subtitles.mkv -vcodec copy –an  videoNoAudioSubtitle.mp4
 ffmpeg -i output.mp4 -c:v copy -an  input-no-audio.mp4

为无声的视频添加音频

代码语言:javascript
复制
ffmpeg -i ../out/4in1.mp4  -i ./3.aac  -vcodec copy -acodec copy output.mp4

3ffmpy3

ffmpy3是ffmpeg的python包装器,以可以用这个包来进行处理视频

需要先用pip进行安装

代码语言:javascript
复制
pip install ffmpy3

例如修改文件格式这种操作就可以使用ffmpy3直接输出

代码语言:javascript
复制
import ffmpy3
ff = ffmpy3.FFmpeg(
     inputs={'input.mp4': None},
     outputs={'output.avi': None}
     )
ff.run()

转码

如果同时我们想使用不同的编解码器重新编码视频和音频,在输出文件同时必须指定额外的输出选项:

代码语言:javascript
复制
ff = FFmpeg(
    inputs={'input.ts': None},
    outputs={'output.mp4': '-c:a mp2 -mpeg2video'}
)
ff.cmd
ff.run()

解复用

还可以将文件的音频和视频输出成两个mp4格式的文件

代码语言:javascript
复制
ff = FFmpeg(
    inputs={'input.ts': None},
    outputs={
         'video.mp4': ['-map', '0:0', '-c:a', 'copy', '-f', 'mp4'],
         'audio.mp4': ['-map', '0:1', '-c:a', 'copy', '-f', 'mp4']
     }
 )
ff.cmd
ff.run()

复用

复用就是将输入的mp4文件和mp3文件合成同一个视频文件

这里使用 OrderedDict 来保留输入的顺序,以便它们与输出选项中的流的顺序相匹配:

代码语言:javascript
复制
from collections import OrderedDict
inputs = OrderedDict([('video.mp4', None), ('audio_1.mp3', None), ('audio_2.mp3', None)])
outputs = {'output.ts', '-map 0 -c:v h264 -map 1 -c:a:0 ac3 -map 2 -c:a:1 mp2'}
ff = FFmpeg(inputs=inputs, outputs=outputs)
ff.cmd
ff.run()

拆分成图片

处理视频素材内容还需要将视频拆成一张张图片,对图片进行处理,然后再合并成视频

在输出的文件类型改成.png结尾即可

代码语言:javascript
复制
import ffmpy3
ff = ffmpy3.FFmpeg(
     inputs={'data.MP4': None},
     outputs={'1/%d.png': None}
     )
ff.run()

4最后

通过ffmpeg处理视频主要还是要了解它的命令用法,可以在👇的官方文档里进行查看

  • http://ffmpeg.org/documentation.html

然后再去了解各种热门视频的模版,自动化生成自己想要的视频指日可待

今天的分享就到这啦

我是一行,技术永不眠,我们下期见~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1安装
  • 2subprocess调用
    • ffmpeg视频剪切
      • 设置视频大小
        • 删除视频中的音频
          • 设置分辨率
            • 设置视频的宽高比
              • 视频倒放,无音频
                • 视频倒放,音频不变
                  • 音频倒放,视频不变
                    • 音视频同时倒放
                      • 抽取音频
                        • 提取视频或者叫做删除音频
                          • 为无声的视频添加音频
                          • 3ffmpy3
                            • 转码
                              • 解复用
                                • 复用
                                  • 拆分成图片
                                  • 4最后
                                  相关产品与服务
                                  命令行工具
                                  腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档