Attualmente sto usando FFMPEG per incorporare i sottotitoli nei miei file MP4 e sono perplesso nel tentativo di capire come personalizzare il tag metadata "handler_name" sul mio flusso di sottotitoli in modo Posso controllare il nome visualizzato quando si selezionano i sottotitoli in un player come MPC-HC (Media Player Classic)?Come impostare i metadati di handler_name personalizzati per il flusso di sottotitoli usando FFMPEG
mio comando corrente per incorporare il sottotitolo è:
ffmpeg -i "video.mp4" -sub_charenc UTF-8 -i "video.srt" -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:0 handler_name="English" -id3v2_version 3 -write_id3v1 1 "subbed_video.mp4"
uscita:
C:\path\to>ffmpeg -y -i "video.mp4" -sub_charenc UTF-8 -i "video.srt" -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language="eng" -metadata:s:s:0 handler_name="English" -id3v2_version 3 -write_id3v1 1 "subbed_video.mp4"
ffmpeg version N-68482-g92a596f Copyright (c) 2000-2014 the FFmpeg developers
built on Dec 16 2014 02:53:08 with gcc 4.9.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable
libavutil 54. 15.100/54. 15.100
libavcodec 56. 15.100/56. 15.100
libavformat 56. 15.105/56. 15.105
libavdevice 56. 3.100/56. 3.100
libavfilter 5. 3.101/5. 3.101
libswscale 3. 1.101/3. 1.101
libswresample 1. 1.100/1. 1.100
libpostproc 53. 3.100/53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.34.101
Duration: 01:27:44.17, start: 0.000000, bitrate: 878 kb/s
Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 1280x536 [SAR 1:1 DAR 160:67], 842 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (HE-AAC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 32 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream #0:2(eng): Subtitle: mov_text (tx3g/0x67337874), 0 kb/s (default)
Metadata:
handler_name : SubtitleHandler
Input #1, srt, from 'video.srt':
Duration: N/A, bitrate: N/A
Stream #1:0: Subtitle: subrip
Output #0, mp4, to 'subbed_video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.15.105
Stream #0:0(und): Video: h264 ([33][0][0][0]/0x0021), yuv420p, 1280x536 [SAR 1:1 DAR 160:67], q=2-31, 842 kb/s, 24 fps, 24 tbr, 12288 tbn, 12288 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac ([64][0][0][0]/0x0040), 48000 Hz, stereo, 32 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream #0:2(eng): Subtitle: mov_text ([8][0][0][0]/0x0008) (default)
Metadata:
handler_name : English
encoder : Lavc56.15.100 mov_text
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (mov_text (native) -> mov_text (native))
Press [q] to stop, [?] for help
frame=126337 fps=13751 q=-1.0 Lsize= 564499kB time=01:27:44.17 bitrate= 878.5kbits/s
video:541239kB audio:20564kB subtitle:39kB other streams:0kB global headers:0kB muxing overhead: 0.472881%
Il comando viene completato con successo, ma quando ho eseguito:
ffmpeg -i "C:\path\to\subbed_video.mp4"
mostra:
Stream #0:2(eng): Subtitle: mov_text (tx3g/0x67337874), 0 kb/s (default)
Metadata:
handler_name : SubtitleHandler
Anche se l'output del comando mostra:
Stream #0:2(eng): Subtitle: mov_text ([8][0][0][0]/0x0008) (default)
Metadata:
handler_name : English
encoder : Lavc56.15.100 mov_text
Non importa quello che le opzioni che ho provato o che ordine ho posto i tag -metadata in, questo tag semplicemente non impostato con FFMPEG? Trovo davvero brutto vedere SubtitleHandler [ita] (tx3g) (inglese) nel menu del mio lettore invece di dire semplicemente inglese.
Ora, posso risolvere questo problema utilizzando MP4BOX per incorporare i sottotitoli in di usando il mio mp4:
MP4BOX -lang eng -add "video.srt:name=English" "video.mp4" -out "subbed_video.mp4"
Aggiunta "name = inglese" mi permette di impostare "handler_name" del flusso dei sottotitoli per "Inglese"; che si visualizza perfettamente in FFMPEG e MPC-HC, ma il problema è che non voglio che la mia app sia dipendente da uno strumento esterno aggiuntivo come MP4BOX se può essere evitato?
Io apprezzo molto qualche consiglio su come impostare correttamente il tag "handler_name" sul mio flusso dei sottotitoli utilizzando FFMPEG, o forse una conferma dell'esistenza o meno FFMPEG può anche gestire questo tag visto che non è tecnicamente elencato nella FFMPEG's valid metadata tag list?
P.S. In alternativa a FFMPEG, sarei disposto a utilizzare AtomicParsley per impostare "nome_handler" poiché lo userò già per impostare i metadati avanzati su "subbed_video.mp4" dopo aver incorporato i sottotitoli. Sembra che sarebbe possibile fare con AtomicParsley, ma non sono stato in grado di capire la metà delle informazioni di aiuto per quanto riguarda l'impostazione di ATOM personalizzati.
TIA !!
Vorrei anche ricordare che questo è stato testato con l'ultima a 64-bit build (git-92a596f (2014/12/16)) da qui: http://ffmpeg.zeranoe.com/builds/ – AWainb