Saya tidak percaya youtube-dl
sendirian akan melakukan apa yang Anda inginkan. Namun Anda dapat menggabungkannya dengan utilitas baris perintah seperti ffmpeg.
Pertama, dapatkan URL aktual menggunakan youtube-dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Salin output dari perintah dan rekatkan sebagai bagian dari -i
parameter dari perintah selanjutnya:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
The -ss
parameter dalam posisi ini negara untuk membuang semua masukan sampai 15 detik ke dalam video. The -t
negara pilihan untuk menangkap selama 10 detik. Sisa perintah memerintahkannya untuk menyimpan sebagai mp4.
ffmpeg adalah alat yang populer dan harus berada di salah satu dari manajer repositori / paket OS yang populer.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
sebenarnya hanya akan mengunduh bagian yang Anda tentukan.sumber
-map 0:v -map 1:a -c:v libx264 -c:a aac
yang dapat meningkatkan kualitas. Saya juga ingin menambahkanyoutube-dl -f bestvideo+bestaudio
untuk memastikan saya mendapatkan versi kualitas tertinggi.Menambah jawaban Johnnie:
Gunakan
youtube-dl -g "URL"
untuk mendapatkan stream video dan audio.Sekarang gunakan:
Anda harus menggunakan
-ss
opsi untuk setiap aliran. Saya juga merekomendasikan melakukannya sekitar 30 detik sebelumnya dan kemudian menggunakan yang lain-ss 30
untuk menghindari kehilangan bingkai kunci. Berikut ini adalah contoh nyata menggunakan salah satu video youtube saya.Video
Keluaran:
Saya ingin memotong dari 43:00 menjadi 50:10 jadi saya akan melakukan
-ss 42:30
(memberi saya beberapa detik untuk menangkap keyframe yang baik) pada kedua input dan kemudian melakukan-ss 30
setelah input untuk memulai pada 43:00.Saya kemudian akan menggunakan
map
untuk memetakan video0:v
dan audio1:a
(0 berarti input pertama, yang merupakan video dan 1 berarti input kedua, yang merupakan audio) dan kemudian pilih opsi pengkodean saya.sumber
-i
bendera ffmpeg dapat mengambil URL. rapi--postprocessor-args
langsung di youtube-dl?Permintaan fitur ini belum diterapkan di youtube-dl. Lihat masalah # 622 dan banyak duplikatnya di github.
sumber
youtube-dl
mendukung melewati argumen ke postprocessor yang mendasarinya (diuji dengan versi 2017.08.27.1):youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Ini pada dasarnya sama dengan melakukan postprocessing dengan
ffmpeg
diri Anda setelah mengunduh file terlebih dahulu.sumber
unable to obtain file audio codec with ffprobe
kesalahan. Tolong bantu saya dengan itu. Saya menggunakan CentOS 7-x
bendera hanya mengunduh audio. Hapus dari perintah jika Anda ingin audio dan video. :)Anda dapat mengunduh dari awal hingga titik tertentu tanpa mengunduh semuanya dan mengedit. Setengah dari pertanyaan ini:
mp4
-F
untuk melihat format yang tersedia, dan pilihmp4
yang memiliki keduanya. misalnya-f18
atau-f22
biasanya ada.Iya. Ini hack .
Pertanyaan selanjutnya: jika Anda menginginkan format video dan audio yang terpisah, dapatkah Anda mengunduh sebagian dari masing-masing secara terpisah (menggunakan
^c
seperti di sini), dan kemudian menggabungkannya secara manual? Saya tidak berpikir itu akan berfungsi untuk beberapa format.sumber
Ini tidak sepenuhnya menjawab pertanyaan OP tetapi ada cara untuk mengunduh aliran dari awal hingga durasi tertentu tanpa harus mengunduh aliran lengkap. Karena YouTube menyediakan dukungan resume, kami dapat meminta konten sebagian menggunakan
Range
header.Kami pertama-tama mengambil URL aliran:
Ini akan menghasilkan dua URL (masing-masing untuk aliran video dan audio).
Sekarang kirim permintaan kepala ke URL pertama (yang terhubung ke aliran video) untuk mengambil total panjang konten dari aliran ini:
Sekarang, kami membagi panjang konten total ini dengan total detik dalam video (video YouTube berdurasi 4 menit dan 7 detik, yaitu 247 detik.) Untuk mendapatkan panjang konten 1 detik:
64380504 / 247 ≈ 260650
Kami mengalikan nilai ini dengan (jumlah detik yang ingin kami ambil dari awal + 1)
(kami menambahkan satu juga kira-kira akun ruang ekstra yang diambil oleh metadata yang ditempatkan di awal aliran)
Misalnya untuk mengambil sekitar 10 detik pertama, Anda harus mengambil
260650 * 11 = 2867150
byte pertama , jadi kami membuat permintaan denganRange
header:Ini seharusnya hanya mengunduh 10 detik pertama. File yang diunduh harus dapat diputar tetapi biarkan FFmpeg memperbaiki metadata yang salah:
Kami juga dapat mengunduh hanya bagian awal audio (URL ke-2) dengan cara yang serupa (panjang konten akan berbeda tetapi total detik akan tetap sama).
Mengunduh bagian tengah dari video juga harus dimungkinkan dengan cara ini, tetapi mungkin akan jauh lebih sulit karena YouTube menempatkan metadata di awal aliran (dalam beberapa byte pertama) dan tanpa kehadirannya di media yang diunduh, streaming tidak akan bermain sama sekali.
EDIT: Ini hanya akan berfungsi pada situs web dengan dukungan resume, katakan YouTube. Ini tidak akan berfungsi untuk situs web lain.
sumber
Gunakan parameter --postprocessor-args untuk meneruskan output audio / video ke ffmpeg untuk diedit (prosesor), jadi perlu ffmpeg diinstal.
--postprocessor-args membutuhkan 3 argumen & nilai (misalnya, ada lebih banyak, periksa halaman manual ffmpeg):
Contoh:
PS: youtube-dl akan mengunduh seluruh media sebelum memprosesnya, dan menghapusnya setelah itu.
sumber