我正在尝试使用 avconv 降低某些原始视频的分辨率。输出必须保持相同的原始视频格式,因为在稍后阶段我需要将其加载到另一个非常挑剔且不接受任何其他类型输入的程序中。现在,我尝试做
avconv -i myvideo.avi -s 88x72 -vcodec rawvideo myvideo-small.avi
这确实产生了缩小的视频,但格式似乎不完全相同。avconv 说读取的输入是
Stream #0.0: Video: rawvideo, pal8, 352x288, 30 fps, 30 tbr, 30 tbn
而产生的输出是
Stream #0.0: Video: rawvideo, yuv420p, 88x72, q=2-31, 200 kb/s, 30 tbn, 30 tbc
尽管两者都是 rawvideo,但输入是“pal8”,输出是“yuv420p”。我不知道这两种格式之间的区别,但我需要我的输出保留与输入完全相同的格式。如何做到这一点?
答案1
在我看来,avconv
目前仅支持 pal8 作为输入。要检查是否可以运行,请运行:
$ avconv -pix_fmts |grep pal8
我的输出是:
avconv version v12_dev0-498-g2e09359, Copyright (c) 2000-2014 the Libav developers
built on Dec 5 2014 09:32:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
I..P. pal8 1 8
第一部分的图例为:
I.... = Supported Input format for conversion
.O... = Supported Output format for conversion
..H.. = Hardware accelerated format
...P. = Paletted format
....B = Bitstream format
因此 pal8 可读但不能写。这意味着您无法主动将任何流编码为这种格式,而如果您打算更改帧的大小,则需要这样做。
如果您发现您的“挑剔”软件除了 pal8 之外还能接受另一种像素格式,并且可以用 进行编码avconv
,则可以使用以下-pix_fmt
命令选择该特定格式:
avconv -i in.avi -s 88x72 -pix_fmt FORMAT -c:v rawvideo out.avi