2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ffmpegで複数のVOBファイルを一つのmp4ファイルに変換するRubyスクリプトを実装する

Posted at

この記事は何

最近DVDに保存していた動画ファイルをmp4ファイルとして書き出す必要があったため、
スクリプトを作成しました。
この記事では記録のためスクリプトの実装を残しておきます。

環境

  • Ruby: v3.2.2
  • ffmpeg: v7.1
  • マシン: MacBook Air M1, 2020

実装したRubyスクリプト

実装したスクリプトは以下の通りです。

eport_dvd.rb
require 'fileutils'

# Get the output directory from command-line arguments
if ARGV.length != 1
  puts "Usage: ruby export_dvd.rb <file name>"
  exit 1
end

# Define the directory containing the VOB files
input_directory = "/path/to/input/directory"

output_directory = "path/to/output/directory"

# Ensure the output directory exists
FileUtils.mkdir_p(output_directory)

# Get all VOB files in the directory, excluding VIDEO_TS.VOB
vob_files = Dir.glob(File.join(input_directory, '*.VOB')).sort

# Create a temporary file list for ffmpeg
file_list = File.join(output_directory, 'file_list.txt')
File.open(file_list, 'w') do |f|
  vob_files.each do |vob_file|
    f.puts "file '#{vob_file}'"
  end
end

# Construct the output MP4 file name
output_file = File.join(output_directory, "#{ARGV[0]}.mp4")

# Call ffmpeg to concatenate the VOB files into a single MP4 file
command = "ffmpeg -f concat -safe 0 -i \"#{file_list}\" -b:v 1500k -r 30 -c:v h264_videotoolbox -pix_fmt yuv420p -strict -2 -acodec aac -ar 44100 \"#{output_file}\""
puts "Executing: #{command}"
system(command)

# Check if the conversion was successful
if $?.exitstatus != 0
  puts "Error concatenating VOB files to MP4"
else
  puts "Successfully concatenated VOB files to #{output_file}"
end

# Clean up the temporary file list
File.delete(file_list)

利用方法

input_directoryには、VOBファイルが保存されているディレクトリを指定します。
DVDから直接書き出したい場合は/Volumes/DVDボリューム名のようなパスを指定することになると思います。
output_directoryには指定したい書き出し先のパスを指定します。

input_directoryoutput_directoryを指定した後、
以下のように実行することで、mp4への変換を行うことが可能です。

ruby export_dvd.rb 書き出したいファイル名

ポイント

今回はffmpegでエンコードをする上でいくつかオプションを指定しています。
その中でも特に認識しておいたほうが良さそうな箇所について紹介します。

-c:v h264_videotoolbox

この指定は、エンコーダーをh264_videotoolboxにするというオプションです。
h264_videotoolboxはMacで使えるハードウェアアクセラレーションのオプションです。
ハードウェアアクセラレーションを利用することで変換処理を高速化することが可能ですが、
画質などに影響の出る場合があるようです(細かい検証はしていません)
他の実行環境などを使っている場合は、適宜オプションの変更を行なってください。

他の環境で使えるオプションについてm紹介している記事があったのでよかったら参考にしてください。

-pix_fmt yuv420p

こちらについてはMacのQuick Time Playerで実行可能にするため指定しているオプションです。
必要ない場合は外してください。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?