Mik*_*aum 6 python video ffmpeg
在尝试执行的操作中,我需要删除视频文件的某些部分,然后从中创建一个新文件。
例如,从这样的视频文件中:
===================
Run Code Online (Sandbox Code Playgroud)
我切了两次
======||=====||||==
Run Code Online (Sandbox Code Playgroud)
并生成一个新的较小的视频文件:
=============
Run Code Online (Sandbox Code Playgroud)
当我说2时,我指的是任意数量的单独剪切,具体取决于视频文件。
如果我只想切割一部分,我会做:
ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y
Run Code Online (Sandbox Code Playgroud)
哪个完美。我也许可以这样做很多次,然后将所有片段合并在一起……但是对于较大的视频文件,这是非常低效的。
要进行两次切割,我正在查看filter_complex。我一直在努力使其正确运行几个小时,但似乎无法正常工作:/
如果我做这样的事情,我会得到没有音频的视频:
command = 'ffmpeg -i video.mp4 \
-filter_complex "\
[0]trim=start_frame=10:end_frame=20[v0];\
[0]trim=start_frame=30:end_frame=40[v1];\
[v0][v1]concat=n=2[v5]"\
-map [v5] -async 1 output.mp4'
Run Code Online (Sandbox Code Playgroud)
如果我尝试这样做,事情就会一团糟:
ffmpeg -y -i video.mp4 \
-filter_complex "\
[0:v]trim=start_frame=10:end_frame=20[v0];\
[0:a]atrim=start=10:end=20[a0];\
[0:v]trim=start_frame=30:end_frame=40[v1];\
[0:a]atrim=start=30:end=40[a1];\
[v0][a0][v1][a1]concat=2:v=1:a=1[v5][a]"\
-map [v5] -map [a] -async 1 output.mp4
Run Code Online (Sandbox Code Playgroud)
我什至尝试使用ffmpeg-python https://github.com/kkroening/ffmpeg-python在Python中做到这一点,但我也无法获得音频。
谁能在这方面给我一些帮助?非常感谢你!!
选择过滤器对此更好。
ffmpeg -i video -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',setpts=N/FRAME_RATE/TB" -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',asetpts=N/SR/TB" out.mp4
Run Code Online (Sandbox Code Playgroud)
select及其对应的过滤器分别应用于视频和音频。选择的段是时间4到6.5秒,17到26秒,最后是74到91秒。时间戳与设置点及其对应的过滤器连续。