Answers:
一种简单的方法是使用ctrl+ 挂起它z。或者,您可以获取PID,pgrep ffmpeg
然后将其kill -s SIGSTOP <PID>
用于挂起。
然后使用fg
命令或恢复kill -s SIGCONT <PID>
。
不幸的是,这在重启后将无法生存。
如果您使用带有VirtualBox之类的虚拟机,则可以在来宾VM中执行编码。它将使您可以随时“保存计算机状态”,这在重启后仍然有效。它还可以允许您为来宾分配最大CPU资源,这样您的主机将始终具有可用资源。
可能过大了,但是如果您熟悉VM或已经使用过VM,则可能是一种解决方案。
ffmpeg
停止并显示错误(decode_band_types: Input buffer exhausted before END element found
或Invalid NAL unit size
和Error writing trailer
/ Protocol error
)。我不知道这可能与时间的推移有关。
截至2015年9月30日,这似乎是不可能的。我建议对源文件进行分段,对分段进行编码,然后拼接结果文件。
这不是真正的暂停/恢复功能,但是零碎的划分将使您在编码方面有所突破。
发出命令的粗略概述:
ffmpeg -i recording.mp4 -c copy -flags +global_header -segment_time n -f segment file%03d.mp4
这应该创建file000.mp4,file001.mp4,依此类推。由于分段器的工作方式-它仅在I帧处剪切-这些文件的n
长度可能不会精确到几秒钟,视频部分可能无法正常播放,但是数据就在那里,您可以转换每个部分,例如
ffmpeg -i file001.mp4 -{filter/encoding parameters} -fflags +genpts file001-new.mp4
创建一个文本文件,并像这样输入每个渲染文件的名称
file 'file000-new.mp4'
file 'file001-new.mp4'
....
file 'filelast-new.mp4'
然后跑
ffmpeg -f concat -i textfile -c copy -fflags +genpts recording-encoded.mp4
我建议您不要暂停,而应将编码过程的系统优先级设置为最低(也称为“ renice ”),这样您就可以每天舒适地工作,并且编码将在后台使用未使用的系统资源进行。因此,您的编码将全天候24/7无缝进行,不会与日常工作发生冲突
由于AFAIK OSX缺少pidof命令,因此您需要知道ffmpeg进程号(PID)
那么你可以使用renice过程中闲置的背景
sudo renice 20 yourPID
如果需要的话,您还可以将流程重新安排为更具攻击性的前台优先级
sudo renice -10 yourPID
暂停线程也可以在Windows上运行,而不是ctrl+ Z,但在资源管理器中,您也可以在其中恢复它。
(对于Linux)
众所周知,按“ q”将结束录制文件。
ffplay具有“ p”可能性。ffmpeg为什么没有相同的东西?也许是因为它可能导致视频和音频之间的不同步?
我只是使用crf(23)将ffmpeg编码为x264-aac-mkv,并且始终在相同的视频条件下,“退出”(q)录制并将所有片段加入此脚本所在的特定目录中的1个文件中使用以下bash脚本在流复制模式下:
#!/bin/bash
# FFMPEG MERGE
# File path must be absolutely absolute...
ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" /home/me/Videos/FFmpeg/FFmpeg_Merge/*.mkv) -c copy merged.mkv
exit
之后,我检查生成的合并视频并将其粘贴到另一个目录。这些段将从合并目录中删除。
但是,确实欢迎使用无忧的“暂停和恢复”按钮;)