【问题标题】:FFMPEG Replacing black color fragments with alpha channel transparencyFFMPEG 用 alpha 通道透明度替换黑色片段
【发布时间】:2018-01-01 03:14:18
【问题描述】:

我有file.mov 视频。它有许多具有不同持续时间的空白黑色片段。

我需要用透明度替换显示超过 5 秒的黑色片段。是否可以为此添加一些 alpha 通道?

评论 Mulvya 的回答:

惊人的解决方案。 #2 部分一切正常。

在#1 部分我创建了这段代码:

output=$(ffprobe -f lavfi -i "movie=file.mov,blackdetect=d=3.5" -show_entries tags=lavfi.black_start,lavfi.black_end -of compact=p=0 -v 0|awk '!/^$/')
echo $output

使用awk '!/^$/' 删除空行。

这是我得到的输出:

tag:lavfi.black_start 以相同的值重复多次,没有正确的结构并关闭 tag:lavfi.black_end

如果我将blackdetect=d=3.5 更改为其他值,例如d=10,它会输出与d=3.5 相同的结果。正确的tag:lavfi.black_start,tag:lavfi.black_end synthax 和正确的 grepping d= 值如何解决这个问题?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    #1 运行 blackdetect 以识别片段

    ffprobe -f lavfi -i "movie=file.mov,blackdetect=d=3.5" -show_entries tags=lavfi.black_start,lavfi.black_end -of compact=p=0 -v 0
    

    编辑:由于过滤器的怪癖,必须使用 ffmpeg 来获取此数据

    下面的命令将数据保存到一个文本文件中。

    ffmpeg -f lavfi -i movie=file.mov,blackdetect=d=3.5,metadata=print:file=- -f null - -hide_banner -v 0 | grep lavfi > times.txt 
    

    这将打印一组至少持续 3.5 秒的黑色段时间码。

    #2 添加 alpha 并将片段的 alpha 更改为 0

    ffmpeg -i file.mov -vf format=rgba,colorchannelmixer=aa=0:enable='between(t,12.4,16.1)+between(t,55.1,60.0)+between(t,62.9,69.2)' -c:v libvpx-vp9 -crf 10 -b:v 0 out.mkv
    

    在每个之间的表达式中是黑色片段的开始时间和结束时间,以秒为单位。

    如果要将结果保存到文件中,则需要选择支持 alpha 的编解码器,如上述命令中的编解码器。如果您的文件已经有 alpha,请跳过格式过滤器。

    【讨论】:

    • 我更新了一个关于#1 部分的问题。请回复我。
    • 你能分享文件吗?如果太大,切一小部分:ffmpeg -i in.mov -c copy -t 25 sample.mov?
    • 这里是:toolsq.com/files/imagine.mov 我只忘了右上角第5秒出现应用程序标志,可能是问题?不需要徽标,在其他脚本中我使用 - "[1:v]crop=iw:0.50*ih,setpts=PTS-STARTPTS$DIFF/TB, \"
    • 适用于 ffmpeg:ffmpeg -i imagine.mov -vf blackdetect=d=3.5 -f null -。我只是在测试过滤器日志记录。您必须应用裁剪才能获得正确的结果。
    • 谢谢,它工作正常。如果不难,你能告诉我如何将 ffmpeg 输出保存到文本文件或 grep 仅包含单词“blackdetect”的行吗?新年快乐!
    猜你喜欢
    • 2014-07-19
    • 2020-08-08
    • 2014-02-06
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2010-12-30
    相关资源
    最近更新 更多