Linux 将ffmpeg-sseof与管道一起使用
我正致力于从4K视频中提取片段并对其进行转码。 我已经知道从哪里开始,剪辑应该持续多长时间 我正在使用以下命令提取我需要的剪辑(视频中30秒,我拍摄10秒的剪辑)Linux 将ffmpeg-sseof与管道一起使用,linux,ffmpeg,Linux,Ffmpeg,我正致力于从4K视频中提取片段并对其进行转码。 我已经知道从哪里开始,剪辑应该持续多长时间 我正在使用以下命令提取我需要的剪辑(视频中30秒,我拍摄10秒的剪辑) ffmpeg-ss30-i'input.mp4'-c copy-t10-f matroska'output.mp4' 为了让视频保留关键帧,以便知道要绘制什么,剪辑可以超过10秒(这是预期的) 然后,我可以使用以下命令对视频进行转码,并确保只需最后10秒(特别是sseof命令) ffmpeg-sseof-10-i'output.mp4
ffmpeg-ss30-i'input.mp4'-c copy-t10-f matroska'output.mp4'
为了让视频保留关键帧,以便知道要绘制什么,剪辑可以超过10秒(这是预期的)
然后,我可以使用以下命令对视频进行转码,并确保只需最后10秒(特别是sseof
命令)ffmpeg-sseof-10-i'output.mp4'-vcodec libx264-r 15-s 720x400-aspect 720:400-sn-f matroska-acodec libmp3lame-ac 2-ar 11025-y'transcoded.mkv'
由于文件系统速度较慢,我希望避免将提取的片段写入磁盘的第一步,我可以使用管道执行此操作,只需动态转码即可。ffmpeg-ss 30-i'input.mp4'-c copy-t 10-f matroska管道:1 | ffmpeg-i管道:0-vcodec libx264-r 15-s 720x400-aspect 720:400-sn-f matroska-acodec libmp3lame-ac 2-ar 11025-y'transcoded.mkv'
但是,对于管道,我不能使用-sseof
命令,因为它只是生成一个无效的视频剪辑文件。(日志中没有错误或警告)
我目前的解决方案是再次对转码后的视频剪辑进行转码,只需最后10秒钟。(但这似乎是一个糟糕的解决办法,而不是真正的解决方案)
由于这是我第一次使用
ffmpeg
,我想知道是否可以通过管道拍摄视频的最后10秒?或者有人有更好的解决办法?也许我遗漏了什么,但你需要的只是
ffmpeg -ss 30 -i 'input.mp4' -t 10 -vcodec libx264 -r 15 -s 720x400 -aspect 720:400
-acodec libmp3lame -ac 2 -ar 11025 -sn -f matroska -y 'transcoded.mkv'
出于某种原因,如果输入文件是
.mkv
或.ts
文件,它实际上会对前30秒进行转码,即使设置为跳过它们。(或者,如果我检查CPU并查看它的负载,至少看起来是这样的)但是,如果文件是.mp4
,它会按预期工作。不幸的是,我必须能够处理所有3种文件类型。使用TS和MKV时,这里的工作与预期一样。如果我使用此文件作为输入,设置-ss 0
大约需要8秒,而-ss 45
大约需要14秒(在我的机器上)。这对于跳过45秒来说是一个相当大的增长。是我误解了什么,还是它应该是这样工作的?一定是你的系统。整个执行过程需要10.73秒,该示例使用-ss45
。感谢您的回答,它似乎在其他机器上工作。