FFmpeg kodlamasını duraklatmanın ve devam ettirmenin bir yolu var mı?


14

Her gün kodlama için sıraya koyduğum birkaç saat video kaydı kaydediyorum ffmpeg. Ön veryslowayarı ile birlikte kullanırım x265, bu nedenle tek bir videonun kodlanması 20 saat veya daha fazla sürebilir.

Bilgisayarım gece gündüz çalıştığından, kodlamayı duraklatmanın ve devam ettirmenin ffmpegbir yolu olup olmadığını merak ediyorum ? OS X için kullanıyorum .Terminal

Öyleyse, Terminal'i kapatıp bilgisayarı yeniden başlattıktan sonra da kodlamaya devam edebilir miyim? Sanırım Terminal oturumu, OS X'te yeniden oturum açtığınızda geri yüklendi, en azından Terminal geçmişi.

Yanıtlar:


14

askıya almak

Basit bir yöntem, ctrl+ ile askıya almaktır z. Ya da PID'yi kullanarak askıya almak için pgrep ffmpegkullanabilirsiniz kill -s SIGSTOP <PID>.

Sonra fgveya komutuyla devam edin kill -s SIGCONT <PID>.

Ne yazık ki bu bir yeniden başlatmadan kurtulamayacak.

VM

VirtualBox gibi bir şey içeren bir sanal makine kullanıyorsanız, kodunuzu konuk VM'de gerçekleştirebilirsiniz. Herhangi bir zamanda "makine durumunu kaydetmenize" izin verir, bu da yeniden başlatma işleminden kurtulabilir. Ayrıca, konuk için maksimum CPU kaynakları atamanıza izin verebilir, böylece ana makineniz her zaman kullanılabilir kaynaklara sahip olur.

Muhtemelen aşırıya kaçmak, ancak VM'lere aşina iseniz veya zaten bir tane kullanıyorsanız, olası bir çözümdür.


Bu VM çözümünü seviyorum, ancak zaten bir tane kullanmıyorsanız oldukça büyük bir güçlük.
user24601

VirtualBox yolu benim için çalışmadı. Sadece orta kodlamada durumu kaydetmeye çalıştı ve [Ctrl] + [z] ile askıya almayı denedi ve sonra durumu kaydetmeye çalıştı. Durumu geri yükledikten ve devam ettirmeye çalıştıktan sonra ffmpeghata ( decode_band_types: Input buffer exhausted before END element foundveya Invalid NAL unit sizeve Error writing trailer/ Protocol error) ile durur . Belki zamandaki sıçrama ile ilgilidir, bilmiyorum.
Jānis Elmeris

@ JānisElmeris Bu sorunu kopyalayamıyorum. Ubuntu 18.04 VM'de denedim ve işe yaradı.
llogan

Tamam, muhtemelen yeterince şanslı değilim. :) Yeni bir Linux Mint 19.1 (Ubuntu 18.04 tabanlı) VirtualBox VM ile denendi.
Jānis Elmeris

benim ffmpeg birçok threds ve birçok PID vardır. Her birini SIGSTOP ve SIGCONT yapmak zorunda mıyım? zamanında bir kısıtlama var mı?
wuppi

12

Windows'ta "Duraklat / Ara" tuşuna (en sağ üstteki tuşa) basmak onu duraklatır. Enter devam edecek.

Çalışmazsa, odaklanmak için komut istemi penceresine tıklayın.


Bu, Windows için en kolay ve en iyi yanıttır (Windows 10'da doğrulanmıştır).
6ink18 ağustos

1
Bu, işlemciyi tamamen serbest bırakır, ancak koç hala darboğazlıdır. Benim durumumda 8GB RAM var ve işlem duraklatıldığında neredeyse hepsini kullanıyor. Bunun için herhangi bir düzeltme var mı? Bunu hdd'ye veya başka bir şeye aktarabilir miyim? Duraklattığımda işlerin devam etmesi için biraz sarsıntı yapmıyorum.
uçurtma

10

30 Eylül 2015 itibariyle mümkün görünmüyordu . Kaynak dosyayı segmentlere ayırmayı, segmentleri kodlamayı ve daha sonra elde edilen dosyaları dikmeyi öneririm.

Bu gerçek bir duraklatma / sürdürme tesisi değildir, ancak parçalı bölüm kodlamadan bir mola vermenizi sağlayacaktır.

Verilecek komutlara genel bir bakış:

Dosyayı parçalara ayırın

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

Bu, file000.mp4, file001.mp4 ve benzerlerini oluşturmalıdır. Segmenter nasıl çalıştığından - sadece I-karelerde keser - bu dosyalar tam olarak nsaniye sürmez ve video kısmı düzgün oynatılamayabilir, ancak veriler oradadır ve her bir parçayı dönüştürebilirsiniz.

ffmpeg -i file001.mp4 -{filter/encoding parameters} -fflags +genpts file001-new.mp4

Kodlanmış parçalara tekrar katılın

Bir metin dosyası oluşturun ve bu şekilde oluşturulan her dosyanın adını girin

file 'file000-new.mp4'
file 'file001-new.mp4'
.... 
file 'filelast-new.mp4'

Ve koş

ffmpeg -f concat -i textfile -c copy -fflags +genpts recording-encoded.mp4

Sadece 6GB belleğe ve x264'ten x265'e kodlamak için tahmini 12 saatlik bir süreye ve kesintisiz (masaüstü) sahip olmadığım, VM hilesini kullanamıyorum, ama bu harika görünüyor! Ben sadece birleştirme adım hızlı bekliyoruz, ama üzerinde hiçbir kodlama olmayacak gibi, olacağını düşünüyorum. Denemek zorunda, thx vm!
Kova Gücü

Birleştirme sırasında bir uyarı oluşturur: "Akış 0 için Codec genel başlıkları kullanmaz ancak kapsayıcı biçimi genel üstbilgiler gerektirir", ancak nihai sonuç kullanılabilir bir videodur, hiç sorun görmedim
Aquarius Power

4

Ben duraklama yerine, kodlama işlemi en az sistem önceliği (aka " renice ") verir, böylece günlük rahatça çalışabilir ve kodlama kullanılmayan sistem kaynakları ile arka planda gerçekleşir. Böylece kodlamanız kesintisiz 7/24 kesintisiz, günlük işlerle çelişmeden gerçekleşecek

AFAIK OSX pidof komutundan yoksun olduğundan , ffmpeg işlem numarasını (PID) bilmeniz gerekir

o zaman olabilir renice ile boşta arka plana süreci

sudo renice 20 yourPID

gerekirse işlemi daha agresif ön plan önceliğine de atayabilirsiniz.

sudo renice -10 yourPID

Selam! İyi öneri. Denemek zorunda kalacak.
Winterflags

4

İş parçacığını askıya almak Windows'ta da çalışır, ctrl+ ile çalışmaz Z, ancak kaynak yöneticisinde de devam ettirebilirsiniz.


1

(Linux için bu)

Muhtemelen bildiğiniz gibi, 'q' tuşuna basmak kayıt dosyasını sonlandırır.

ffplay 'p'olasılığına sahiptir. Neden ffmpeg'de aynı şey yok? Belki de video ve ses arasında desync'e yol açabileceğinden? ...

Ben sadece crf (23) ile x264-aac-mkv ve her zaman aynı video koşulları ile ffmpeg kodlamak, kayıtları 'çıkmak' (q) ve bu komut dosyası bulunduğu belirli bir direk, tüm bölümleri katılmak 1 dosya bu bash-script ile aerodinamik modda:

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

Bundan sonra ortaya çıkan birleştirilmiş videoyu kontrol edip başka bir dizine yapıştırıyorum. Segmentler birleştirme yönünden kaldırılır.

Ancak, sorunsuz bir 'Duraklat ve Devam Et' düğmesi gerçekten hoş karşılanır;)


0

Bu sadece bir fikir, ancak bütçeniz varsa, işlemciyi (8. nesil Intel'e) veya daha da iyisi, video kartını (NVIDIA GTX 1050 veya üstüne) yükseltmek iyi bir fikir olacaktır. CPU yoğun yerine donanım hızlandırmalı h.265 / HEVC x265. Video kodlamanız 20 saatten daha kısa bir sürede tamamlanacak ve böylece elektrik maliyetlerinden de tasarruf edeceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.