Khi chia MP4 với ffmpeg, làm cách nào để bao gồm siêu dữ liệu?


8

Tôi có một vài MP4 mà tôi muốn tải lên tài khoản flickr của mình nhưng chúng có kích thước tối đa 500mb vì tôi chỉ có khoảng 550, tôi dự định chỉ cần chia chúng ra một nửa rồi tải chúng lên, nhưng tôi muốn chắc chắn rằng tất cả meta dữ liệu được bao gồm nhưng dường như không phải vậy. Tôi đã thử từng cách sau đây nhưng không có may mắn, (ở cuối bài này tôi có bản gốc và các kết quả đầu ra mới của ffprobe):

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_metadata 0:0 SANY0069A.MP4

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_meta_data SANY0069.MP4:SANY0069A.MP4 SANY0069A.MP4

với cái này tôi tự sản xuất các thẻ meta riêng lẻ mà tôi đã lấy từ lệnh này

ffmpeg -i SANY0069A.MP4 -f ffmetadata meta.txt
ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -metadata major_brand="mp42" -metadata minor_version="1" -metadata compatible_brands="mp42avc1" -metadata creation_time="2012-09-29 09:05:50" -metadata comment="SANYO DIGITAL CAMERA CA9" -metadata comment-eng="SANYO DIGITAL CAMERA CA9" SANY0069A.MP4

sử dụng đầu ra của lệnh cũ tôi cũng đã thử điều này:

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -f ffmetadata -i meta.txt SANY0069A.MP4 

Đầu ra: đầu ra mẫu từ lệnh đầu tiên của tôi:

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_metadata 0:0 SANY0069A.MP4
ffmpeg version 0.8.12, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
  Duration: 00:08:38.71, start: 0.000000, bitrate: 9142 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9007 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50
File 'SANY0069A.MP4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'SANY0069A.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
    encoder         : Lavf53.5.0
    Stream #0.0(eng): Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=2-31, 9007 kb/s, 30k tbn, 29.97 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop, [?] for help
frame= 7773 fps=4644 q=-1.0 Lsize=  289607kB time=00:04:19.35 bitrate=9147.4kbits/s    
video:285416kB audio:4033kB global headers:0kB muxing overhead 0.054571%

và cuối cùng, khi tôi so sánh ffprobe của phần gốc và phần tách đầu tiên tôi nhận được 2 kết quả sau: bản gốc

ffprobe version 0.8.12, Copyright (c) 2007-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
  Duration: 00:08:38.71, start: 0.000000, bitrate: 9142 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9007 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50

Tách

ffprobe version 0.8.12, Copyright (c) 2007-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069A.MP4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.5.0
    comment         : SANYO DIGITAL CAMERA CA9
  Duration: 00:04:19.37, start: 0.000000, bitrate: 9146 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9015 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00

Tôi biết điều này là vô cùng dài nhưng nó thực sự là một câu hỏi khá đơn giản. Tôi nghĩ rằng tốt nhất là cung cấp càng nhiều chi tiết càng tốt.

bất kỳ lời khuyên nào ở đây sẽ là tuyệt vời,

Cảm ơn


1
Các câu hỏi dài, chi tiết tốt hơn nhiều so với ngược lại, và thật tốt khi không phải yêu cầu đầu ra giao diện điều khiển ffmpeg.
llogan

Vâng tôi nghĩ vậy, tôi không chính xác là một linux noob vì vậy tôi đoán đây là thông tin mà bất cứ ai thực sự có thể giúp đỡ sẽ cần.
Josh

Tôi chỉ xem xét điều này một cách ngắn gọn, nhưng tôi tin tất cả creation_timetrừ (trừ khi nó bị bỏ qua) và commentđược đặt tự động. Hành vi của creation_timedường như khác nhau giữa 0.8.12và ffmpeg hiện tại từ Git; nó không xuất hiện để thêm / sao chép này trừ khi tôi đưa nó vào. Tôi đã không đề cập đến mã, nhưng không sao chép creation_timekhi sao chép luồng có thể hoặc không được coi là một lỗi tùy thuộc vào người bạn yêu cầu.
llogan

Tôi nghĩ rằng cách nó hoạt động trên hệ thống của tôi sẽ bị coi là một lỗi, nếu nó không sao chép thời gian tạo từ video gốc thì nó có nên đặt thời gian tạo thành hiện tại không? Đó là, thay vì 1/1/1970 (kỷ nguyên?) Ngoài ra, không phải Major_brand, junior_version và tương_brands có giống nhau không nếu tôi sử dụng codec "sao chép"? Tương tự như vậy với bộ mã hóa được đặt?
Josh

Câu trả lời:


2

FFmpeg sẽ tự động chuyển siêu dữ liệu (vì vậy hãy thử mà không cần -map_metadataxem nó có hoạt động không), nhưng nếu không, bạn nên thử sử dụng -map_metadata 0chứ không phải -map_metadata 0:0- :0đó là nói đến luồng dữ liệu đầu tiên (có thể là video) và ffmpeg có thể đang thử để chỉ sao chép siêu dữ liệu cụ thể theo luồng, chứ không phải toàn bộ tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.