FFmpeg [duplicate] ile video dosyasından başlangıç ​​konumundan bitiş konumuna kadar parçayı kesin


143

Bu sorunun burada zaten bir cevabı var:

30 dakikalık bir video dosyam var, ancak 00:09:23 - 00:25:33 arasında bir video çıkarmak istiyorum.

Başlangıç -sskonumunu ile tanımlayabilirim , ancak son konum için bir tane bulamadım. Herhangi bir yardım lütfen?

Yanıtlar:


244

Ffmpeg'i kurun

En son sürümünü indirdiğinizdenffmpeg ve dağıtımınızla birlikte gelen sürümünü kullanmadığınızdan emin olun (örn. Ubuntu). Çeşitli dağıtımlardan gelen paketlenmiş sürümler genellikle eskidir ve beklendiği gibi davranmaz.

Veya kendiniz derleyin .

Yeniden kodlamadan bir video nasıl kesilir

Şunun için video kesmek [start]için bunu kullanın [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

Burada, seçenekler şu anlama gelir:

  • -ssbaşlangıç ​​zamanını belirtir, örneğin 00:01:23.000veya 83(saniye olarak)
  • -t klibin süresini belirtir (aynı format).
  • Son zamanlarda ffmpegayrıca bitiş zamanını sağlayacak bir bayrak var -to.
  • -c copyilk video, ses ve altyazı bit akışını tekrar kodlamadan girdiden çıktı dosyasına kopyalar. Bu kaliteye zarar vermez ve komutu saniyeler içinde çalıştırır.

Yeniden kodlama ile bir video nasıl kesilir

-c copySeçeneği dışarıda bırakırsanız , ffmpegseçtiğiniz videoya göre çıkış videosunu ve sesi otomatik olarak yeniden kodlar. Yüksek kaliteli video ve ses için , sırasıyla x264 Kodlama Kılavuzunu ve AAC Kodlama Kılavuzunu okuyun .

Örneğin:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

1
Ubuntu 12:10, -c: v ve -c: a işe yaramadı. Bunun yerine "-acodec copy ve -vcodec copy" kullanmak zorunda kaldım.
Samuel Lampa

1
@Samuel O zaman gerçek bir FFmpeg değil, Libav çatalı bile olmayan eski bir sürümü kullanıyorsunuz. Bakınız: stackoverflow.com/a/9477756/1109017
slhck

Bunun için teşekkürler! Bir süre belirtmezseniz, sonuna kadar gider mi?
Jeff

@Jeff Evet! (minimum karakter)
slhck

3
@Prateek Video bit akışını kopyalarken (yeniden kodlama yerine), yalnızca ana kareleri kesebilirsiniz . 1, 2 ve 3. saniyelerde ana kareler varsa, ancak ikinci 1.5'te kesmek istiyorsanız, ffmpeg kesmeye başlamadan önce ikinci 2'ye kadar bekleyecektir. Bu yanlış yapar.
slhck

26

Aşağıdaki komutu şimdi kullanabileceğinizi düşünüyorum.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

Ayrıca ffmpeg Doc veya bu wiki sayfasına bir göz atın .


6
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFilebasit sürüm
nwgat

3
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4(With -copyts) versiyonunu kullanmak zorunda kaldım , aksi halde yanlış kesilmiş (başında siyah ekranla). Yine de 2. link için teşekkürler.
Necronomicron

Bu harika, istediğim son şey bitiş noktalarından geçen süreyi hesaplamaktı.
Tomasz Gandor

-To seçeneği gerçekte sorulan soruyu yanıtlar. Cevapların geri kalanı ya belirsiz ya da eskimiş.
James Bowery

12

Kimsenin trim filtreyi önermediği garip .

Girişin ikinci dakikası dışındaki her şeyi bırak:

ffmpeg -i INPUT -vf trim=60:120

Sadece ilk saniyeyi koru:

ffmpeg -i INPUT -vf trim=duration=1

İkinci 13 ile ikinci 58 arasındaki her şeyi bırak.

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
Evet, bahsetmek güzel trimve atrim. Filtreleme yaparken genellikle bunları kullanırım, ancak kullanıcılar filtrelemenin yeniden kodlanması gerektiğini not etmelidir .
llogan

Kahramanımsın. Bunu yapan bir filtreye çok ihtiyacım vardı.
fahadash

5

Windows ve Linux için çalışan bu iki yöntemi kullanabilirsiniz .

Video dosyalarını ffmpeg ile ayırmanın iki yolu vardır. İlki kendi içinde iyidir, bundan daha fazlası - daha hızlıdır, ancak bazen belirli kusurları olan çıktı dosyaları oluşturur. Bu nedenle, bu dosyalar için video dosyalarını bölmenin ikinci yolu var: oldukça yavaş, çıktı dosyaları daha büyük, ama her zaman kullanılan girdi dosyaları ile aynı kalitede duruyorlar.

1. Yol:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

Yol 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start>- Bir video ffmpeg bölümünün başlangıcı kesmektir. Biçim:, 00:00:00.0000saat: dakika: saniye: milisaniye anlamına gelir.

  • <duration>- Bir video ffmpeg bölümünün süresi kesilmesidir. Yukarıdaki ile aynı formatta.

Örnekler:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg, 1 saat 19 dakika 0 saniye sonra başlayan video dosyasının bir bölümünü keser. Video dizisinin kesilme süresi 5 dakika 0 saniyedir.


Tamam, thnx. Belgeleri kontrol edip yarın deneyecek.
juGGaKNot

3
-sameq"aynı kalite" anlamına gelmez ve ffmpeg'den kaldırılmıştır. Yerine -codec copykullanın. Ayrıca, -toseçenek hakkında unutma .
llogan

Oldukça eski oldukları için teklifinizdeki komutları düzelttim. Lütfen düzgün bir şekilde alıntı yapmadan bilgileri kopyala-yapıştır kullanmayın.
slhck

-1

Bunu kullanabilirsin

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

Burada videonun süresini vermelisin. yani. 00: 25: 33-00: 09: 23


1
Diğer cevabında da bahsettiğim gibi: Komutunuzla, kesinlikle gerekli olmayan ve düşük kalite ve daha yüksek işlem süresiyle sonuçlanan dosyayı yeniden kodluyorsunuz.
slhck

-2

Ffmpef ile video kesmek için aşağıdaki sözdizimini kullanıyorum:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t, süreyi saniye cinsinden ayarlamak için kullanılır - bitiş saatini belirtemezsiniz, ancak bunun sizin için çalışması gerekir.


1
Neden FFmpeg'i dosyayı yeniden kodlayacak şekilde ayarlıyorsunuz? Bunun -sameq"aynı kalite" anlamına gelmediğine dikkat edin.
slhck
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.