Medyalarla çalışmak genellikle bit hızı veya çözünürlük gibi medya dosyalarının özelliklerini değiştirmeyi gerektirir. Başlamak için basit bir yol bulmak oldukça korkutucu olabilir. Bu sayfada, kullanılan araçlar ve bunların nasıl hızlı bir şekilde kurulacağı hakkında bilgi edineceksiniz.
Öncelikle, yaygın olarak kullanılan iki komut satırı medya yardımcı programının (Shaka Packager ve FFmpeg) temel kullanımını açıklayacağız. Ardından, araçları hızla yüklemenize yardımcı olacağız. Neden iki başvuruyu kapsamalısınız? Her ikisi de kendi başlarına güçlü ve yararlı olsalar da, medyayı web için hazırlamak için gerekli her şeye sahip değildir. Ayrıca, bu iki uygulamayla ilgili daha birçok yaygın işlem gösteren Medya dönüştürme ve Medya şifreleme sayfaları oluşturduk.
Bu uygulamalar dosya manipülasyonu görevleri için kullanılabilecek tek seçenek olmasa da en yaygın ve en güçlü uygulamalar arasındadır. Diğer seçenekler Miro, HandBrake ve VLC GUI uygulamalarını içerir. Zencoder, Amazon Elastic Encoder ve Google Transcoder API gibi kodlama/kod dönüştürme hizmetleri de mevcuttur.
Shaka Paketleyici
Shaka Packager, ücretsiz bir medya paketleme SDK'sıdır. Sitenizde bir medya oynatıcı kullanıyorsanız dosyaları hazırlamak için Shaka Packager'ı kullanırsınız. En yaygın iki video akışı protokolü için dönüştürmeyi destekler: HTTP üzerinden Dinamik Uyarlanabilir Akış (DASH) veya HTTP Canlı Akışı (HLS). Shaka Packager, ortak şifreleme ve Widevine dijital hak yönetimi (DRM) gibi temel güvenlik özelliklerini destekler. Ayrıca canlı yayın ve seç-izle video yayınlarını da yönetebilir.
Pakette ne yazsa da bu yardımcı program C++ geliştiricilerinden daha fazlası içindir. Bunu hem medya yazılımı oluşturmak için bir kitaplık hem de medya dosyalarını web’de oynatma için hazırlarken komut satırı yardımcı programı olarak kullanabilirsiniz. Bu kapasitenin bizim için yararlı olanı bu. Aslında web medyası oluşturucuları için bazı görevleri pahalı ticari uygulamalara para harcamadan gerçekleştirmenin tek yolu Shaaka Packager'dır.
Shaka Packager komutunun temel kalıbı şöyledir:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
packager -help
yazdığınızda bunu görmezsiniz. Bu örneğe dayandırmak daha kolaydır ve Shaka Packager belgelerindeki örnekleri yansıtmaktadır. Kalıpta birden fazla stream_descriptor
öğesi olduğunu unutmayın. Bunu göstermesek de bir dosyanın video ve ses akışlarını tek bir komutla ayrı ayrı değiştirebilirsiniz.
Bu temel kalıbı, dosya özelliklerini gösteren basit bir kullanımla karşılaştırın. Örnekte, eş değer kısımları hizaladık.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Komutun çıktısı şudur:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
Medya dosyasıyla ilgili temel bilgiler bölümünde bahsedilen özellikleri arayın ve birkaç şeye dikkat edin. Yükseklik ve genişlik, full HD için doğrudur. Ses ve video codec'leri, kapsayıcı türleri için tercih edilen codec'ler, ses için AAC ve video için H264'tür. Akışların sayılarla tanımlandığına da dikkat edin. Bunlar, sesi ve videoyu ayrı olarak işleyen işlemler için yararlıdır.
Yukarıdaki çıkışın bit hızını göstermediğine dikkat edin. Bu çıktı, eksik olsa da okunması daha kolay olduğundan mümkün oldukça bu çıktıyı kullanıyoruz. Shaka Packager'ın alamayacağı bilgilere (bit hızı gibi) ihtiyaç duyduğumuzda FFmpeg kullanıyoruz.
FFmpeg
FFmpeg aynı zamanda medya dosyalarını kaydetmek, dönüştürmek ve akışı gerçekleştirmek için de ücretsiz bir uygulamadır. Özellikleri Shaka Packager'ınkinden daha iyi veya daha kötü değil. Ancak birbirlerinden farklılar.
Bir FFmpeg komutu için temel kalıp şöyle görünür:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Shaka Packager gibi bu uygulama da birden fazla akışı işleyebilir. Bazı seçenekler birden fazla konumda kullanılır ve komutta bulundukları yere bağlı olarak dosya çıkışını farklı şekillerde etkiler. Stack Overflow'daki FFmpeg sorularına ve benzer sitelere bakarken bunu göz önünde bulundurun.
Yine temel kalıbı, dosya özelliklerini görüntülemeye ilişkin örnekle karşılaştıracağız.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
İstediğimiz bilgilere ek olarak, bu işlem aşağıdaki örnekte gösterildiği gibi bir hata mesajı da yazdırır. Çünkü bunun teknik olarak FFmpeg kullanımı yanlıştır. Bu URL'yi, önemsediğimiz bilgileri görüntülediği için kullanıyoruz.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Docker ile uygulama yükleme
Talimatları izleyip komutlarımızı denemeyi planlıyorsanız gerekli araçları manuel olarak yükleyebilir veya kolay yoldan ilerleyip Docker'ı kullanabilirsiniz. Çok zaman kazandıracağı için Docker'ı kullanmanızı öneririz. Üstelik, hızlı bir şekilde kurulum yapmanız için gerekli talimatları da sağladık.
Bilgisayarınızda bir yerde
media-tools
adlı yeni bir dizin oluşturarak başlayın. İstediğiniz adı kullanabilirsiniz. Aşağıdaki talimatlarda, dizin adı olarakmedia-tools
kullandığınızı varsaymanız yeterlidir.media-tools
içinde birdocker
vemedia
dizini oluşturun. Bu işlem,media
dizininizi derleme bağlamının dışında tutar. Bu önemli çünkümedia
, üzerinde işlem yapmayı planladığımız dosyaların depolandığı yerdir ve dosyalardan bazıları oldukça büyük olabilir.Dockerfile
öğesini doğrudanmedia-tools
içine yerleştirmek, daha sonra yeniden inşa etmeniz halinde, belki de yüklü sürümleri değiştirmek için görüntü oluşturma işlemini yavaşlatır./media-tools/docker/Dockerfile
oluşturun ve aşağıdaki derleme talimatlarını ekleyin:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
Görüntüyü oluşturun:
docker build -t media-tools ./docker
Görüntüyü etkileşimli bir kabuk olarak çalıştırın. Linux'ta:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
Windows'da:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Görüntüyü çalıştırırken hem FFmpeg hem de Shaka Packager
sürümünü kontrol ederek ffmpeg -version
ve packager --version
çalıştırılarak her şeyin başarılı olduğunu doğrulayabilirsiniz. Çıkış şu şekilde görünmelidir:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
Artık Shaka Packager ve FFmpeg'i kullanmayı denediğinize göre, Medya akışıyla ilgili temel bilgiler başlıklı adımdaki temel kavramları öğrenmeye devam edebilirsiniz.