Dan*_*Dan 6 command-line ffmpeg text-processing
我正在尝试从 ffmpeg 输出中提取某些信息。
示例 ffmpeg 输出:
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
libavutil version: 49.0.0
libavcodec version: 51.9.0
libavformat version: 50.4.0
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file.mov':
Duration: 00:01:32.0, start: 0.000000, bitrate: 63489 kb/s
Stream #0.0(eng): Audio: pcm_s16le, 48000 Hz, stereo, 1536 kb/s
Stream #0.1(eng), 29.97 fps(r): Video: Apple ProRes 422, 1280x720
Must supply at least one output file
Run Code Online (Sandbox Code Playgroud)
我想取回一个只有持续时间、帧速率、编解码器和大小的字符串,例如:
[00:01:32_29.97_Apple ProRes 422_1280x720]
Run Code Online (Sandbox Code Playgroud)
我尝试从这个开始(从另一个提示):
ffmpeg -i file.mov 2>&1 | sed -n 's/Duration: \(.*\), start/\1/gp'
Run Code Online (Sandbox Code Playgroud)
获得持续时间,但这只是“删除”了Duration
and , start
,即:
00:01:32.0: 0.000000, bitrate: 63489 kb/s
Run Code Online (Sandbox Code Playgroud)
PS:我也想Apple
从Apple ProRes 422
:-) 中删除
谢谢!
更新:我能够提取编解码器
sed -n "s/.*\Video: \(.*\),.*/\1/p"
Run Code Online (Sandbox Code Playgroud)
但我不知道如何 (a) 获得大小和帧率,以及 (b) 将搜索组合在一行上......
awk
:这就像魔法,但更好。
#!/usr/bin/awk -f
/Duration/ {sub(/,/, "", $2); fields["dur"] = $2}
/fps/ { fields["fps"] = $3 }
/Video/ {
sub(/.*Video:/, "", $0);
sub(/\W*Apple\W*/, "", $0);
split($0, arr, ", ")
fields["codec"] = arr[1];
fields["res"] = arr[2];
}
END {
printf "[%s_%s_%s_%s]\n",
fields["dur"],
fields["fps"],
fields["codec"],
fields["res"]
}
Run Code Online (Sandbox Code Playgroud)