มีวิธีหยุดชั่วคราวและทำการเข้ารหัส FFmpeg ต่อหรือไม่?


14

ffmpegฉันบันทึกไม่กี่ชั่วโมงของภาพวิดีโอทุกวันซึ่งเราได้ตั้งอยู่ในคิวสำหรับการเข้ารหัสด้วย ฉันใช้การveryslowตั้งค่าล่วงหน้าด้วยx265ดังนั้นวิดีโอหนึ่งชั่วโมงอาจใช้เวลานานถึง 20 ชั่วโมงหรือมากกว่าในการเข้ารหัส

เนื่องจากคอมพิวเตอร์ของฉันทำงานทั้งกลางวันและกลางคืนฉันสงสัยว่าffmpegจะมีวิธีหยุดและเริ่มการเข้ารหัสต่อหรือไม่ ฉันใช้Terminalสำหรับ OS X

ถ้าเป็นเช่นนั้นฉันสามารถทำการเข้ารหัสต่อได้แม้หลังจากปิด Terminal และทำการรีบูตเครื่องคอมพิวเตอร์หรือไม่ ฉันคิดว่าเทอร์มินัลเซสชันจะถูกกู้คืนเมื่อคุณเข้าสู่ระบบอีกครั้งใน OS X อย่างน้อยก็เป็นประวัติเทอร์มินัล

คำตอบ:


14

แขวน

วิธีง่ายๆคือการระงับด้วย+ctrl zหรือคุณอาจได้รับ PID ด้วยpgrep ffmpegจากนั้นใช้kill -s SIGSTOP <PID>เพื่อระงับ

จากนั้นกลับมาด้วยคำสั่งหรือfgkill -s SIGCONT <PID>

น่าเสียดายที่นี่จะไม่สามารถรีบูตได้

VM

ถ้าคุณใช้เครื่องเสมือนกับ VirtualBox คุณสามารถทำการเข้ารหัสของคุณใน guest VM มันจะช่วยให้คุณ "บันทึกสถานะเครื่อง" ได้ตลอดเวลาซึ่งสามารถอยู่รอดได้ในการรีบูต นอกจากนี้ยังช่วยให้คุณสามารถกำหนดทรัพยากร CPU สูงสุดสำหรับแขกดังนั้นโฮสต์ของคุณจะมีทรัพยากรที่มีอยู่เสมอ

อาจเป็นไปได้มากเกินไป แต่ถ้าคุณคุ้นเคยกับ VM หรือใช้แล้วมันเป็นทางออกที่เป็นไปได้


ฉันชอบโซลูชัน VM แต่ถ้าคุณใช้อยู่แล้วมันเป็นเรื่องที่ค่อนข้างยุ่งยาก
user24601

วิธี VirtualBox ไม่ได้ผลสำหรับฉัน พยายามบันทึกสถานะในการเข้ารหัสกลางและพยายามระงับโดย [Ctrl] + [z] จากนั้นบันทึกสถานะ หลังจากเรียกคืนสถานะแล้วลองดำเนินการต่อให้ffmpegหยุดข้อผิดพลาด ( decode_band_types: Input buffer exhausted before END element foundหรือInvalid NAL unit sizeและError writing trailer/ Protocol error) บางทีมันอาจเกี่ยวข้องกับการกระโดดข้ามเวลาฉันไม่รู้
Jānis Elmeris

@ JānisElmerisฉันไม่สามารถคัดลอกปัญหานั้นได้ ฉันลองใช้ Ubuntu 18.04 VM แล้วก็ใช้งานได้
30770

ตกลงฉันอาจไม่โชคดีพอ :) พยายามด้วย Linux Mint ใหม่ 19.1 (ขึ้นอยู่กับ Ubuntu 18.04) VirtualBox VM
Jānis Elmeris

ffmpeg ของฉันมีเธรดจำนวนมากและ PID มากมาย ฉันต้องใช้ SIGSTOP และ SIGCONT แต่ละอันหรือไม่ มีข้อ จำกัด ในเวลาหรือไม่
wuppi

12

ใน Windows การกดปุ่ม "หยุดชั่วคราว / แตก" (ปุ่มขวาบนสุด) จะหยุดชั่วขณะ จะเข้าสู่การดำเนินการต่อ

หากไม่ได้ผลให้คลิกที่หน้าต่างพรอมต์คำสั่งเพื่อกำหนดโฟกัส


นี่คือคำตอบที่ง่ายที่สุดและดีที่สุดสำหรับ Windows (ตรวจสอบใน Windows 10)
ส่องสว่างใน

1
สิ่งนี้จะทำให้ซีพียูสมบูรณ์ขึ้น แต่ RAM ยังคงเป็นปัญหาคอขวดอยู่ ในกรณีของฉันฉันมี RAM 8GB และใช้เกือบทั้งหมดในขณะที่การดำเนินการหยุดชั่วคราว การแก้ไขใด ๆ ที่? ฉันสามารถถ่ายโอนสิ่งนี้ไปยัง hdd หรืออะไรบางอย่าง? ฉันไม่รังเกียจที่จะทำอะไรต่อเมื่อฉันหยุดเล่น
ว่าว

10

มันไม่ได้ดูเหมือนเป็นไป ณ30 กันยายน 2015 ฉันขอแนะนำให้แบ่งไฟล์ต้นฉบับ, เข้ารหัสเซกเมนต์แล้วทำการต่อไฟล์ผลลัพธ์

นี่ไม่ใช่สิ่งอำนวยความสะดวกหยุดชั่วคราว / เล่นต่อที่แท้จริง แต่การแบ่งส่วนย่อยจะช่วยให้คุณได้หยุดพักจากการเข้ารหัส

ภาพรวมคร่าวๆของคำสั่งที่จะออก:

แบ่งไฟล์แบบเต็มออกเป็นส่วน ๆ

ffmpeg -i recording.mp4 -c copy -flags +global_header -segment_time n -f segment file%03d.mp4

สิ่งนี้ควรสร้าง file000.mp4, file001.mp4 และอื่น ๆ เนื่องจากการทำงานของเซกเมนต์ - ตัดเฉพาะที่ I-frames - ไฟล์เหล่านี้จะมีความ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

มีหน่วยความจำเพียง 6GB และเวลาประมาณ 12 ชั่วโมงถึง enconde จาก x264 ถึง x265 และไม่มีการหยุดพัก (เดสก์ท็อป) ฉันไม่สามารถใช้เคล็ดลับ VM แต่นี่ฟังดูยอดเยี่ยม! ฉันคาดหวังว่าขั้นตอนการเข้าร่วมจะรวดเร็ว แต่เนื่องจากไม่มีการเข้ารหัสฉันจึงคิดว่ามันจะเป็น ต้องลองดูขอบคุณ vm!
อำนาจกุมภ์

มันสร้างคำเตือนเมื่อเข้าร่วม: "ตัวแปลงสัญญาณสำหรับสตรีม 0 ไม่ได้ใช้ส่วนหัวร่วม แต่รูปแบบคอนเทนเนอร์ต้องใช้ส่วนหัวร่วมกัน" แต่ผลลัพธ์สุดท้ายคือวิดีโอที่ใช้งานได้ฉันไม่เห็นปัญหาเลย
Aquarius Power

4

ฉันฉลาดมากแทนที่จะหยุดชั่วคราวคุณให้กระบวนการเข้ารหัสมีความสำคัญน้อยที่สุดในระบบ (aka " renice ") ดังนั้นคุณสามารถทำงานได้ทุกวันอย่างสะดวกสบายและการเข้ารหัสจะเกิดขึ้นพร้อมกับระบบที่ไม่ได้ใช้ ดังนั้นการเข้ารหัสของคุณจะเกิดขึ้นอย่างราบรื่นตลอด 24/7 โดยไม่มีการขัดจังหวะโดยไม่ขัดแย้งกับงานประจำวัน

เนื่องจาก AFAIK OSX ไม่มีคำสั่ง pidof คุณต้องทราบหมายเลขกระบวนการ ffmpeg (PID)

จากนั้นคุณสามารถreniceกระบวนการพื้นหลังไม่ได้ใช้งานด้วย

sudo renice 20 yourPID

หากจำเป็นคุณสามารถยกเลิกกระบวนการเพื่อให้ลำดับความสำคัญเบื้องหน้าสำคัญยิ่งขึ้น

sudo renice -10 yourPID

Hi! คำแนะนำที่ดี จะต้องลองดู
Winterflags

4

เธรดการหยุดทำงานเธรดบน Windows เช่นกันไม่ใช่กับctrl+ Zแต่ในตัวจัดการทรัพยากรคุณสามารถดำเนินการต่อที่นั่นได้


1

(นี่สำหรับ Linux)

อย่างที่คุณทุกคนคงรู้แล้วการกด 'q' จะเป็นการสิ้นสุดไฟล์บันทึก

ffplay มีความเป็นไปได้ 'p' ทำไม ffmpeg จึงไม่มีสิ่งเดียวกัน อาจเป็นเพราะมันสามารถนำไปสู่ ​​desync ระหว่างวิดีโอและเสียงได้หรือไม่ ...

ฉันเพิ่ง ffmpeg-encode เป็น x264-aac-mkv กับ crf (23) และมักจะมีเงื่อนไขวิดีโอเดียวกันเสมอ 'ออกจาก' (q) การบันทึกและเข้าร่วมกลุ่มทั้งหมดใน dir เฉพาะที่สคริปต์นี้อยู่ถึง 1 ไฟล์ ในโหมด streamcopy ด้วย bash-script นี้:

#!/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 

หลังจากนั้นฉันตรวจสอบวิดีโอที่ผสานแล้วและวางลงใน dir อื่น ส่วนจะถูกลบออกจากการผสาน dir

แต่ปุ่ม 'หยุดชั่วคราว & เล่นต่อ' ไม่ยุ่งยากจะได้รับการต้อนรับอย่างแน่นอน;)


0

นี่เป็นเพียงความคิด แต่ถ้าคุณมีงบประมาณพอสมควรคุณควรอัพเกรดโปรเซสเซอร์ (เป็น 8th gen Intel) หรือดีกว่าการ์ดวิดีโอ (เป็น NVIDIA GTX 1050 ขึ้นไป) เพื่อให้คุณสามารถเข้ารหัสได้ H.265 / HEVC กับการเร่งฮาร์ดแวร์แทน x265CPU การเข้ารหัสวิดีโอของคุณจะเสร็จสิ้นในเวลาไม่ถึง 20 ชั่วโมงช่วยประหยัดค่าไฟฟ้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.