如何更改框架大小并保留宽度(使用ffmpeg)?


21

我是这个StackExchange网站的新手,并且是使用FFmpeg编码器的新手。我有一个720x480(3:2)的视频,我想将其更改为720x406(16:9),以匹配网站上的其他视频。我尝试了各种命令组合,包括:

ffmpeg -i myfile.mv4 -s 720x406 outfile.mp4
ffmpeg -i myfile.m4v -c copy -aspect 16:9 outfile.mp4

我最后得到的是一个视频,该视频缩小到指定的高度,但没有保留宽度。它最终以608x406左右。今天,我一直在使用FFmpeg的各种GUI版本,它们似乎在做同样的事情。

要实现所需的帧大小,应该传入什么合适的选项/参数(假设我将通过命令行进行更多控制)?

Answers:


36

使用比例过滤器可以做到,但是还有更多。

ffmpeg -i input.mov -vf scale=720x406 output.mov 

会创建具有所需像素尺寸的电影,但是如果查看输出,您会发现它将信息添加到元数据中,从而可以通过使用非正方形像素以与原始图像相同的长宽比进行播放。因此,如果您想将影片变形地拉伸到新的长宽比,则需要手动设置像素长宽比,称为“采样长宽比”的SAR,因此对于正方形像素使用:

ffmpeg -i input.mov -vf scale=720x406,setsar=1:1 output.mov

或者,您可以将显示纵横比设置为所需的任何值,从而:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 output.mov

我正在使用-vf命令和随后的x = y,z = a表达式来创建一系列过滤器。过滤器可能非常复杂,但是在最简单的用法中,它们采用形式effect=parameter,nexteffect=anotherparameter,并且按照您编写过滤器的顺序进行处理。

您可能需要为编解码器添加其他命令,例如-c:v libx264使用x264 mp4编码器,以及-crf 20将恒定速率因子设置为20(通常在尺寸和质量之间做出很好的折衷)。因此,合理完整的命令应如下所示:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 -c:v libx264 -preset slow -profile:v main -crf 20 output.mov

主配置文件有利于设备兼容性,slowlibx264编码器的预设在速度和质量之间取得了很好的平衡,因此这是一台很好的通用网络编码工具。您可以通过使用fastveryfast或减慢其速度使其更快,veryslow并且placebo使其变得更好一点veryslow,而不是花费更多的处理时间(因此得名)。

顺便说一句,不要使用-c拷贝,这意味着只需要复制的视频和音频流,而不做任何他们在所有,所以你没有规模,编解码器,比特率等方面做会产生什么影响。


1
如果您使用的是ffmpeg的最新版本,则无需再将x264规定为编解码器,但是仍然有必要查看所需的设置。
STIB

1
我认为元数据只有一个DAR字段。那么使用setsar只是间接设置DAR?
jiggunjer 2015年

我必须使用“ -c复制”,但另一方面,我想调整屏幕大小。我该如何实现?
Dr.jacky

1
@Hyde先生,您应该将其作为一个新问题而不是在评论中提问
stib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.