2015-10-20 30 views
13

Uygulamamdaki kameradan bir video kaydettim ve cihaz depolama alanına kaydettim.Şimdi videoyu backwards.i.e'den oynayacağı şekilde tersine çevirmek istiyorum. Eğer video 10 saniyeden fazlaysa, o zaman 10. saniyedeki son kare ilk kare olur ve oradan ilk saniye ilk kareye kadar oynatılır. Tersine çevrilmiş videoyu bir dosyaya kaydetmek istiyorum.Nasıl devam etmeliyim?Android'de ters video

+0

onay bu makalede onun http://andrey.chernih.me/2014/06/28/video-recording-and-processing-in-android/ –

+0

@MohanadKholy gerçekten yararlı onun gud makale. . ama videoyu tersine çevirmenin yolunu bulamadım? –

+0

bu android ile ilgili değil video tersine çevirebilir videolibrary ile ilgili bir şey – raj

cevap

1

Videoyu ters çevirmek için ffmpeg kullanmam için bana bir fikir verdiği için Mick'e teşekkür ederiz.

here adresindeki blog gönderiminde ffmpeg kullanarak diğer video düzenleme işlemlerini gerçekleştirirken videoyu tersine çevirmek için github numaralı telefona kodu gönderdim. ffmpeg için ters görüntü komutu uzun süre çalışmaz çünkü

benim blog yazısı ile yazılmış gibi

, videoyu ters İçin

, önce 10 saniye veya daha az süresi segmentler halinde videoyu bölmek gerekir Cihazınız 32 GB RAM değerine sahip değilse. Bu nedenle

, 10 saniye veya daha kısa bir süre ile parça halinde bir video-

1.Divide ters video için. segmentli videolar

2.Reverse

3.Concatenate ters bölümlenmiş video ters.Biz komutu vardır:

String [] complexCommand = { "-i", inputFileAbsolutePath aşağıya kullanabilir 6 saniye sürecek olan segmentler halinde bir video bölünmesi için

"-c: v", "libx264 "," -crf "," 22 "," -map "," 0 "," -segment_time "," 6 "," -g "," 9 ", " -sc_threshold "," 0 "," - force_key_frames "," expr: gte (t, n_forced * 6) ", " -f "," segment ", outputFileAbsolutePath}; İşte

,

-c: v libx264

tüm video libx264

-crf

sabit kalite modu için kaliteyi ayarlayın ile akışları kodlar.

-segment_time

-g videonun her segmentin

GOP boyutu

-sc_threshold

grubu sahne değişimi eşik zamanı.

-force_key_frames İfade: GTE (t, n_forced * n) bir video segmentlere sonra animasyon karesi n saniyede

zorlamak

, biz çalıştırmak için gereken parçalara ayrılmış videos.For ters gerek Her bir bölümlendirilmiş video dosyasının geri çevrileceği döngü.

biz [] = { "-i", inputFileAbsolutePath, "-vf", "geri" komutu vardır:

dizi komut altında kullanabilir (kendi ses çıkarmadan) ses ile bir video tersine çevirmek için "-af", "areverse", outputFileAbsolutePath};

ses biz

komutu vardır: aşağıdaki dize komutunu kullanarak kendi ses çıkarma [] = { "-i", inputFileAbsolutePath, "-bir" "-vf" ile bir video tersine çevirmek için, "reverse", outputFileAbsolutePath};

biz komutu vardır:

dizi komut altında kullanabilir ses olmayan bir ters video için, [] = { "-i", inputFileAbsolutePath, "-vf", outputFileAbsolutePath "geri"};

parçalı videoları ters sonra biz Arrays.sort (dosyalarını kullanarak son düzenleme dosyanın esasına videoları sıralamak ters order.For içinde segmentli videoları, LastModifiedFileComparator tersine bitiştirmek gerekir.LASTMODIFIED_REVERSE).

Ardından (ses) aşağıda komutu vardır:

dize komutu [] = { "-i", inputFile1AbsolutePath kullanabilirsiniz parçalı videoları ters bitiştirmek "- i" inputFile2AbsolutePath . ...., "- i", inputFileNAbsolutePath, "- filter_complex", "[0: v0] [0: a0] [1: v1] [1: a1] ... [N: vN] concat = n = N: v, 1 = a = 1 [v] [a] - "[v]", bir "harita" -, outputFileAbsolutePath} "[a]", bir "harita";

birleştirmek için bölümlere ayrılmış videolar (ses olmadan) aşağıdaki 012'yi kullanabilirizkomutu vardır:

dizi komut [] = { "-i", inputFile1AbsolutePath, "- ı", inputFile2AbsolutePath ..... "- i" inputFileNAbsolutePath "- filter_complex", "[0 : 0] [1: 0] [2: 0] ... [N: 0] concat = n = N: v = 1: a = 0 ", çıktıFileAbsolutePath}; İşte

,

-filter_complex [0: v0] [0: a0] [1: v1] [1: a1] ... [N: vN] concat filtreye göndermeye akışları neyi ffmpeg söyler. Yukarıdaki durumda, 0 girişinden 0 [0: v0] ve ses akışı 0 [0: a0], video akışı 1 [1: v1] ve ses akışı 1 [1: v1] giriş 1'den ve böylece üzerinde.

concat filtre other.The filtreden sonra birlikte aşağıdaki seçenekleri birini bunları kabul eder katılmadan, ses ve video akışlarını bitiştirmek için kullanılır:

n

segment sayısını ayarlayın. Standart

v

2.

olan çıkış video akışlarının sayısı, bu da, her segmentte video akımlarının sayısı ayarlayın. Standart 1.

bir

çıkış ses akımı sayısı, bu da, her segmentte ses akımı sayısı olduğu ayarlayın. Standart 0.

+0

Eğer bu çözümün performansı sorabilir. Çünkü son kez android üzerinde ffmpeg ile çalışıyorum, performans harika değil. Bulabildiğim tüm optimizasyonlarda bile 15 saniyelik bir video oynatmak iyi bir 50 saniye sürecektir. –

+0

@ vxh.viet Videoyu tersine çevirme işlemi biraz zaman alır. Frekans, sürece belirli hızlar sağlayan seçeneklerin toplanması olan belirli hazır ayarları sağlar. Utrafast preset işlemin hızlandırılması için özellikle yararlıdır. Preset kullanmak için sadece “-preset”, “ultrafast” komutunu ekleyin. Lütfen buraya bakın (https://trac.ffmpeg.org/wiki/Encode/H .264) bir ön ayarın seçilmesiyle ilgili ayrıntılı açıklama için.Ayrıca, sabrınız olan en yavaş önayarı kullanmanız önerilir. –

6

Eğer bu yaklaşımı kullanabilirsiniz ffmpeg kullanmak hazırsanız - aslında çerçeveler halinde videoyu kırar ve sonra ters sırada tekrar inşa:

birkaç yolu vardır Android'de ffmpeg kullanmak ama 'sarıcı' yaklaşımı, makul bir performans ve kullanım kolaylığı karışımı bulduğum bir yaklaşım. Bazı örnek Android ffmpeg sarıcı:

Bu zaman alıcı bir Cep üzerinde olacağı bilinciyle değer - Bir yüklemek için güçlü olmak lüks varsa sunucu ve orada tersine çevirme yapmak daha hızlı olabilir.

+0

Önceden bu videoyu kullanıyorum. Com.github.hiteshsondhi88.libffmpeg: FFmpegAndroid: 0.2.5 '' video ovalama için kullanıyorum.Videoyu tersine çevirmek için bu bağımlılıkla devam etmeli miyim? –

+0

Sarmalayıcı yaklaşımı ile ilgili teoride, eğer bir komut çalışıyorsa, herhangi bir komut çalışmalıdır, ancak ffmpeg'in bu şekilde sarılmak üzere tasarlanmadığını hatırlamakta fayda var, bu yüzden test yapmadan% 100 emin olabileceğinizi düşünmüyorum. Eğer ovalama için sizin için işe yararsa, yine orada da işe yarayacak çok iyi bir olasılık olduğu için ben de orada başlayacağım. Farkında olmak için bir şey - ses gerekiyorsa da (bazı nedenlerle ...) Daha sonra yukarıdaki yaklaşım ayrı bir yardımcı program olan 'sox' kullanır. Yukarıdaki koruyucu bağlantı, kişisel olarak kullanmadığım halde, sox'u içerir. – Mick

+0

teşekkürler ... Android projemde sox yardımcı programını nasıl entegre edebilirim? –