标签: ffmpeg-python

如何在Python中隐藏FFmpeg的控制台输出?

我当时正在开发一个YouTube 视频下载器Python 程序。

我想将下载的数据编码为其他媒体格式,为此我使用了FFmpegFFmpeg-Python(在 Python 中使用 FFmpeg 的包)。

一切都很好,但我想问如何在控制台上禁用FFmpeg 输出?

这是我的程序的一些图片:-

主图形界面

但是当我的程序开始编码时,这个控制台经常出现,抑制主 GUI :-

FFMPEG - 输出

如果您知道我的问题的任何解决方案,请给我一些解决方案。这是我第一次尝试使用 Stackoverflow 来解决我的问题。

提前致谢 !!!!!

python ffmpeg ffmpeg-python

6
推荐指数
2
解决办法
5492
查看次数

如何使用 ffmpeg-python 在视频上叠加帧序列?

我在下面尝试过,但它只显示背景视频。

background_video = ffmpeg.input( "input.mp4")
overlay_video = ffmpeg.input(f'{frames_folder}*.png', pattern_type='glob', framerate=25)
subprocess = ffmpeg.overlay(
                          background_video,
                          overlay_video,
                        ).filter("setsar", sar=1)
Run Code Online (Sandbox Code Playgroud)

我还尝试将帧序列组装成 .webm/.mov 视频,但透明度丢失。视频以黑色为背景。

PS - 帧大小与背景视频大小相同。所以不需要缩放。

编辑

我尝试了@Rotem的建议

首先尝试使用单个 PNG 图像

overlay_video =  ffmpeg.input('test-frame.png')
Run Code Online (Sandbox Code Playgroud)

它不适用于 OpenCV 生成的帧,但适用于任何其他 png 图像。这很奇怪,当我手动查看这些框架文件夹时,它显示空白图像(链接到我的框架文件夹)。但是,如果我将这些帧转换为视频(见下文),它会正确显示我在每个帧上绘制的内容。

output_options = {
                    'crf': 20,
                    'preset': 'slower',
                    'movflags': 'faststart',
                    'pix_fmt': 'yuv420p'
                }
ffmpeg.input(f'{frames_folder}*.png', pattern_type='glob', framerate=25 , reinit_filter=0).output(
                    'movie.avi',
                    **output_options
                ).global_args('-report').run()
Run Code Online (Sandbox Code Playgroud)

尝试从所有 PNG 图像创建视频而不叠加

它按预期工作,唯一的问题是透明度。有没有办法制作透明背景视频?我尝试了 .webm/.mov/.avi 但没有运气。

添加 .global_args('-report') 并检查日志文件

Report written to "ffmpeg-20221119-110731.log"
Log level: 48
ffmpeg version 5.1 Copyright (c) 2000-2022 …
Run Code Online (Sandbox Code Playgroud)

overlay ffmpeg image-processing libav ffmpeg-python

5
推荐指数
1
解决办法
1152
查看次数

如何通过 ffmpeg-python 使用多输入过滤器

我想用 ffmpeg-python 模仿以下 ffmpeg 命令

ffmpeg -y -i in.mp4 -t 30 -filter_complex "fps=10,scale=-1:-1:flags=lanczos[x];[0:v]palettegen[y];[x][y]paletteuse" out.gif

到目前为止,这就是我所得到的:

in_stream = ffmpeg.input(src, ss=start_time, t=(stop_time-start_time))
scale_input = in_stream
if fps >= 1:
    stream = ffmpeg.filter(in_stream['v'], 'fps', fps)
    scale_input = stream

stream = ffmpeg.filter(scale_input, 'scale', output_width, output_height, 'lanczos')

palette = ffmpeg.filter(in_stream['v'], 'palettegen')
#stream = ffmpeg.filter(stream, palette, 'paletteuse') ???
stream.output(dst).run()
Run Code Online (Sandbox Code Playgroud)

我检查过,如果我将其输出为 png,调色板会生成得很好。但是,我找不到如何通过多输入命令使用它paletteuse,因为过滤器仅将一个流作为 ffmpeg-python 的输入。我尝试将它们连接起来,ffmpeg.concat()这是我发现的从两个流中创建一个流的唯一方法,但我认为这是没有意义的(而且无论如何它都不起作用)。

任何想法?

python ffmpeg ffmpeg-python

3
推荐指数
1
解决办法
2495
查看次数

ffmpeg-python:测试视频剪辑是否有音频

我使用 ffmpeg-python 进行一些视频转换。

如果我有以下情况:

infiles = []
infile = ffmpeg.input("/tmp/xxx.mp4")
infiles.append(
    infile['v']
    .filter('scale', size='1920x1080', force_original_aspect_ratio='decrease')
    .filter('pad', '1920', '1080', '(ow-iw)/2', '(oh-ih)/2')
)
infiles.append(infile['a'])

(
    ffmpeg
    .concat(
        *infiles, v=1, a=1, unsafe=True)
    .output(out_tmp_file)
    .run()
)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误:

Stream specifier ':a' in filtergraph description [0:v]scale=force_original_aspect_ratio=decrease:size=1920x1080[s0];[s0]pad=1920:1080:(ow-iw)/2:(oh-ih)/2[s1];[s1][0:a]concat=a=1:n=1:unsafe=True:v=1[s2] matches no streams.
Run Code Online (Sandbox Code Playgroud)

如果视频有音频,以上方法有效

python ffmpeg ffmpeg-python

3
推荐指数
1
解决办法
2706
查看次数

如何将 FFmpeg 命令行转换为 ffmpeg-python 代码?

我有这个命令行代码:

ffmpeg -i 0.mp4 -c:v libx265 -preset fast -crf 28 -tag:v hvc1 -c:a aac -bitexact -map_metadata -1 out.mkv
Run Code Online (Sandbox Code Playgroud)

我想将它转换为Python中的ffmpeg-python代码。

但我该怎么办呢?

这是我到目前为止所做的:

import ffmpeg

(
    ffmpeg
    .input('0.mp4')
    .filter('fps', fps=30)
    .output('out.mkv', vcodec='libx265', crf=28, preset='fast', movflags='faststart', pix_fmt='yuv420p')
    .run()
)
Run Code Online (Sandbox Code Playgroud)

python ffmpeg ffmpeg-python

2
推荐指数
1
解决办法
9154
查看次数

使用 ffmpeg-python 向视频添加多个字幕

我正在尝试使用 ffmpeg-python 将多个字幕(未刻录)添加到视频文件中。我有这个 ffmpeg 命令:

ffmpeg -i input.mp4 -f srt \
-i "subs/en/en_srt_sub.srt" \
-i "subs/fr/fr_srt_sub" \
-map 0:0 -map 0:1 -map 1:0 -map 2:0 \
-c:v copy -c:a copy \
-c:s srt -c:s srt \
-metadata:s:s:0 language=en -metadata:s:s:0 title=English \
-metadata:s:s:1 language=fr -metadata:s:s:1 title=French \
output.mkv
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 ffmpeg-python 模块来做到这一点,或者我只需要使用字符串格式化和子进程。

python ffmpeg ffmpeg-python

1
推荐指数
1
解决办法
2528
查看次数