首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ffmpeg python剪裁和连接不起作用

ffmpeg python剪裁和连接不起作用
EN

Stack Overflow用户
提问于 2020-02-08 01:44:25
回答 1查看 3.9K关注 0票数 2

我有两个文件,in.mp4outro.mp4

我需要一件非常简单的事情:将in.mp4剪短到任意长度,并在它之后连接outro.mp4

我不需要修整部分就能做到

代码语言:javascript
复制
import ffmpeg

main_video = ffmpeg.input('in.mp4')
outro = ffmpeg.input('outro.mp4')

v1 = main_video.video.filter("scale", size='hd720')
a1 = main_video.audio
v2 = outro.video
a2 = outro.audio

joined = ffmpeg.concat(v1, a1, v2, a2, v=1, a=1).node
v3 = joined[0]
a3 = joined[1]

out = ffmpeg.output(v3, a3, 'out.mp4')
out.run()

但如果我在这里加上修整:

代码语言:javascript
复制
main_video = ffmpeg.input('in.mp4').trim(start_frame=0, end_frame=1000)

我知道这个错误:

ValueError:遇到trim(end_frame=1000,start_frame=0) <17c7b86357ec>,具有多个传出边缘,上游标签为无;可能需要split过滤器

如果我在这里做的话:

代码语言:javascript
复制
v1 = main_video.video.filter("scale", size='hd720').trim(start_frame=0, end_frame=1000)
a1 = main_video.audio.trim(start_frame=0, end_frame=1000)

我知道这些错误:

代码语言:javascript
复制
[Parsed_trim_2 @ 00000295587ca840] Media type mismatch between the 'Parsed_trim_2' filter output pad 0 (video) and the 'Parsed_concat_3' filter input pad 1 (audio)
[AVFilterGraph @ 00000295587cc800] Cannot create the link trim:0 -> concat:1

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-09 23:25:25

您可以将trim过滤器用于视频atrim筛选器用于音频,并通过 cut 将两者都剪切:

代码语言:javascript
复制
import ffmpeg
#import subprocess

# Build synthetic video files (with audio):
##############################################################
# subprocess.run('ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=30 -f lavfi -i sine=frequency=500 -c:v libx264 -c:a ac3 -ar 22050 -t 100 in.mp4')
# subprocess.run('ffmpeg -y -f lavfi -i mandelbrot=size=1280x720:rate=30 -f lavfi -i sine=frequency=1000 -c:v libx264 -c:a ac3 -ar 22050 -t 10 outro.mp4')
##############################################################


main_video = ffmpeg.input('in.mp4')
outro = ffmpeg.input('outro.mp4')

# Assuming frame rate is 30 fps, 33.3 seconds applies 1000 frames.
v1 = main_video.video.filter('scale', size='hd720').filter('trim', duration=33.3)  # Use trim filter for the video.
a1 = main_video.audio.filter('atrim', duration=33.3) # Use atrim filter for the audio.
v2 = outro.video
a2 = outro.audio

joined = ffmpeg.concat(v1, a1, v2, a2, v=1, a=1).node
v3 = joined[0]
a3 = joined[1]

out = ffmpeg.output(v3, a3, 'out.mp4')
out.run()

我通过生成合成视频文件(在注释部分生成)测试了上面的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60123218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档