python操作ffmpeg来合成视频

1.提取音频

一、从原有视频提取音频

ffmpeg  -i  video原版.mp4  -vn  audio提取版.mp3

二、截取音频片段

ffmpeg  -i  audio提取版.mp3 -ss 00:00:00  -t  00:01:00  audio截取版.mp3

-i    输入您要处理的视频文件路径
-vn    不使用视频纪录
-ss    开始时间
-t    持续时间
 

三.合成视频的命令

ffmpeg -threads 2 -y -r 8 -i image%06d.jpg 1234.mp4

利用ffmpeg就可以完成这项任务了,下面是具体指令,再附上每个指令的说明:
-threads:线程,这里可以设2个,加快视频生成速度
-y:图片合成视频会有很多个覆盖操作,此处一律同意覆盖
-rfps,这个是关键,设置多少帧/s,这里我自己设的是8,就是每八张图片合成1s的视频
-i:后接的第一个参数是输入的图片,我的图片都是以image%06d命名的,按自己图片的实际命名排序来设置,最后的是输出视频的格式。image%06d 表示图片名称是以image开头,后面通配6个int类型的数字。

最后1234.MP4是生成的视频的名称
 

2.将mp4视频和MP3音频合成命令

ffmpeg -i 1.mp3 -i 1.mp4 outputname.mp4

-i :表示imput,后跟视频/音频

outputname.mp4表示合成的视频名称

四.python调用ffmpeg合成视频

import os 

os.system("ffmpeg -i 1.mp3 -i 1.mp4 outputname.mp4")

结果就能合成视频

五.分解视频为图片

#ffmpeg将视频导出成多张图片

 ffmpeg -i output.mp4 -r 30 -f image2 foo-%05d.jpeg

//   -r参数表示按照30帧的速度提取。

六.图片合成视频

ffmpeg -threads2 -y -r 10 -i %04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4

参数的解释含义:

-threads 2 以两个线程进行运行, 加快处理的速度。

-y 对输出文件进行覆盖

-r 10 fps设置为10帧/秒(不同位置有不同含义,后面再解释)

-i /tmpdir/image%04d.jpg 输入图片文件,图片文件保存为 image0001.jpg image0002.jpg ….

-i audio.mp3 输入的音频文件

-absf aac_adtstoasc 将结果的音频格式转为faac格式时需要这个选项。将音频格式转为faac是因为在iphone上某些音频格式的视频无法播放,例如mp3. 但faac格式的音频的视频在iphone上可以播放。-absf 的意思是设置一个bitstream filter进行某些转换。可以用ffmpeg -bsfs 查看所有支持的bitstream filter。 bitstream filter和 aac_adtstoasc的具体含义我也说不上。但是如果不用这个选项又会导致转换失败。
 

七.不带音频

ffmpeg -loop 0 -f image2 -i %04d.jpg -vcodec libx264 -r 10 -t 10 test.mp4

-loop 1循环读输入 0读完就不读了
-vcode 编码格式libx264
-b 指定200k码率
-t 输出视频总时长:

查看视频帧数:

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1  xxx.mp4


版权声明:本文为qq_41166909原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。