Belirtilmemiş uzunlukta bir videonun başlangıcından X saniyesini kesmek için ffmpeg kullanmak mümkün müdür?


20

Değişken, belirtilmemiş uzunluklarda bir dizi FLV kaydının sadece ilk 1 veya 2 saniyesini kesmem gerekiyor. Bir videodan belirli bir süreyi (örneğin 30 saniyelik klipler) ayıklamak için bol miktarda kaynak buldum, ancak videonun sonuna kadar devam etmek için hiçbiri yoktu.

Bu girişimlerin her ikisi de videonun kopyalanmış bir sürümünü verir, istenen kırpmayı engeller:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

İkincisi hakkındaki düşünce şuydu: belki de mümkün olanın ötesinde bir uzunluk belirleseydim, sadece sonuna kadar giderdi. Nafile.

Aşağıdaki bir cazibe çalıştı çünkü codecs veya zaman kodu yerine saniye kullanarak bir sorun olmadığını biliyorum:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

Başka fikir var mı? Diğer (Windows tabanlı) komut satırı araçlarını kullanmaya açıkım, ancak zaten küçük resim oluşturmak için kullanıyorum ve aşina olduğum için ffmpeg'i destekliyorum.

Eğer yardımcı olursa, videolarım 2 dakikadan kısa sürecek.

GÜNCELLEME:

Mencoder ( http://www.mplayerhq.hu/ ) kullanmaya geçtim çünkü ffmpeg ek bir hackery olmadan bunu başaramayacak gibi görünüyor.

Ne yapmak için yola Mencoder sözdizimi:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv

Yani hangisini tercih edersin; mencoderörneğin, yukarıda tanımlandığı gibidir; veya aşağıdaki ffmpegörnek?
sesler

Yanıtlar:


16

Deneyin:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Bence giriş parametresinin ilk olması gerekiyor.


Yanıtınız için teşekkürler. Yukarıda kullandığım parametre sıralaması aynı sonucu veriyor, bu yüzden sipariş olduğunu sanmıyorum. Ffmpeg'den vazgeçtikten sonra, ana kare aralığım diğer araçlarla ilgili sorunlara neden oluyordu. Bunu şimdi tekrar gözden geçirdikten sonra, sonuçta ana kare aralığıydı. Daha önce 5 saniyeye ayarlandı ve o zamandan beri 1 saniyeye ayarladım. 5 saniyede, hem emrinizde hem de yukarıda denediğimde başlangıçta siyah alan oluştu (3 saniye değerinde şaşırtıcı bir şekilde). 1 saniyede beklendiği gibi çalışır.
marcelebrate

Bu,
mp3'ler

4
FFmpeg Aramasında açıklandığı gibi -i, kopyalama sırasında -ss giriş parametresi olarak (önce ) kullanılması, hatta FFmpeg'in daha eski bir sürümüyle kod çevrimi kullanılması, anahtar kare aramasını kullanır. Bu çok daha hızlıdır, ancak doğruluğu feda eder. Bir çıkış parametresi olarak kullanırsanız, işlem potansiyel olarak çok daha yavaştır (giriş, atılan parçalar için bile kare kare olarak çözülür), ancak doğrudur. Soru eski olmasına rağmen, bunun kabul edilen cevap olması gerektiğini düşünüyorum.
Jonathan Y.

23

Bu komutun ortaya çıkması , videoyu beklendiği gibi 2 saniyeden daha kısa bir sürede keser:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Sorun, input.flv dosyasındaki ana kare aralığıyla ilgiliydi. Videonun başında 3 saniye değerinde siyah kareler elde eden 5 saniyeye ayarlandı (5 - 2 = 3). O zamandan beri ana kare aralığımı 1 saniyeye değiştirdim, ancak 2 saniye de muhtemelen benim durumumda istenen sonuçları verecekti.

GÜNCELLEME: Dave'in cevabına göre kredi için kabul ettiğim sipariş -ive -ssparametreler güncellendi .


2
Ben de bu sorunu yaşıyordum. Bu yazı benim için yaptı. Mermiyi ısırdım ve -vcodec copy -acodec copytüm düzenleme komutlarım için kullanmayı denedim. Yeniden kodlama, siyah karelerin videomun başından başlamasını veya doğru noktada kesmemesini engelledi ( yeniden kodlama olmadan bir saniyenin farkı videoda neredeyse 5 saniyelik bir farka dönüşüyordu). Yani, yerine bitti -vcodec copyile -vcodec libx264 -crf 0.
Hendy

2
Aynı şeyle daha yeni karşılaştım. Ben sadece -vcodec copydilim bir anahtar karede başlamıyor çünkü yapamadım keşfetti . Bir sonraki ana kareye kadar N saniye boyunca sabit görüntü veya siyah görüntü alıyordum. Kopyalamak yerine aslında yeniden kodlarsam, beklendiği gibi çalışır. Bu nedenle, giriş ve çıkışımın her ikisi de H264 olsa da, yine de yeniden kodlamam gerekiyordu ( -vcodec libx264yerine -vcodec copy).
Karl Wilbur

Daves cevabı, ffmpeg'in en son sürümünden doğru olanı. Önce -igelmeli -ss.
Arete

0

-Ss ve -to'dan önce -i'yi şu şekilde kullanın:

ffmpeg -ss 00:01:10 -to 00:02:10 -i input -c copy output

0

Bu cevabın güncellenmesi, 2019'dan itibaren komut şimdi:

ffmpeg -i input.flv -ss 2 -c copy output.flv
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.