32

オーディオとビデオのポッドキャストを作成するための Python スクリプトを作成しています。記録されたメディア ファイル (オーディオとビデオ) と、メタ情報を含むテキスト ファイルがたくさんあります。

ここで、メタ データ テキスト ファイルからの情報をすべてのメディア ファイル (元のファイルと変換されたファイル) に追加する関数をプログラムしたいと考えています。多くの異なるファイル形式 ( wavflacmp3mp4、 ...) を処理する必要があるためoggogvメタデータを任意の形式に追加するツールがあれば便利です。

私の質問:

ffmpeg/avconvファイルのオーディオまたはビデオを変更せず、新しいファイルを作成せずに、ファイルのメタデータを変更するにはどうすればよいですか? 私のために仕事をする別のコマンドライン/ Pythonツールはありますか?

私がこれまでに試したこと:

ffmpeg/avconvほぼすべてのメディア形式を処理できるため、そのようなツールになる可能性があると思いました。と を同じファイルに設定-i input_fileした場合、ファイルを変更せずにそのままにしておくのに十分なほどスマートになることを願っていました。次に、設定すると、メタデータだけが変更されます。output_fileffmpeg/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

ほら、とが同じだと使えませ-c copyん。もちろん、一時ファイルを作成することもできます。input_fileoutput_file

:-$ avconv -i test.wav -c copy -metadata title='Test title' test_temp.mp3
:-$ mv test_tmp.mp3 test.mp3

ただし、この解決策はファイルシステムに (一時的に) 新しいファイルを作成するため、好ましくありません。

4

7 に答える 7

49

次のように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

詳細については、ストリーム コピーに関するドキュメント-metadataストリーム コピーに関するドキュメントを参照してください。

また、すべてのフォーマットで任意のメタデータを設定できるわけではないことにも注意-metadata title="my title"してください-metadata foo=bux

于 2012-07-13T22:15:07.580 に答える
24
于 2012-07-15T13:50:58.837 に答える