FFMPEG mengkonversi flv ke mp4 tanpa kehilangan kualitas [duplikat]

55

Pertanyaan ini sudah ada jawabannya di sini:

Saat ini saya mengonversi file flash .flv ke file .webm dan .mp4 untuk digunakan dengan pemutar video HTML5.

_

Saya menggunakan perintah ffmpeg ini untuk WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm yang berfungsi dengan baik dan ukuran file tetap relatif sama (penting).

_

Untuk MP4, saya menggunakan yang berikut ini: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Konversi ke .mp4 baik dan mencegah kehilangan kualitas tetapi ukuran file hampir tiga kali lipat.

Formula ffmpeg apa yang dapat digunakan untuk mengkonversi ke MP4 tanpa kehilangan kualitas terlalu banyak dan mencegah ukuran file yang jauh lebih tinggi?

Chad Whitaker
sumber

Jawaban:

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

Anda harus menentukan codec video yang digunakan. Dalam perintah Anda, Anda tidak menentukan -vcodecatau -c:vffmpeg menggunakan codec default untuk MP4 ( mpeg4) yang tidak memiliki efisiensi kompresi yang sangat baik. Coba gunakan libx264 sebagai gantinya dan atur CRF, yang merupakan tingkat kualitas (lebih rendah lebih baik, default adalah 23, dan nilai-nilai waras adalah antara 18 dan 28).

Pengkodean dengan libx264 agak rumit, jadi Anda harus mencari panduan pengodean H.264 .

Anda juga perlu menentukan, -strict experimentaljika tidak, Anda akan mendapatkan: "Encoder 'aac' adalah eksperimental tetapi codec eksperimental tidak diaktifkan, tambahkan '-strict -2' jika Anda ingin menggunakannya."

sashoalm
sumber
1
Ini membutuhkan banyak waktu dan mp4 yang dihasilkan sangat terdistorsi, piksel hilang, dll. Ada ide mengapa bisa begitu? : /
trainoasis
Codec video default untuk format mp4 belum tentu mpeg4. Menurut output dari ffmpeg --help muxer=mp4pada mesin saya, ffmpeg menggunakan h264 sebagai codec video standar mp4.
doubleDown
1
@doubleDown Jawaban saya sudah lama - sejak 2011. Mereka mungkin mengubah default di beberapa titik sejak saat itu.
sashoalm
43

Perintah ini hanya mengubah wadah tanpa memasukkan kembali

ffmpeg -i input.flv -codec copy output.mp4
c97
sumber
apakah Anda tahu cara membuat skrip untuk konversi banyak video dalam folder yang sama?
totoine
ya, di windows buat file convert.bat dan masukkan kode ini di dalamnya for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4"
:,
1
Bagi saya lemparan ini Tidak dapat menulis tajuk untuk file keluaran # 0 (parameter codec salah?): Argumen tidak valid. Ada ide? : /
trainoasis
2
@trainoasis .flv Anda tidak mengandung video H.264 dan audio AAC. Menyalin data audio / video yang tidak tersentuh -codec copyke file .mp4 hanya berfungsi dalam kasus yang sangat jarang di mana audio dan video sudah dikodekan dengan H.264 dan AAC. Lihat superuser.com/a/1009539/390946 dan addpipe.com/blog/flv-to-mp4 .
Octavian Naicu
3

avconvdan ffmpegpada dasarnya hal yang sama. [pada SANGAT baru-baru ini ada BEBERAPA divergensi, tetapi tidak terlalu banyak untuk ditulis di rumah jika Anda mengkompilasi sendiri ffmpeg[yang disediakan di repo Ubuntu misalnya TUA dan menderita ukuran video itu bukan kesepakatan bla bla bla [pada dasarnya mencoba untuk memberi tahu Anda video memiliki proporsi yang salah], tetapi jika Anda repot-repot membaca ffmpegpanduan kompilasi dan mengkompilasinya dari git, ia tidak memiliki masalah dengan versi lama yang tersedia di sebagian besar OS. peringatan penyusutan yang dimaksud avconvmemberi tahu Anda bahwa mereka telah membuat util yang lebih baru untuk mencoba dan mengganti ffmpeg, TETAPI itu SANGAT digunakan secara luas, bahkan jika mereka mencoba menghentikannya, kita semua akan membuat softlink dari avconvkeffmpeg Bagaimanapun juga mereka tidak akan berhenti bekerja dan menjatuhkannya.]]

Ini bukan hal yang buruk untuk digunakan avconv, saya hanya melihat satu jawaban yang menyebutkan peringatan penyusutan yang pada dasarnya merupakan pesan kosong harus lebih dari alternatif ffpmeg Anda dapat mencoba avconv yang lebih benar dengan kasus di sini.

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

benar-benar SAMA sebagai

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

pada dasarnya di pertama Anda menggunakan pilihan tangan pendek dan yang kedua adalah variasi yang lebih ditulis.

JUGA -map 0mengacu pada trek audio jadi jika menggunakan sesuatu seperti mp4ayang dapat menangani trek multi-audio baik-baik saja Anda dapat meninggalkan ini untuk menyalin semua aliran audio ke file yang dihasilkan. Ini hanya diperlukan jika menggunakan codec yang tidak mendukung banyak trek audio dalam file yang sama maka Anda ingin memetakan audio yang dibutuhkan dan tidak semua. Tentu saja jika mencoba meminimalkan ruang yang digunakan, Anda dapat menentukan hanya satu untuk mencoba dan mengetuk sedikit ukuran file [audio seperti mungkin 1/3 ukuran trek video [dan itu murah hati]].

-c:v = codec(video)jadi: -c:v libx264sama dengan menggunakan: -vcodec libx264FYI; sama dengan contoh ini:-c:v copy = -vcodec copy

dan lebih jauh lagi untuk FLV, berhati-hatilah, file flv sama dengan avi karena itu adalah wadah yang dapat berisi sejumlah codec untuk video atau audio. Pertama-tama Anda ingin menggunakan utilitas inspeksi media pilihan untuk melihat apa yang digunakan dalam file itu sendiri sebelum Anda memilih untuk hanya menyalin video dan / atau aliran audio atau jika Anda ingin mentransmisikannya dari apa pun itu ke sesuatu yang baru. Jadi perintah yang bekerja paling baik untuk satu FLV mungkin tidak sama untuk FLV lain [tentu saja BIASANYA jika mendapatkan beberapa FLV dari sumber yang sama mereka akan dikodekan dengan cara yang sama tetapi itu tidak pernah menjadi jaminan].

Tidak mencoba untuk mengambil hanya berlari di ini dalam pencarian web dan ingin mencoba untuk membantu memperjelas hal-hal untuk orang-orang.

Sekali lagi karena jawaban ini menyatakan untuk jawaban di bawah ini, YA yang menjalankan ffmpeg akan selalu memposting pesan itu pada dasarnya kosong karena 2 utilitas ini masih merupakan utilitas yang sama dengan perbedaan yang sangat kecil. Anda harus dalam hampir semua kasus mendapatkan hasil yang sama persis menggunakan salah satu perintah. Ini belum tentu menghasilkan trans-kode ulang lengkap, mengapa? A, jika tidak diperlukan menghemat banyak waktu, dan B jika Anda mentranskode ulang file itu sudah dikompresi ke dalam codec video Anda pada dasarnya menjalankan rutin kompresi terhadap sesuatu yang sudah dikompresi dan akan selalu menghasilkan dalam kualitas kurang dari sumbernya. Kebanyakan codec yang lebih baru agak kompatibel lintas [tidak semua] seperti misalnya flv secara teknis bisa menjadi MP4 dalam pembungkus FLV karena FLVs seperti AVI hanyalah wadah dari codec lain. Begitu, itu tergantung pada apa yang dimiliki flv sumber untuk video dan codec ausio dibandingkan dengan apa yang Anda ubah, apakah perlu ditranskode sama sekali. Jika dalam FLV mereka menggunakan video H264 MP4 dan MP4a untuk audio Anda tidak perlu trans-transkrip hal yang hanya perlu Anda salin dan sesuaikan header file sehingga dibaca sebagai MP4 yang benar dan bukan video MP4. di dalam file FLV.

Paria
sumber
3

Menurut panduan ini , perintah yang tepat untuk mengonversi FLV ke MP4 tanpa pengodean ulang AV adalah sebagai berikut:

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

Ini berfungsi dengan baik untuk saya dalam semua kasus dengan video AVC dan audio AAC atau MP3.

Kepp Al
sumber
-1

Saat menggunakan ffmpeg saya mendapat peringatan penghentian untuk menggunakan avconv. Menggunakan avconv saya mendapat hasil yang bagus:

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

Baca man avconvuntuk informasi lebih lanjut.

gare_c
sumber
1
ffmpegitu sendiri tidak ditinggalkan . Alasannya terlihat bagus adalah karena Anda menentukan encoder x264 yang memiliki pengaturan standar yang bagus untuk kualitas.
slhck
-2

Saya sarankan Anda membuat skrip shell untuk yang dipanggil video_flv_to_mp4dengan konten berikut:

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

Kemudian jalankan seperti ini:

$ video_flv_to_mp4 video.flv

Ini akan memberi Anda file video.flv.mp4.

Thibault
sumber
4
-sameqbukan pilihan yang valid untuk ffmpeg lagi. Itu juga tidak berarti "kualitas yang sama". Lihat juga posting ini .
slhck