FFMPEG Memisahkan MP4 dengan Kualitas yang Sama

51

Saya punya satu file MP4 besar. Saya mencoba untuk membaginya menjadi file yang lebih kecil.

ffmpeg -i largefile.mp4 -sameq -ss 00:00:00 -t 00:50:00 smallfile.mp4

Saya pikir menggunakan -sameq akan mempertahankan pengaturan kualitas yang sama. Namun, saya tidak boleh mengerti apa yang dilakukannya.

Saya mencari untuk menjaga kualitas yang sama (audio / video) dan kompresi dengan file yang dipisah. Namun, pengaturan ini membuat file split jauh lebih besar.

Tanda apa yang harus saya atur agar kualitas dan atribut yang sama di file yang dipisah tetap mempertahankan rasio kualitas dan ukuran yang sama?

Sebagai contoh jika file asli saya adalah sekitar 12 GB dan 1920x1080 dengan bitrate 10617kbps dan framerate 23 frame / detik dan 6 channel audio dengan 317kbps, saya ingin file split menjadi sama hanya sepertiga dari ukuran ini ( jika saya membaginya menjadi tiga bagian).

Chris Weber
sumber
3
FYI untuk siapa pun yang membaca ini: Jangan gunakan -sameq, itu tidak berarti "kualitas yang sama" .
Zaz

Jawaban:

81

Jika Anda ingin membagi video tanpa melakukan pengodean ulang, gunakan copycodec untuk audio dan video. Coba ini:

ffmpeg -ss 00:00:00 -t 00:50:00 -i largefile.mp4 -acodec copy \
-vcodec copy smallfile.mp4

Perhatikan bahwa ini hanya membuat pemisahan pertama. Yang berikutnya dapat dilakukan dengan perintah yang dimulai dengan ffmpeg -ss 00:50:00.

Ini dapat dilakukan dengan satu perintah:

ffmpeg -i largefile.mp4 -t 00:50:00 -c copy smallfile1.mp4 -ss 00:50:00 -c copy smallfile2.mp4

Ini akan membuat smallfile1.mp4, berakhir pada 50 menit menjadi video largefile.mp4, dan smallfile2.mp4, mulai dari 50 menit dan berakhir pada akhir bigfile.mp4.

fideli
sumber
2
Dengan menggunakan metode ini pada file mp4, saya mendapatkan dua detik pertama dari setiap file yang dibuat sebagai bingkai beku (audio diputar secara normal). Adakah alasan yang diketahui untuk ini?
Ron Harlev
Kedengarannya seperti bug. Perbarui ke ffmpeg terbaru.
Robert
@ Robert Saya sudah memperbarui berkali-kali sejak 2010. Terima kasih.
fideli
@RonHarlev Ini adalah perilaku yang diharapkan saat ini. Tanpa pengodean ulang, Anda hanya dapat memotong video di "bingkai kunci". Frame di antara frame kunci tidak membawa cukup informasi sendiri untuk membangun gambar yang lengkap. Lihat: trac.ffmpeg.org/wiki/Seeking#Seekingwhiledoingacodeccopy
Philip Thrasher
3

Cara alternatif untuk melakukannya adalah:

// create a 2-min clip
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:12:00 -c copy output.mp4

/**
* -i  input file
* -ss start time in seconds or in hh:mm:ss
* -to end time in seconds or in hh:mm:ss
* -c codec to use 
*/

Kualitas file tetap sama karena kami gunakan -c copyuntuk menyalin stream audio + video asli ke output.

Referensi, Daftar perintah FFmpeg yang umum digunakan: DigitalFortress

Niket Pathak
sumber