- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在编写一个用于制作音频和视频播客的 python 脚本。有一堆录制的媒体文件(音频和视频)和包含元信息的文本文件。
现在我想编写一个函数,它将元数据文本文件中的信息添加到所有媒体文件(原始文件和转换后的文件)中。因为我必须处理许多不同的文件格式(wav
、flac
、mp3
、mp4
、ogg
, ogv
...) 如果有一个工具可以将元数据添加到任意格式,那就太好了。
我的问题:
如何使用 ffmpeg/avconv
更改文件的元数据而不更改文件的音频或视频并且不创建新文件?是否有另一个命令行/python 工具可以为我完成这项工作?
到目前为止我尝试了什么:
我认为 ffmpeg/avconv
可以是这样一个工具,因为它可以处理几乎所有的媒体格式。我希望,如果我将 -i input_file
和 output_file
设置为同一个文件,ffmpeg/avconv
将足够聪明以离开该文件不变。然后我可以设置 -metadata key=value
并且只会更改元数据。
但我注意到,如果我输入 avconv -i test.mp3 -metadata title='Test title' test.mp3
音频 test.mp3
将被重新转换在另一个比特率。
所以我想用 -c copy
来复制所有的视频和音频信息。不幸的是,这也不起作用:
:~$ du -h test.wav # test.wav is 303 MB big
303M test.wav
:~$ avconv -i test.wav -c copy -metadata title='Test title' test.wav
avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the
Libav developers
built on Jun 12 2012 16:37:58 with gcc 4.6.3
[wav @ 0x846b260] max_analyze_duration reached
Input #0, wav, from 'test.wav':
Duration: 00:29:58.74, bitrate: 1411 kb/s
Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
File 'test.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'test.wav':
Metadata:
title : Test title
encoder : Lavf53.21.0
Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, 1411 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press ctrl-c to stop encoding
size= 896kB time=5.20 bitrate=1411.3kbits/s
video:0kB audio:896kB global headers:0kB muxing overhead 0.005014%
:~$ du -h test.wav # file size of test.wav changed dramatically
900K test.wav
你看,如果 input_file
和 output_file
相同,我不能使用 -c copy
。当然我可以制作一个临时文件:
:-$ avconv -i test.wav -c copy -metadata title='Test title' test_temp.mp3
:-$ mv test_tmp.mp3 test.mp3
但是这种解决方案会(临时)在文件系统上创建一个新文件,因此并不可取。
最佳答案
你可以像这样用 FFmpeg 做到这一点:
ffmpeg -i input.avi -metadata key=value -codec copy output.avi
例子:
$ du -h test.mov
27M test.mov
$ ffprobe -loglevel quiet -show_format out.mov | grep title # nothing found
$ ffmpeg -loglevel quiet -i test.mov -codec copy -metadata title="My title" out.mov
$ du -h out.mov
27M out.mov
$ ffprobe -loglevel quiet -show_format out.mov | grep title
TAG:title=My title
见 documentation for -metadata
和 stream copying了解更多信息。
另请注意,并非所有格式都允许设置任意元数据,例如,Quicktime 执行 -metadata title="my title"
会达到您的预期,但 -metadata foo= bux
什么都不做。
关于python - 如何在不创建新文件的情况下使用 ffmpeg/avconv 更改元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474532/
我需要将视频转换为图像。一个要求是索引从0开始。执行下面的命令。 avconv -i INPUT %04d.png 但是,生成的图像索引从 0001.png 开始,而不是从 0000.png 开始。
我正在运行一个服务器应用程序,它接受来自 iOS 应用程序的视频上传。该应用程序将 .mov 上传到服务器,服务器将其转换为 .mp4(这是为了将来的 Android 兼容性)。问题是 .mov 格式
似乎我从来没有真正设法将我的头包裹在子流程上。此命令行在 bash 中工作 avconv -i "concat:/tmp/BABAR_AND_THE_A-011A-hts-a-v1-cc3651d01
我想使用 avconv (ffmpeg fork) 将视频分割成帧。为了加快我想使用多线程的过程。为此,我在具有 4 个内核的 VM 上使用“-threads 3”。我发现顶部的“-threads 1
我有名为 alice.png 的文件, bob.png , charlie.png (有数百个)我想从中制作视频。我尝试的是 avconv -i alice.png -i bob.png -i ch
我没有音频/视频不同步的问题。我的音频很好,并且同步。问题是音频文件跳过。这是我的输出:http://youtu.be/D2TdXnXHt8o 这是我的脚本: #!/bin/sh echo "Ente
我正在尝试使用 avconv 将一堆 png 制作成视频,png 的编号类似于 filename_所以我通常只使用命令: avconv -r 10 -i filename_%d.png -b:v 10
我想编写一个脚本,根据一组图像文件路径输入生成一个延时视频。我知道你可以执行这样的事情: avconv -r 15 -i %04d.JPG -s hd480 -vcodec libx264 time-
我有一个带有 h.254 视频的 rtp 直播流,我想将其复制到我使用的文件中: avconv -i rtp://@192.168.0.34:60005 -an -acodec copy -vcode
有没有办法使用 libav/avconv 来复制 FFMPEG 中瓦片过滤器的效果? 我正在尝试为每十秒的视频输入创建一个从左到右的图像 strip 。 我的计划是首先生成图像,然后创建图像条。最好我
我正在使用 avconv 将 .mov 文件转换为 .mpg 文件。我的 php 应用程序正在运行的命令如下: avconv -y -i '$finalvideo' -target ntsc-dvd
我在 Ubuntu 15.10(狡猾)上。我想在第一个 30 秒的视频中添加文本。我可以使用以下命令将视频添加到视频的整个长度 $ avconv -i input.MTS -metadata titl
我想连接一组视频我的数组是 $interFIFO // array( 0=>test1.mpg, 1=>test2.mpg,
我正在尝试使用 avconv 翻转视频在 Ubuntu 上。当它翻转 1 分钟的视频时,处理和转换需要 12 到 40 秒。 视频文件大小:7mb,时长:1 分钟 avconv -i 1_1.mp4
使用 avconv 捕获视频有问题 我在 shell 0 中使用此命令 video0 并在 shell 1 中使用 video1 avconv -f video4linux2 -i /dev/vide
文件夹中有几个 block 。 0001.mp4 0002.mp4 0003.mp4 ... 0112.mp4 我想将它们合并成 full.mp4 我尝试使用: avconv -f concat -i
当我通过 avconv 转换视频时,它占用了 95% 以上的百分比,有什么方法可以减少转换时间吗? 最佳答案 尝试使用 -threads auto 或将其推送到您的 CPU 拥有的内核/线程数。 这是
在项目中使用了旧版本的 ffmpeg,现在我计划切换到 avconv,想知道 -fps 过滤器是否已更改或折旧?如果已更改,则 avconv 中 -fps 过滤器的当前替代品是什么?非常感谢 最佳答案
我有一台没有视频卡的 Ubuntu PC。 我使用 avconv 进行视频转换: avconv -i video.wmv -c:v libx264 -c:a libmp3lame -b:v 1800K
当我尝试在 node.js 中运行一个不和谐的机器人时,它出现了这个错误 Error: FFmpeg/avconv not found! at Function.getInfo (C:\Use
我是一名优秀的程序员,十分优秀!