1. 有些命令不能同时使用
比如:当指定视频文件的音频编码方式为 copy 时进行 areverse (反转)
ffmpeg -i in.mp4 -vcodec copy -acodec copy -af areverse out.mp4
错误提示:
Filtergraph 'reverse' was defined for audio output stream 0:1 but codec copy was selected.
Filtering and streamcopy cannot be used together.
与此类似的情况还有:
指定指定视频文件的视频编码方式为 copy 时进行 reverse (反转)
ffmpeg -i in.mp4 -vcodec copy -acodec copy -vf reverse out.mp4
注意这里只是指编码方式为 copy 时会这样,如果是改变为其他编码方式是 OK ,比如下面这样:
// 指定视频编码器为 libx264 ,此时可以同时使用 reverse 命令
ffmpeg -i in.mp4 -vcodec libx264 -preset fast -vf reverse out6.mp4
像这样处理,看起来不会有之前说的问题,但是这样也会可能出现新的弊端,具体请继续看下面的问题:
2. 减少不必要的编码过程
在只是处理指定码流时,不需要处理的流直接 copy 原有编码方式可节约再次编码时间。
比如在移除音频时,对视频流进行重新编码:
ffmpeg -i in.mp4 -vcodec libx264 -preset fast -an out.mp4
这样回导致进行逐帧重新编码,即使使用了 libx264 的快速编码,也会耗费大量执行时间:
而如果是直接复制原有视频编码方式进行:
ffmpeg -i in.mp4 -vcodec copy -an out.mp4
可以说是秒编译,速度和上面那种是有天差地别的差距,所以一定要注意指定编码方式时判断是否有必要进行重新编码,直接 copy 的方式会快很多很多。
同理,去除视频轨时,如果也不改变编码方式,下面这样也会快很多:
ffmpeg -i in.mp4 -vcodec libx264 -preset fast -acodec copy -vn out4.mp4
但是有一点要注意,如果是反转视频流时,即使是直接 copy 原有编码方式也会重新逐帧编码,所以此时指定新的编码方式也是可以考虑的,比如反向视频流时指定编码器为 libx264 :
ffmpeg -i in.mp4 -vcodec libx264 -preset fast -acodec copy -vf reverse out.mp4
对比直接 copy 编码方式进行编译:
ffmpeg -i in.mp4 -vf reverse out9.mp4
这时候其实两者谁快谁慢都不一定,但是有些场景下使用 x264 进行编码的可操作更强。
3. 注意命令执行的潜在条件
在某些情况下,命令执行会有潜在的潜在条件,比如当我们希望把视频文件转成音频文件时反转音轨,除了明显文件格式转换外,其实这里面还有个潜在条件就是:去除视频轨只保留音轨处理。如果先满足去除视频轨的前置条件后,就可以减少格式转换时额外的视频编码过程。
具体效果我们可以试验一下:
ffmpeg -i in.mp4 -af areverse out1.mp3
网友评论