我想将gif转换为python中的ffmpeg视频,并为视频添加声音。后来我想要合并与另一个视频录像。我能够在python中使用os.system()
运行shell代码,但是我想避免在我的步骤中编写多个文件。
有办法ffmpeg输出保存在一个变量与变量和工作而不是为每个步骤编写多个文件?我只想写我的最终文件,它应该是一个合并的视频文件,包含来自video1和另一个video2的视频和声音。我已经找到了一些方法,如subprocess
库,但不幸的是无法编码我想要的输出。
这是我使用的代码,它用于将gif转换为mp4并添加声音。但如前所述,我需要写两个不同的文件。
GIF转视频:
os.system(f'ffmpeg -i {PATH_TO_GIF} -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4')
为视频添加声音:
os.system(f"ffmpeg -i video.mp4 -i {PATH_TO_SOUNDFILE} -map 0:v -map 1:a -c:v copy -shortest video_with_sound.mp4")
可以是
ffmpeg -i i.gif -i 1.wav -map 0:v -map 1:a -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -shortest vid.mp4
或者以某种方式可能与两段式转换和dev null。作为最后的手段,总是可以一次执行几个命令并删除不必要的🤷
综合命令:
os.system(f'ffmpeg -i {PATH_TO_GIF} -i {PATH_TO_SOUNDFILE} -map 0:v -map 1:a -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2,format=yuv420p" -movflags +faststart -shortest video_with_sound.mp4')
可选:当{PATH_TO_SOUNDFILE}
为MP4/M4A/AAC时,可以添加-c:a copy
进行流拷贝。