龙空技术网

在python中使用ffmpeg进行视频编辑

爱交易的程序员 297

前言:

目前小伙伴们对“pythonffmpeg”大约比较注意,兄弟们都想要知道一些“pythonffmpeg”的相关知识。那么小编在网上网罗了一些关于“pythonffmpeg””的相关知识,希望同学们能喜欢,我们快快来学习一下吧!

FFmpeg 是视频处理中广泛使用的开源软件。可以称之为视频编辑的“瑞士军刀”。 使用也是非常方便,直接在命令行执行命令, 比如为视频添加字幕:

ffmpeg.exe -i '.\test.srt' -i '.\test.mp4' -c copy -c:s mov_text outfile.mp4

在这个短视频创作很火的年代,灵活使用ffmpeg能极大提高生产力。很多时候,视频都需要进行批量处理, 或者要实现非常丰富的功能,这时候手动一行行执行命令,就不是好的选择,就需要编写代码来实现,而在python有好几种方式来灵活调用ffmpeg。首先,无论哪种方式,都需要将ffmpeg加入到环境变量。

直接调用ffmpeg

简单粗暴的方式当然就是python中直接拼接命令,然后调用。比如为视频添加字幕:

import subprocessif __name__ == '__main__':    srt_path = './test.srt'    video_path = './test.mp4'    output_path = './outfile.mp4'    full_command = f'ffmpeg -i {srt_path} -i {video_path} -c copy -c:s mov_text {output_path}'        subprocess.call(full_command)

使用ffmpeg-python

ffmpeg-python是相对比较活跃的开源项目,github主页上面也有好多个示例。

拿上面的为视频添加字幕来举例:

import ffmpegif __name__ == '__main__':    srt_path = './test.srt'    video_path = './test.mp4'    output_path = './outfile.mp4'        options = {        'i': srt_path    }    options2 = {        'c': 'copy',        'c:s': 'mov_text'    }    ffmpeg.input(video_path, **options)\        .output(output_path, **options2)\        .run()

只要写好了命令,就可以轻松转为程序代码。上面的input函数的第一个参数就相当于参数-i,options定义的参数会放置在-i参数的前面; output函数的第一个参数就是输出文件, options2定义的参数就会放置在输出文件的前面。在调试时,可以使用get_args()来获取生成的命令,如:

args = ffmpeg.input(video_path, **options)\    .output(output_path, **options2)\    .get_args()print(" ".join(args))

执行就会有如下的输出:

-i ./test.srt -i ./test.mp4 -c copy -c:s mov_text ./outfile.mp4

值得注意的是,在使用ffmpeg时,参数的顺序非常重要。

常见例子

截图

命令实现:

ffmpeg -ss 00:43:43 -i .\权力的游戏第八季02修正.mp4 -vframes 1 -q:v 2 output.jpg

python实现:

    film_name = './权力的游戏第八季02修正.mp4'    image_name = './output.jpg'    chip_option = {        'ss':'00:43:43'  # 截取时间    }    chip_option2 = {        'vframes':'1',  # 只截取一帧        'q:v':'2'       #输出的图片质量,1到5之间(1 为质量最高)    }    # 截图    ffmpeg.input(film_name, **chip_option)\        .output(image_name, **chip_option2)\        .run()

截图结果(《权力的游戏》S08E02是大战夜王的前夜,主角们面对死亡来临的恐惧,有的唱歌,有的谈心,而二丫是ML):

webvtt字幕文件转换为srt等字幕文件

很多时候,从网络上下载的视频包含的都是vtt文件,需要进行转换。命令实现:

ffmpeg -i .\test.vtt .\test.srt 或 ffmpeg -i .\test.vtt .\test.ass

python实现:

vtt_path = './test.vtt'srt_path = './test.srt'ffmpeg.input(vtt_path)\    .output(srt_path)\    .run()

标签: #pythonffmpeg