Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将ffmpeg-sseof与管道一起使用_Linux_Ffmpeg - Fatal编程技术网

Linux 将ffmpeg-sseof与管道一起使用

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

我正致力于从4K视频中提取片段并对其进行转码。 我已经知道从哪里开始,剪辑应该持续多长时间

我正在使用以下命令提取我需要的剪辑(视频中30秒,我拍摄10秒的剪辑)
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
。感谢您的回答,它似乎在其他机器上工作。