Tôi hiện đang sử dụng FFMPEG để nhúng phụ đề vào tệp MP4 của mình và tôi cố gắng tìm hiểu cách tùy chỉnh đặt thẻ siêu dữ liệu "handler_name" trên dòng phụ đề của mình Tôi có thể kiểm soát tên được hiển thị khi chọn phụ đề trong một trình phát như MPC-HC (Media Player Classic)?Cách đặt siêu dữ liệu handler_name tùy chỉnh cho luồng phụ đề bằng FFMPEG
lệnh hiện tại của tôi để nhúng phụ đề là:
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"
Output:
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%
Lệnh hoàn thành thành công, nhưng khi tôi chạy:
ffmpeg -i "C:\path\to\subbed_video.mp4"
nó cho thấy:
Stream #0:2(eng): Subtitle: mov_text (tx3g/0x67337874), 0 kb/s (default)
Metadata:
handler_name : SubtitleHandler
Mặc dù sản lượng từ lệnh cho thấy:
Stream #0:2(eng): Subtitle: mov_text ([8][0][0][0]/0x0008) (default)
Metadata:
handler_name : English
encoder : Lavc56.15.100 mov_text
Không có vấn đề gì tùy chọn Tôi đã thử hoặc theo thứ tự nào tôi đặt các thẻ -metadata trong, thẻ này chỉ đơn giản là sẽ không được thiết lập với FFMPEG? Tôi thấy nó thực sự xấu xí khi thấy SubtitleHandler [eng] (tx3g) (Tiếng Việt) trong trình đơn của trình phát thay vì chỉ cần nói Tiếng Anh.
Bây giờ, tôi có thể làm việc xung quanh vấn đề này bằng cách sử dụng MP4BOX để nhúng phụ đề vào mp4 của tôi bằng cách sử dụng:
MP4BOX -lang eng -add "video.srt:name=English" "video.mp4" -out "subbed_video.mp4"
Thêm "name = tiếng Anh" cho phép tôi để thiết lập "handler_name" dòng phụ đề để "Anh"; hiển thị hoàn hảo ở FFMPEG và MPC-HC, nhưng vấn đề là tôi không muốn ứng dụng của tôi phụ thuộc vào một công cụ bổ sung bên ngoài như MP4BOX nếu nó có thể tránh được?
tôi rất nhiều sẽ đánh giá cao bất kỳ lời khuyên về làm thế nào để thiết lập đúng các "handler_name" tag vào hoạt động phụ đề của tôi sử dụng FFMPEG, hoặc có thể là một xác nhận về việc liệu FFMPEG thậm chí có thể xử lý các thẻ này thấy như nó không phải là về mặt kỹ thuật được liệt kê trong FFMPEG's valid metadata tag list?
P.S. Để thay thế cho FFMPEG, tôi sẵn sàng sử dụng AtomicParsley để đặt "handler_name" vì tôi đã sử dụng nó để đặt siêu dữ liệu nâng cao trên "subbed_video.mp4" sau khi tôi nhúng phụ đề. Nó có vẻ như nó sẽ có thể làm với AtomicParsley, nhưng tôi đã không thể hiểu một nửa thông tin trợ giúp liên quan đến việc thiết lập tùy chỉnh của ATOM.
TIA !!
Tôi cũng nên đề cập đến rằng đây đã được thử nghiệm với 64-bit build (git-92a596f mới nhất (2014/12/16)) từ đây: http://ffmpeg.zeranoe.com/builds/ – AWainb