Saya menggunakan ffmpeg untuk memotong bagian dari file besar seperti ini:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
Bagian -ss
berfungsi dengan baik tetapi -t
diabaikan. Itu benar menghapus detik yang ditentukan awal yang ditentukan dengan -ss
tetapi kemudian terus ke akhir input dengan salinan.
Apakah ada cara untuk menggunakan ffmpeg untuk memotong bagian akhir video tanpa mengode ulangnya?
Jawaban:
Anda dapat menggunakan
-ss
opsi untuk menentukan cap waktu mulai, dan-t
opsi untuk menentukan durasi penyandian. Stempel waktu harus dalamHH:MM:SS.xxx
format atau dalam detik (s.msec
).Berikut ini akan klip 30 detik pertama, dan kemudian klip semua yang 10 detik setelah itu:
Perhatikan bahwa
-t
ini adalah opsi keluaran dan selalu harus ditentukan setelahnya-i
.Beberapa tips:
-ss
setelahnya-i
, Anda mendapatkan pencarian yang lebih akurat dengan mengorbankan eksekusi yang lebih lambat. Lihat juga: Mencari dengan FFmpegAnda dapat menggunakan
-to
alih-alih-t
menentukan cap waktu yang ingin Anda potong. Jadi, alih-alih-i <input> -ss 30 -t 10
Anda juga bisa melakukan-i <input> -ss 30 -to 40
untuk mencapai hal yang sama.Jika ffmpeg Anda tidak mendukung
-c
, atau-to
, sepertinya sudah usang. Kompilasi sendiri versi baru atau unduh bangunan statis dari beranda mereka. Benar-benar tidak rumit.sumber
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
menghapus layar hitam awal, lihat jawabannya untuk detail.Seperti yang disebutkan orang lain, menempatkan
-ss
sebelum (lebih cepat) atau setelah (lebih akurat)-i
membuat perbedaan besar. Bagian "Pencarian Cepat Dan Akurat" pada halaman pencarian ffmpeg memberi tahu Anda cara mendapatkan keduanya, dan saya telah menggunakannya, dan itu membuat perbedaan besar. Pada dasarnya Anda meletakkan-ss
sebelum DAN setelah-i
, pastikan untuk meninggalkan cukup waktu sebelum di mana Anda ingin mulai memotong untuk memiliki bingkai kunci lain. Contoh: Jika Anda ingin membuat klip 1 menit, dari 9min0sec hingga 10min 0sec di Video.mp4, Anda bisa melakukannya dengan cepat dan akurat menggunakan:Yang pertama
-ss
berusaha cepat ke (kurang-lebih) 8min0sec, dan yang kedua-ss
mencari secara akurat ke 9min0sec, dan yang-t 00:01:00
mengeluarkan klip 1min0sec.Perhatikan juga poin penting ini dari halaman itu: "Jika Anda menggunakan
-ss
dengan-c:v copy
, bitstream yang dihasilkan mungkin berakhir menjadi berombak, tidak dapat diputar, atau tidak selaras dengan aliran audio, karena ffmpeg dipaksa untuk hanya menggunakan / membagi pada i-frames. "Ini berarti Anda perlu menyandikan ulang video, bahkan jika Anda ingin menyalinnya saja, atau berisiko video itu berombak dan tidak sinkron. Anda bisa mencoba
-c copy
terlebih dahulu, tetapi jika videonya payah Anda harus melakukannya kembali.sumber
-c:a copy
untuk cara pencarian ini.Saya menemukan bahwa
-ss
dikombinasikan dengan-c copy
menghasilkan memotong setengah detik di awal.Untuk menghindari itu, Anda harus menghapus
-c copy
(yang memang akan melakukan transcode).sumber
-c copy
memperbaikinya.MANUAL
Buka file di pemutar media yang akan membingkai demi frame dan memainkan file AVISynth dengan data seperti:
Kemudian potong dengan format waktu EXACT:
dan
Sekarang buat file txt dengan file video dengan konten seperti:
Jalankan ffmpeg:
sumber
Bagi saya
-t
opsi tidak berfungsi, tetapi-vframes
berhasil. Saya lebih suka menggunakan#frames
, karena saya lebih suka memotong di I-Frames dan saya menemukan GOP untuk menggunakan videoffprobe
.Baris perintah yang bekerja untuk saya adalah:
By the way, menempatkan
-ss
di depan-i
membuat perbedaan besar dalam waktu eksekusi.sumber
-vframes
(atau-frames:v
) harus dicari-i
karena ini merupakan opsi keluaran.Seperti halnya user225366, opsi -t tidak berfungsi untuk video pendek, tetapi itu berlaku untuk video yang lebih panjang. Untuk video pendek sepertinya -frame: v lebih baik. Inilah yang bekerja untuk saya.
Salinan -acodec perlu ditambahkan jika video memiliki audio, seperti yang ditunjukkan oleh jawaban lainnya.
sumber
Saya melihat tidak banyak menyebutkan ini (saya bukan ahli jadi mungkin ada tangkapan), tetapi jika file Anda memiliki aliran lain seperti subtitle dan metadata lain seperti bab dan sebagainya, mungkin untuk memotong / memotong dan menjaga semua aliran dengan mengikuti perintah
Dengan
-map 0
Anda mengambil semua aliran dalam file, dan dengan-c copy
Anda menyalin semua itu sebagaimana adanya.Menggunakan
-to
menghilangkan start via-ss
akan memotong video input dari awal hingga 60 detik.Mengotak-atik
map
berguna juga jika Anda ingin hanya stream tertentu yang disimpan dalam cut (mungkin Anda tidak memerlukan semua sumber audio dalam file, atau hanya beberapa subtitle).Saya menggunakan ini ketika saya perlu membagi file MKV besar yang tidak dapat disimpan dalam penyimpanan FAT32.
sumber