FFMPEG kalitesini kaybetmeden flv'yi mp4'e çevirir [kopya]


55

Bu sorunun zaten burada bir cevabı var:

Şu anda bir HTML5 video oynatıcı ile kullanılmak üzere .flv flash dosyalarını .webm ve .mp4 dosyalarına dönüştürüyorum.

_

Bu ffmpeg komutunu WEBM için kullanıyorum: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm bu harika çalışıyor ve dosya boyutu nispeten aynı (önemsiz) kalıyor .

_

MP4 için aşağıdakileri kullanıyorum: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

.Mp4 para cezasına dönüştürülür ve kalite kaybını önler ancak dosya boyutu neredeyse üçe katlanır.

Çok fazla kalite kaybetmeden ve daha yüksek dosya boyutunu engellemeden MP4'e dönüştürmek için hangi ffmpeg formülü kullanılabilir?

Yanıtlar:


57
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

Kullanılan video kodeğini belirtmelisiniz. Komutunuzda belirtmezsiniz -vcodecya da -c:vffmpeg MP4 ( mpeg4) için varsayılan codec bileşenini kullanır ve bu da çok iyi bir sıkıştırma verimine sahip değildir. Bunun yerine libx264'ü kullanmayı ve kalite seviyesi olan CRF'yi ayarlamayı deneyin (düşük iyidir, varsayılan değer 23'tür ve mantık değerleri 18 ile 28 arasındadır).

Libx264 ile kodlama biraz karmaşıktır, bu nedenle H.264 kodlama kılavuzuna bakmalısınız .

Ayrıca -strict experimentalaksi takdirde alabileceğinizi de belirtmeniz gerekir : "'aac' kodlayıcısı deneysel ancak deneysel kodlayıcılar etkin değil, kullanmak istiyorsanız '-strict -2' komutunu ekleyin."


1
Bu çok zaman alıyor ve sonuçta çıkan mp4 çok bozuk, pikseller kayboldu vb. : /
trainoasis

Mp4 formatı için varsayılan video kodeği mutlaka değildir mpeg4. ffmpeg --help muxer=mp4Makinemin çıkışına göre , ffmpeg, mp4'ün varsayılan video kodlayıcısı olarak h264'ü kullanıyor.
doubleDown

1
@doubleDown Cevabım eski - 2011'den beri. Muhtemelen o zamandan beri bir noktada varsayılanları değiştirdiler.
sashoalm

43

Bu komut sadece kabı yeniden kodlamadan değiştirir

ffmpeg -i input.flv -codec copy output.mp4

Aynı klasördeki birçok videonun toplu dönüştürülmesi için bir komut dosyası yapmanın bir yolunu biliyor musunuz?
ttoine

evet, Windows'ta convert.bat dosyasını oluşturun ve içine şu kodu yazın:, for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4"daha sonra * .flv dosyalarının bulunduğu klasörde convert.bat
komutunu

1
Benim için bu atıyor # 0 çıkış dosyası için başlık yazılamadı (yanlış kodlayıcı parametreleri?): Geçersiz değişken. Herhangi bir fikir? : /
trainoasis

2
@ trainoasis .flv'niz H.264 video ve AAC ses içermiyor. -codec copyBir .mp4 dosyasına dokunulmamış ses / video verilerinin kopyalanması yalnızca, ses ve videonun H.264 ve AAC ile zaten kodlanmış olduğu çok nadir durumlarda çalışır . Bkz superuser.com/a/1009539/390946 ve addpipe.com/blog/flv-to-mp4 .
Octavian Naicu

3

avconvve ffmpegaslında aynı şeydir. [ÇOK yakın zamanda BAZI bir sapma var, ancak kendi derlemenizi yaparsanız ev hakkında yazmak için çok fazla bir şey yok ffmpeg[örneğin, Ubuntu depolarında sağlananlar eskidir ve bu video boyutundan muzdariptir. videonun yanlış oranları olduğunu söylemek için], ancak ffmpegderleme kılavuzunu okumak ve git'ten derlemek için uğraşıyorsanız, çoğu işletim sisteminde stokta bulunan eski sürümlerin hiçbir sorununa sahip değildir. atıfta amortisman uyarı avconvdenemek ve yerine yeni bir util oluşturduk belirten edilir ffmpeg, ama öyle SO yoğun onlar gelen sembolik bağlantıları yaratarak tüm olacağını onu kesmeye çalıştı bile, kullanılan avconviçinffmpeg Zaten çalışmayı bırakmayacaklar ve bırakmayacaklar.]]

Kullanması kötü bir şey değil avconv, sadece boş bir mesaj olan ve aslında bu durumda daha uygun olan avconv'u deneyebileceğiniz ffpmeg'e alternatif olması gereken, boş bir mesaj olan amortisman uyarısından bahseden bir cevabı gördüm.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

gerçekten aynı

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

aslında ilkinde daha kısa elli seçenekleri kullanıyorsunuz, ikincisi ise daha çok yazılı olan çeşitlilik.

ALSO -map 0ses parçalarına atıfta bulunuyor, bu yüzden eğer mp4açok iyi ses parçalarını idare edebilecek bir şey kullanıyorsanız , sonuçta tüm ses akışlarını kopyalamak için bunu bırakabilirsiniz. Bu, yalnızca aynı dosyadaki birden fazla ses parçasını desteklemeyen bir codec bileşeni kullanıyorsanız, o zaman gerekli sesi eşlemek istemezsiniz, hepsini değil. Elbette, kullanılan alanı en aza indirmeye çalışıyorsanız, dosyadan biraz büyüklüğünde bir denemek ve vurmak için sadece bir tane belirtebilirsiniz [ses belki video parçasının 1 / 3'ü kadardır [ve bu cömert hale gelir]].

-c:v = codec(video)yani: -c:v libx264kullanarak aynıdır: -vcodec libx264FYI; bu örnekle aynı:-c:v copy = -vcodec copy

ve ayrıca FLV'ler için dikkatli olun, flv dosyası, video veya ses için herhangi bir sayıda codec bileşenini içerebilen bir kap olduğu için bir avi ile aynıdır. Yalnızca video ve / veya ses akışını kopyalamayı seçmeden önce ya da yeni bir şeye dönüştürmek isteyip istemediğinize karar vermeden önce, dosyanın kendisinde ne kullanıldığını görmek için ilk önce tercih edilen medya inceleme yardımcı programını kullanmak istersiniz. Bu nedenle, bir FLV için en iyi şekilde çalışan komut, başka bir FLV için aynı olmayabilir (tabii ki genellikle aynı kaynaktan birden fazla FLV alıyorsa, aynı şekilde kodlanacaktır, ancak bu asla bir garanti değildir).

Nit nitelemeyi denememek, sadece web aramada karşımıza çıktı ve insanlar için işleri biraz netleştirmeye yardım etmek istedi.

Yine bu cevabın altındaki cevabı işaret ettiği için, bir ffmpeg çalıştıran YES her zaman bu mesajı gönderecektir, çünkü bu iki dosya aslında hala çok az bir farkla aynı kullanımlardır. Hemen hemen her durumda, her iki komutu kullanarak da aynı sonuçları elde etmeniz gerekir. Bu mutlaka tam bir yeniden kodlamaya neden olmayacak, neden? A, gerekmediği takdirde zamandan tasarruf sağlar ve B bir video kod çözücüsüne sıkıştırılmış bir dosyayı yeniden dönüştürürseniz, esasen zaten sıkıştırılmış olan bir şeye karşı bir sıkıştırma yordamı çalıştırıyorsunuzdur. kaynaktan daha az kalitede. Çoğu yeni kodek, örneğin bir flv gibi teknik olarak bir FLV sargısı içinde bir MP4 olabilir, çünkü AVI'ler gibi FLV'ler diğer kodeklerin kapları olduğundan, hepsi birbiriyle çapraz uyumludur. Yani, bu, videonun ve ausio codec kaynağının, dönüştürdüğünüz şeye göre dönüştürülmesi gerekip gerekmediğine bağlı olarak neye sahip olduğuna bağlıdır. FLV içinde H264 MP4 video ve ses için MP4a kullandılarsa, kopyalamak ve dosya başlıklarını ayarlamak için ihtiyacınız olan şeyi yeniden dönüştürmeniz gerekmez; böylece MP4 video yerine gerçek bir MP4 olarak okunur. bir FLV dosyasının içinde.


3

Bu kılavuza göre , herhangi bir AV kodlama olmadan FLV'yi MP4'e dönüştürmek için uygun komut şudur:

ffmpeg -i input.flv -c copy -copyts output.mp4

AVC video ve AAC veya MP3 ses ile her durumda benim için mükemmel çalıştı.


-1

Ffmpeg kullanırken avconv kullanmak için kullanımdan kaldırma uyarısı aldım. Avconv kullanarak güzel sonuçlar aldım:

avconv -i inputfile.flv -map 0 -c: v libx264 -c: bir çıktı outputfile.mp4

man avconvDaha fazla bilgi için okuyun .


1
ffmpegkendisi itiraz edilmemiştir . İyi görünmesinin nedeni, kalite için iyi varsayılan ayarlara sahip olan x264 kodlayıcıyı belirlemenizdir.
slhck

-2

video_flv_to_mp4Aşağıdaki içerikle çağrılanlar için bir kabuk betiği oluşturmanızı öneririm :

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

Öyleyse şöyle yap:

$ video_flv_to_mp4 video.flv

Size bir video.flv.mp4 dosyası verecektir.


4
-sameqartık ffmpeg için geçerli bir seçenek değil. Aynı zamanda "aynı kalite" anlamına gelmez. Ayrıca bu yazıya bakınız .
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.