gpt4 book ai didi

bash - ffmpeg:编码解码器 'yuv420p' 的像素格式不兼容 'png' ,自动选择格式 'rgb24'

转载 作者:行者123 更新时间:2023-12-04 23:07:58 33 4
gpt4 key购买 nike

我有一堆 .png 文件

file_000.png
file_005.png
file_010.png

我正在使用继承的 ffmpeg 脚本将 .png 文件拼接成 .mp4 文件。我不明白所有的标志,但我过去成功使用过这个脚本
## images_to_movie.sh
set -o noglob

in_files=$1
out_file=$2

ffmpeg \
-framerate 10 \
-loglevel warning \
-pattern_type glob -i $in_files \
-pix_fmt yuv420p \
-vf 'crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0' \
-y \
$out_file

用命令
./images_to_movie file_*.png files.mp4

我现在收到错误

Incompatible pixel format 'yuv420p' for codec 'png', auto-selecting format 'rgb24'



一些搜索表明
-pix_fmt yuv420p

已弃用,我应该改用
-pix_fmt yuv420p -color_range 2

但错误仍然存​​在。我尝试使用
-pix_fmt rgb24

并且错误消失了,但我没有创建 .mp4 文件。

我需要如何修改此脚本以创建 .mp4 ?

最佳答案

怎么了
file_*.png根本没有传递给你的程序——files.mp4 也没有。 .

相反,当您运行 ./images_to_movie file_*.png files.mp4 , 你的 shell 实际调用的是 ./images_to_movie file_000.png file_005.png file_010.png files.mp4 .

因此,file_000.png被视为唯一的输入文件,file_005.png被视为要使用的输出文件。额外的参数( file_010.pngfiles.mp4 )在位置 $3$4 ;从未读过;并因此被完全忽略。

如何修复它

原始代码假定 ./images_to_movie file_*.png files.mp4将放file_*.png$1files.mp4$2 .除非file_*.png没有匹配项,该假设是错误的。
set -o noglob防止脚本启动后发生 glob 扩展,但脚本内容中的任何内容都不能阻止调用脚本事先扩展 glob。因此,您需要一个带引号的调用,类似于:

./images_to_movie 'file_*.png' files.mp4

...和脚本内容类似于:
#!/usr/bin/env bash

in_files=$1
out_file=$2

ffmpeg \
-framerate 10 \
-loglevel warning \
-pattern_type glob -i "$in_files" \
-pix_fmt rgb24 \
-vf 'crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0' \
-y \
"$out_file"

请注意,我们取出了 noglob , 而是引用了所有扩展;这不仅可以防止通配符,还可以防止字符串拆分——所以像 File *.png 这样的模式不会被拆分成一个字 File和第二个字 *.png即使没有通配符。

关于bash - ffmpeg:编码解码器 'yuv420p' 的像素格式不兼容 'png' ,自动选择格式 'rgb24',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432551/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com