前言:
目前小伙伴们对“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