1

ソースビデオの焼き付けられたタイムコードを表示する ffmpeg を使用してビデオを生成しようとしています。OS X で bash スクリプトを使用しています。ビデオ 1 の開始タイムコードは 09:59:30:00 です。

ffmpeg で drawtext フィルターを使用するには、フィルターを区切るために使用されるコロンを閉じる必要があります。

スクリプトではこの形式にする必要がありtimecode='00\:00\:00\:00'、実際のターミナル ウィンドウでは最終的に次のように表示されます。timecode='\''00\:00\:00\:00'\''

sed や awk などを使用して、$timecode 変数に格納されている値を変換する方法はありますか?

ffprobe を使用してタイムコードを生成し、それを変数として追加しています

$ timecode=($(ffprobe -v error -show_entries format_tags=timecode -of default=noprint_wrappers=1:nokey=1 "$1" ))
$ echo $timecode
09:59:30:00

この方法で変数 $timecode をスクリプトに追加すると:

ffmpeg -i "$1" -c:v libx264 -crf 23 -pix_fmt yuv420p -vf drawtext="fontsize=45":"fontfile=/Library/Fonts/Arial\ Black.ttf:fontcolor=white:timecode="$timecode":rate=$framerate:boxcolor=0x000000AA:box=1:x=360-text_w/2:y=480" ""$mezzanine"/"$filenoext"_PRORES.mov"

bash -x を使用すると、何も閉じずにタイムコードが表示されます。

+ ffmpeg -i /Users/kieranoleary/Downloads/AS11_DPP_HD_OEM_SAMPLE_136_1.mxf -c:v libx264 -crf 23 -pix_fmt yuv420p -vf 'drawtext=fontsize=45:fontfile=/Library/Fonts/Arial\ Black.ttf:fontcolor=white:timecode=09:59:30:00:rate=25/1:boxcolor=0x000000AA:box=1:x=360-text_w/2:y=480' /Users/kieranoleary/Downloads/AS11_DPP_HD_OEM_SAMPLE_136_1/mezzanine/AS11_DPP_HD_OEM_SAMPLE_136_1_PRORES.mov

次のエラーが表示されます。

[Parsed_drawtext_0 @ 0x7f9dc242e360] Both text and text file provided. Please provide only one
[AVFilterGraph @ 0x7f9dc242e4e0] Error initializing filter 'drawtext' with args 'fontsize=45:fontfile=/Library/Fonts/Arial Black.ttf:fontcolor=white:timecode=09:59:30:00:rate=25/1:boxcolor=0x000000 A:box=1:x=360-text_w/2:y=480'
Error opening filters!
4

1 に答える 1

3

私は次のことを試します:

$ IFS=: read -a timecode < <(ffprobe -v error -show_entries format_tags=timecode -of default=noprint_wrappers=1:nokey=1 "$1" )
$ printf -v timecode '%s\:%s\:%s\:%s' "${timecode[@]}"
$ echo "$timecode"
09\:59\:30\:00

実際に を呼び出すときはffmpeg、それほど多くの引用符は必要ありません。

$ ffmpeg -i "$1" -c:v libx264 -crf 23 -pix_fmt yuv420p -vf \
    drawtext="fontsize=45:fontfile=/Library/Fonts/Arial Black.ttf:fontcolor=white:timecode=$timecode:rate=$framerate:boxcolor=0x000000AA:box=1:x=360-text_w/2:y=480" \
    "$mezzanine/${filenoext}_PRORES.mov"

コマンド呼び出しをより読みやすくするために、別の配列を中間変数として使用できます。

drawtext_options=(
    fontsize=45
    fontfile="/Library/Fonts/Arial Black.ttf"
    fontcolor=white
    timecode="$timecode"
    rate="$framerate"
    boxcolor=0x000000AA
    box=1
    x=360-text_w/2
    y=480
)

drawtext_options=$(IFS=:; echo "${drawtext_options[*]}")
ffmpeg -i "$1" -c:v libx264 -crf 23 -pix_fmt yuv420p -vf \
    drawtext="$drawtext_options" \
    "$mezzanine/${filenoext}_PRORES.mov"
于 2015-08-31T22:40:36.450 に答える