Z tego artykułu dowiesz się, jak używać najpopularniejszych poleceń do konwertowania i manipulowania określonymi właściwościami plików multimedialnych. Chociaż staraliśmy się wyświetlać operacje równoważne we wszystkich procedurach, nie wszystkie operacje są możliwe w obu aplikacjach.
W wielu przypadkach polecenia, które pokazujemy, mogą być połączone w jedną komendę w wierszu poleceń i tak właśnie będą używane. Nie ma na przykład nic, co uniemożliwiałoby ustawienie szybkości transmisji bitów pliku wyjściowego w ramach tej samej operacji co konwersja pliku. W tym artykule często przedstawiamy te operacje jako oddzielne polecenia ze względu na przejrzystość.
Konwersja jest realizowana w tych aplikacjach:
Charakterystyka wyświetlania
Zarówno Shaka Packager, jak i FFmpeg mogą służyć do sprawdzania zawartości pliku multimedialnego, a następnie wyświetlania właściwości strumienia. Oba jednak dają różne wyniki dla tych samych mediów.
Cechy korzystające z Shaka Packager
packager input=glocken.mp4 --dump_stream_info
Dane wyjściowe wyglądają tak:
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
Cechy za pomocą FFmpeg
ffmpeg -i glocken.mp4
Dane wyjściowe wyglądają tak:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Demuxowanie (oddzielanie) strumieni audio i wideo
Do konwertowania plików pakiet Shaka wymaga demultipleksowania. Jest to też wymagane do korzystania z ramek mediów.
Demultipleksowanie za pomocą Shaka Packager
MP4
packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
Lub:
packager \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
WebM
packager \
input=myvideo.webm,stream=video,output=myvideo_video.webm \
input=myvideo.webm,stream=audio,output=myvideo_audio.webm
Demultipleksowanie za pomocą FFmpeg
MP4
ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a
WebM
ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm
Połącz strumienie audio i wideo.
W niektórych przypadkach trzeba połączyć dźwięk i obraz w jednym kontenerze. Szczególnie, gdy nie używasz frameworka multimedialnego. FFmpeg radzi sobie z tym całkiem dobrze, ale obecnie nie obsługuje tego narzędzie Shaka Packager.
ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm
Zmiana właściwości
Szybkość transmisji bitów
W przypadku FFmpeg możemy to zrobić podczas konwertowania na format .mp4
lub .webm
.
ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm
Wymiary (rozdzielczość)
ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm
Typ pliku
Narzędzie Shaka Packager nie może przetwarzać plików .mov
, więc nie można go używać do konwertowania plików w tym formacie.
.mov
na .mp4
ffmpeg -i myvideo.mov myvideo.mp4
.mov
na .webm
ffmpeg -i myvideo.mov myvideo.webm
Synchronizacja obrazu i dźwięku
Aby zapewnić synchronizację dźwięku i obrazu podczas odtwarzania, wstaw klatki kluczowe.
ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm
MP4/H.264
ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4
Dźwięk w pliku MP4
ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4
WebM/VP9
ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm
Dźwięk w pliku WebM
ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm
filmy na żądanie i transmisje na żywo,
W tym artykule omówimy 2 rodzaje protokołów przesyłania strumieniowego. Pierwsza to dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP (DASH), czyli technika strumieniowego przesyłania danych z adaptacyjną szybkością transmisji bitów oraz metoda opracowana na podstawie standardów internetowych służąca do prezentowania wideo na żądanie. Drugim jest Transmisja na żywo przez HTTP (HLS), czyli standard Apple dotyczący transmisji na żywo i filmów na żądanie w internecie.
DASH/MPD
W tym przykładzie plik wyjściowy z opisem prezentacji multimedialnej (MPD) jest generowany na podstawie strumieni audio i wideo.
packager \
input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
--mpd_output myvideo_vod.mpd
HLS
Te przykłady generują plik wyjściowy M3U8
z strumieni audio i wideo, który jest playlistą multimedialną zakodowaną w formacie UTF-8.
ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
-hls_time 10 -hls_list_size 0 myvideo.m3u8
LUB:
packager \
'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8"
Teraz, gdy już wiesz, jak konwertować pliki, możesz wykorzystać informacje z tego artykułu i dowiedzieć się więcej o szyfrowaniu multimediów.