-->
获得免费通行证,加入我们的流媒体连接-2月19日至22日; 现在注册!

发现你不能没有的六个FFmpeg命令

文章特色图片

FFMPEG是一个免费的命令行实用程序,它是世界上大多数最大的云编码农场的引擎, 公营及私营. 但它也执行许多简单和必要的任务,突然出现在工作室或编码设施, 特别是在进行性能或基准测试时. 在本文中,我将向您展示如何执行其中的六个任务.

开始

要开始,您可以从FFmpeg免费下载FFmpeg.org/download.html, 提供Windows可用的软件包, Mac, 以及包括Ubuntu在内的多种Linux版本, Debian, Fedora, 和红帽企业Linux. 虽然批处理命令的结构和操作在每个平台上是不同的, 所有FFmpeg命令的语法都非常相似.

下面是基本的FFmpeg命令行结构:

输入.mp4输出.mp4

下面是对这些命令的解释:

Ffmpeg         

This calls the program; add drive and folder 信息 for ffmpeg.如果它不在您的路径中.

-i         

这标识输入文件.

input.mp4     

这是输入文件. FFmpeg可以本地输入大多数容器格式,包括MP4、 .ts、MOV、AVI、Y4M、MKV等等.

output.mp4   

T这是输出文件. No 开关 necessary; just the file name.

请注意,除非您通过开关识别音频或视频编解码器, FFmpeg将使用每个容器格式的默认编解码器以及合理的编码参数. 对于MP4扩展,如果输入1080p文件,FFmpeg将使用H.264视频编解码器,大约9到10mbps, AAC音频编解码器在130 Kbps左右, 关键帧间隔为250帧, 高调, 和介质的x264预设. 所有这些都是可定制的, 当然, 但如果你想做的只是创建一个可以从硬盘上播放的视频文件, 上面的命令就足够了.

注意,您可以 下载所有命令和输入测试文件 在本教程中使用. (请注意,当您单击此链接时,下载将自动开始.本视频节选自Harmonic公司提供的一段测试视频. (谐波公司.com).

无需重新编码即可更改容器格式

假设您正在使用一个只接受MOV文件的应用程序,并且源文件位于MP4容器中(反之亦然)。. 您可以将文件输入到Adobe Premiere Pro并根据需要输出, 但如果不重新编码,Premiere Pro就无法做到这一点. 这很容易在FFmpeg中使用这个命令字符串完成:

输入.Mp4 v - c:副本 -c:拷贝输出.mov

这里的新命令如下:

v - c:副本       

视频解码器,收到. 这告诉FFmpeg将压缩的视频流复制到新文件中,而无需重新编码.

c:一份       

音频解码器,收到. 这告诉FFmpeg将压缩的音频流复制到新文件中,而无需重新编码.

类似的场景可能涉及MPEG-2容器格式的文件 .ts扩展. 在这里,您可能需要添加一个开关来处理传输流文件中的MPEG-2/4 ADTS头文件.

输入.Ts 净水器:aac_adtstoasc v - c:副本 -c:拷贝输出.mp4

已添加的交换机如下:

净水器:aac_adtstoasc

管理ADTS转换.

这种特殊的转换节省了大约2天的编码时间,而我不得不转换大约100天 .ts文件转换成MP4文件进行测试. 的 aac_ adtstoasc 对于最新版本的FFmpeg,可能不需要切换, 哪个可以自动插入开关. 如果转换崩溃或转换文件中的音频不能正常播放,您就会知道您需要它. 或者,你可以把它留在里面.

在不重新编码的情况下提取文件的一部分

假设您有一个文件,并希望消除前30秒, 或者干脆从中截取两分钟的片段. 再一次。, 你可以将文件导入Adobe Premiere Pro,然后编辑你想要的内容, 但这将涉及另一个渲染和编码周期. 您可以使用下面所示的命令在FFmpeg中快速而简单地完成此操作.

谐波测试文件大约有12秒长. 该命令在文件中查找5秒,并在不重新编码的情况下摘录接下来的3秒.

Ffmpeg -ss 00:00:05 -i input.Mp4 -t 00:00:03 v - c:副本 -c:拷贝摘录.mp4

-ss 00:00:05

在文件中查找5秒.

-t 00:00:05    

提取文件的持续时间. 如果你把这个开关关着, FFmpeg将在提取的文件中包含从查找点到文件末尾的内容.

请注意,FFmpeg似乎在文件中的关键帧周围工作,因此结果通常不是帧精确的. 在大多数情况下,这并不重要, 但是,如果您确实需要从您的摘录文件中包含或排除特定的持续时间或特定的框架, 这种方法可能行不通. 在这种情况下,你最好使用视频编辑器.

如果您只想提取文件中的视频而不提取音频,请添加 -an 开关. 若要仅提取音频,请添加 -vn 开关. 注意,MP4容器可以保存纯音频文件, 因此,当从MP4源生成纯音频文件时,您不需要更改容器格式.

转换为原始格式

一些文件分析工具只输入原始YUV或Y4M文件, 所以你必须将你的编码文件转换成YUV输入. 除了, 当使用较新的编解码器如AV1时, most tools can’t input the encoded file natively; again, 你必须转换成YUV或Y4M.

YUV和Y4M有什么区别? 两者都是未压缩格式, 但是YUV文件头不包含分辨率, 帧率, 或其他与文件相关的信息. 要将YUV文件输入到程序中,通常需要指定一个或多个参数. 相比之下,Y4M文件包含这些数据,简化了输入.

例如,输入像ConstructionField这样的YUV文件.进入莫斯科国立大学视频质量测量工具, 您必须指定分辨率和颜色信息,如上面所示 图1. 使用Y4M文件, 这个数据在文件头中, 所以你可以跳过这一步, 在用户界面和批处理命令字符串中. Basically, if the tool you’re working with can accept Y4M files, use that format; if not, use YUV.

图1. 输入YUV文件到莫斯科国立大学视频质量测量工具强制您指定分辨率和其他文件相关的数据. Y4M文件通常在头和输入中包含此内容

使用以下命令转换为任意一种格式都很简单:

输入.Mp4 -pix_fmt yuv420p -vsync 1输出.y4m

要生成YUV文件,只需使用该扩展名. 以下是对新命令的解释:

pix_fmt yuv420p      

这设置了文件格式,YUV420p是8位文件最常用的格式. 如果你使用的是10位格式, 来看看这段对话 堆栈交换.

-vsync 1        

这告诉FFmpeg保持输入和输出文件之间的音频/视频同步. 我不能百分之百确定在每个情况下都有必要, 但很久以前,它解决了我的同步问题, 从那以后我就一直把它留在家里.

缩放压缩文件时转换为YUV/Y4M

这是一个非常常见的用例,当在低于原始分辨率的压缩文件上计算客观质量度量时. 例如,假设您想计算从1080p文件编码的720p文件的VMAF评级. 使用大多数工具, 您必须将编码文件缩放回1080p,以便与源文件进行逐像素匹配.

为此,使用与上面所示相同的基本命令,添加两个新开关.

输入.Mp4 -s 1920x1080 -sws_flags兰索斯 -pix_fmt yuv420p -vsync 1输出.y4m

以下是对新命令的解释:

-s 1920x1080           

这告诉FFmpeg缩小到1080p.

-sws_flags兰索斯 

这告诉FFmpeg使用Lanczos缩放方法

我使用这种方法是因为它是NVIDIA在将视频从低分辨率缩放到高分辨率时使用的主要缩放技术, 因为在进行质量测量时, 我试图预测人们在电脑或智能电视上观看视频时的质量. 尽管有更高质量的缩放方法, 对于大多数显示设备来说,它们可能太慢了, 所以我坚持买兰佐斯.

就是这样. 如果您从未使用过命令行, 你肯定会发现自己处于不利地位, 但是花一两个小时学习基本的命令行会让你跟上. 如果你经常尝试编码和质量指标, 您会发现命令行和FFmpeg是绝对必要的, 并且这种组合极大地简化并加速了您的测试和分析工作流程.

[本文发表在2019年6月号的。 流媒体杂志 作为“你不能没有的六个FFmpeg命令”."]

流媒体覆盖
免费的
合资格订户
现在就订阅 最新一期 过去的问题
相关文章

如何使用PowerShell和BASH为FFmpeg编写脚本

FFmpeg被设计为视频和音频录制的跨平台解决方案, 转换, 以及使用简单的静态命令行进行流式传输. 在命令字符串中使用变量和“for循环”简化了现有脚本的重用,并有助于自动化它们的操作. 虽然你不能在Windows命令窗口中使用这些脚本, 你可以在Windows上使用微软PowerShell,在Linux和Mac上使用Bash. 在本教程中,您将学习如何使用PowerShell和Bash创建和运行这样的脚本.

如何编码与FFmpeg 5.0

而不是专注于随机的任务, 本教程将带您了解使用最新版本的FFmpeg进行编码的基础知识.

如何自动化FFmpeg和Bento4与Bash脚本

只有一些初学者级别的脚本, 您可以使用开源工具将多个字段编码和打包为HLS和DASH输出.

开始测试的时间:FFmpeg第4轮.0和增加AV1支持

AV1提供与HEVC相同的质量,但数据速率较低. 但就目前而言,进展缓慢. 一段5秒的视频编码耗时23小时46分钟.

DIY:现场音频流使用冰播与FFmpeg

以以前的DIY文章为基础, 本文将引导您完成音频捕获, 用FFmpeg编码和包装, 然后通过您在上一篇文章中设置的Icecast服务器播放

评价加冕了H的国王.264编码器

FFmpeg可能是免费下载的,但仍然需要付费. Robert Reinhardt解释了为什么这种编码器并不适合每个公司.

提及的公司及供应商