Zdravím.
Hrál jsem si s tím několik hodin (hledání na internetu a zkoušení), jelikož mě to taky zajímá, protože si občas archivuji televizní nahrávky pomocí ffmpeg do mkv formátu. Zjistil jsem, že mnou navrhované -map_metadata:s:a 0:s:a funguje, když je výstup v mkv, ale nefunguje, když konvertuji do mp4, resp. aspoň to tak vypadalo, protože ani ffprobe ani mpv u výsledku nehlásily žádný tag 'Title' u audio streamu.
Pro ověření jsem hledal, čím se dají editovat metadata u mp4, někdo radil, že to jde ve vlc, což se mi nepodařilo, ale náhodou jsem zjistil, že vlc ten název zvukové stopy zobrazuje. Takže jsem si nainstaloval mediainfo a tento program název zobrazil taky.
Zbytek byl snadný. Vzal jsem nahrávku, která má kromě videa dvě zvukové stopy (českou a anglickou) a také titulky v uvedených jazycích, jak ukazuje výstup z mpv:
$ mpv Nahravka.mkv
(+) Video --vid=1 (*) 'video' (hevc 1920x800 23.976fps)
(+) Audio --aid=1 --alang=cze (*) 'audio cz' (ac3 6ch 48000Hz)
Audio --aid=2 --alang=eng 'audio en' (ac3 6ch 48000Hz)
Subs --sid=1 --slang=cze 'subtitles cz' (subrip)
Subs --sid=2 --slang=eng 'subtitles en' (subrip)
File tags:
Title: Nahravka
AO: [pulse] 48000Hz 5.1(side) 6ch float
VO: [gpu] 1920x800 yuv420p10
AV: 00:00:01 / 02:06:01 (0%) A-V: 0.000
Pak jsem zkusil vytáhnout pomocí ffmpeg anglický zvuk a české titulky a výsledek dát do mp4:
ffmpeg -y -i Nahravka.mkv -map 0:v -c:v copy -map 0:a:m:language:eng -c:a copy -map 0:s:m:language:cze -c:s mov_text Nahravka.mp4
Ve výsledku jsou správně oba tituly, jak ukazuje zkrácený výpis programu mediainfo:
Audio
ID : 2
Format : AC-3
Format/Info : Audio Coding 3
Commercial name : Dolby Digital
Codec ID : ac-3
Duration : 2 h 6 min
Bit rate mode : Constant
Bit rate : 640 kb/s
Channel(s) : 6 channels
Channel layout : L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Compression mode : Lossy
Stream size : 577 MiB (34%)
Title : audio en
Language : English
Service kind : Complete Main
Default : Yes
Alternate group : 1
Text
ID : 3
Format : Timed Text
Muxing mode : sbtl
Codec ID : tx3g
Duration : 2 h 5 min
Bit rate mode : Variable
Bit rate : 53 b/s
Frame rate : 0.339 FPS
Stream size : 48.4 KiB (0%)
Title : subtitles cz
Language : Czech
Default : Yes
Forced : No
Alternate group : 3
Pokud použiji ještě volbu -map_metadata, zkopírují se jen explicitně uvedená metadata, např. pokud u předchozího příkazu přidám -map_metadata:s:a 0:s:a:0, přepíše se mi český název k anglickému zvuku, k ostatním streamům se nenakopíruje nic.
Jirka
Tak to je zajimave
Dekuji.
Ted jsem to zkousel z MKV do MP4 a opravdu tam ten "Title" zustane
ffmpeg -y -i in.mkv -map 0:v -c:v copy -map 0:a:m:language:spa -c:a copy -map 0:s:m:language:spa -c:s mov_text out.SPA.mp4
U MP4, se mi to ale nepovedlo
ffmpeg -y -i in.mp4 -map 0:v -c:v copy -map 0:a:m:language:spa -c:a copy -map 0:s:m:language:spa -c:s mov_text -map_metadata:s:a 0:s:a:0 out.SPA.mp4
navic misto SPA se prekopirovaly akorat cinske audio stopy .....
a u titulku chybi i "Language"
To vypada ze FFMpeg si s MP4 moc nerozumi