如果使用有损格式进行编码,就无法在不降低质量的情况下进行任何过滤,但是你有一些选择。
使用播放器裁剪
一个可能的解决方案是在播放时进行裁剪,这样你甚至不需要重新编码。这也有助于预览裁剪效果。
此方法不会创建输出文件。这将使用您的视频播放器在播放时进行裁剪。如果需要输出文件,请参见以下其他方法之一。
使用ffplay
和crop filter:
ffplay -vf "crop=480:270:200:100" input.mp4
使用
vlc
(或
cvlc
):
vlc input.mp4 --crop=480x270+200+100
或者您可以使用VLC GUI进行裁剪:工具→效果和滤镜→视频效果→裁剪。
接受一些质量损失(您甚至可能注意不到差异)
给它足够的位数,您可能无法分辨出质量差异:
ffmpeg -i input -vf "crop=480:270:200:100" -c:v libx264 -crf 17 -c:a copy ouput.mp4
请查看FFmpeg Wiki: H.264视频编码指南以获取更多信息。
使用比特流过滤器
h264_metadata和hevc_metadata比特流过滤器可以在不修改视频本身的情况下设置裁剪尺寸。
注意:您的播放器可能不支持此方法。
H.264视频示例:
ffmpeg -i input.mp4 -c copy -bsf:v h264_metadata=crop_left=100:crop_right=20:crop_top=10:crop_bottom=10 output.mp4
使用无损格式
ffmpeg
可以使用多种无损编码器进行编码:ffv1、huffyuv、ffvhuff、utvideo、libx264(使用-crf 0
或-qp 0
)。输出将是无损的,但输出文件将非常大。
注意:您的播放器可能不支持此方法。
ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v ffv1 -c:a copy output.mkv
或者
ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v libx264 -crf 0 -c:a copy output.mp4
如果您的输入是MJPEG
使用ffmpeg
流复制单个图像, 使用jpegtran
无损地裁剪它们,然后再使用ffmpeg
重新混合它们。这将不会有任何损失,但您将受到古老的MJPEG格式的限制。
ffmpeg
命令的完整控制台输出。 - lloganffmpeg -i input.mp4 -filter:v "crop=480:270:200:100" -c:a copy -qp 0 output.mp4
- mrana